'sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget#/translations/zh_CN/gpu/driver-uapimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/zh_TW/gpu/driver-uapimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/it_IT/gpu/driver-uapimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ja_JP/gpu/driver-uapimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/ko_KR/gpu/driver-uapimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/pt_BR/gpu/driver-uapimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget#/translations/sp_SP/gpu/driver-uapimodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hDRM Driver uAPIh]hDRM Driver uAPI}(hhhhhNhNubah}(h]h ]h"]h$]h&]refidid1uh1hhhhhh=/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi.rsthKubhtopic)}(h Contents h](h)}(hContentsh]hContents}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh bullet_list)}(hhh]h list_item)}(hhh](h paragraph)}(hhh]h reference)}(hhh]hDRM Driver uAPI}(hhhhhNhNubah}(h]hah ]h"]h$]h&]refiddrm-driver-uapiuh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh](h)}(hhh]h)}(hhh]h)}(hhh]h drm/i915 uAPI}(hjhhhNhNubah}(h]id2ah ]h"]h$]h&]refid drm-i915-uapiuh1hhj ubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh](h)}(hhh]h)}(hhh]hdrm/nouveau uAPI}(hj2hhhNhNubah}(h]id3ah ]h"]h$]h&]refiddrm-nouveau-uapiuh1hhj/ubah}(h]h ]h"]h$]h&]uh1hhj,ubh)}(hhh]h)}(hhh]h)}(hhh]h)}(hhh]hVM_BIND / EXEC uAPI}(hjQhhhNhNubah}(h]id4ah ]h"]h$]h&]refidvm-bind-exec-uapiuh1hhjNubah}(h]h ]h"]h$]h&]uh1hhjKubah}(h]h ]h"]h$]h&]uh1hhjHubah}(h]h ]h"]h$]h&]uh1hhj,ubeh}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]h)}(hhh]hdrm/panthor uAPI}(hjhhhNhNubah}(h]id5ah ]h"]h$]h&]refiddrm-panthor-uapiuh1hhj|ubah}(h]h ]h"]h$]h&]uh1hhjyubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]h)}(hhh]h drm/xe uAPI}(hjhhhNhNubah}(h]id6ah ]h"]h$]h&]refid drm-xe-uapiuh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]h)}(hhh]hdrm/asahi uAPI}(hjhhhNhNubah}(h]id7ah ]h"]h$]h&]refiddrm-asahi-uapiuh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]uh1hhhhhhNhNubeh}(h]contentsah ]contentsah"]contentsah$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h drm/i915 uAPIh]h drm/i915 uAPI}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjhhhhhKubhtarget)}(h1.. _uevents generated by i915 on its device node:h]h}(h]h ]h"]h$]h&]hʌ,uevents-generated-by-i915-on-its-device-nodeuh1j hKhjhhhNubh)}(h0**uevents generated by i915 on its device node**h]hstrong)}(hjh]h,uevents generated by i915 on its device node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]jah ]h"],uevents generated by i915 on its device nodeah$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjhhexpect_referenced_by_name}j/j sexpect_referenced_by_id}jj subhdefinition_list)}(hhh](hdefinition_list_item)}(hXI915_L3_PARITY_UEVENT - Generated when the driver receives a parity mismatch event from the GPU L3 cache. Additional information supplied is ROW, BANK, SUBBANK, SLICE of the affected cacheline. Userspace should keep track of these events, and if a specific cache-line seems to have a persistent error, remap it with the L3 remapping tool supplied in intel-gpu-tools. The value supplied with the event is always 1. h](hterm)}(hLI915_L3_PARITY_UEVENT - Generated when the driver receives a parity mismatchh]hLI915_L3_PARITY_UEVENT - Generated when the driver receives a parity mismatch}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhK.hj>ubh definition)}(hhh]h)}(hXQevent from the GPU L3 cache. Additional information supplied is ROW, BANK, SUBBANK, SLICE of the affected cacheline. Userspace should keep track of these events, and if a specific cache-line seems to have a persistent error, remap it with the L3 remapping tool supplied in intel-gpu-tools. The value supplied with the event is always 1.h]hXQevent from the GPU L3 cache. Additional information supplied is ROW, BANK, SUBBANK, SLICE of the affected cacheline. Userspace should keep track of these events, and if a specific cache-line seems to have a persistent error, remap it with the L3 remapping tool supplied in intel-gpu-tools. The value supplied with the event is always 1.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhK*hjUubah}(h]h ]h"]h$]h&]uh1jShj>ubeh}(h]h ]h"]h$]h&]uh1j<hjRhK.hj9ubj=)}(hXI915_ERROR_UEVENT - Generated upon error detection, currently only via hangcheck. The error detection event is a good indicator of when things began to go badly. The value supplied with the event is a 1 upon error detection, and a 0 upon reset completion, signifying no more error exists. NOTE: Disabling hangcheck or reset via module parameter will cause the related events to not be seen. h](jC)}(hFI915_ERROR_UEVENT - Generated upon error detection, currently only viah]hFI915_ERROR_UEVENT - Generated upon error detection, currently only via}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhK5hjsubjT)}(hhh]h)}(hX?hangcheck. The error detection event is a good indicator of when things began to go badly. The value supplied with the event is a 1 upon error detection, and a 0 upon reset completion, signifying no more error exists. NOTE: Disabling hangcheck or reset via module parameter will cause the related events to not be seen.h]hX?hangcheck. The error detection event is a good indicator of when things began to go badly. The value supplied with the event is a 1 upon error detection, and a 0 upon reset completion, signifying no more error exists. NOTE: Disabling hangcheck or reset via module parameter will cause the related events to not be seen.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhK1hjubah}(h]h ]h"]h$]h&]uh1jShjsubeh}(h]h ]h"]h$]h&]uh1j<hjhK5hj9ubj=)}(hI915_RESET_UEVENT - Event is generated just before an attempt to reset the GPU. The value supplied with the event is always 1. NOTE: Disable reset via module parameter will cause this event to not be seen. h](jC)}(hJI915_RESET_UEVENT - Event is generated just before an attempt to reset theh]hJI915_RESET_UEVENT - Event is generated just before an attempt to reset the}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhK>ubh desc_name)}(hi915_user_extensionh]h desc_sig_name)}(hjh]hi915_user_extension}(hj(hhhNhNubah}(h]h ]nah"]h$]h&]uh1j&hj"ubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1j hjhhhjhK>ubeh}(h]h ]h"]h$]h&]j>j? add_permalinkuh1jsphinx_line_type declaratorhjhhhjhK>ubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhK>hjhhubh desc_content)}(hhh]h)}(h-Base class for defining a chain of extensionsh]h-Base class for defining a chain of extensions}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKBhjVhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhK>ubeh}(h]h ](cstructeh"]h$]h&]domainjqobjtypejrdesctypejrnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(hX**Definition**:: struct i915_user_extension { __u64 next_extension; __u32 name; __u32 flags; __u32 rsvd[4]; }; **Members** ``next_extension`` Pointer to the next struct i915_user_extension, or zero if the end. ``name`` Name of the extension. Note that the name here is just some integer. Also note that the name space for this is not global for the whole driver, but rather its scope/meaning is limited to the specific piece of uAPI which has embedded the struct i915_user_extension. ``flags`` MBZ All undefined bits must be zero. ``rsvd`` MBZ Reserved for future use; must be zero.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKFhj~ubh literal_block)}(hmstruct i915_user_extension { __u64 next_extension; __u32 name; __u32 flags; __u32 rsvd[4]; };h]hmstruct i915_user_extension { __u64 next_extension; __u32 name; __u32 flags; __u32 rsvd[4]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKHhj~ubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKOhj~ubj8)}(hhh](j=)}(hW``next_extension`` Pointer to the next struct i915_user_extension, or zero if the end. h](jC)}(h``next_extension``h]hliteral)}(hjh]hnext_extension}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKihjubjT)}(hhh]h)}(hCPointer to the next struct i915_user_extension, or zero if the end.h]hCPointer to the next struct i915_user_extension, or zero if the end.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKihjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhKihjubj=)}(hX``name`` Name of the extension. Note that the name here is just some integer. Also note that the name space for this is not global for the whole driver, but rather its scope/meaning is limited to the specific piece of uAPI which has embedded the struct i915_user_extension. h](jC)}(h``name``h]j)}(hj h]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKuhjubjT)}(hhh](h)}(hName of the extension.h]hName of the extension.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKohj"ubh)}(h-Note that the name here is just some integer.h]h-Note that the name here is just some integer.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKqhj"ubh)}(hAlso note that the name space for this is not global for the whole driver, but rather its scope/meaning is limited to the specific piece of uAPI which has embedded the struct i915_user_extension.h]hAlso note that the name space for this is not global for the whole driver, but rather its scope/meaning is limited to the specific piece of uAPI which has embedded the struct i915_user_extension.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKshj"ubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj!hKuhjubj=)}(h0``flags`` MBZ All undefined bits must be zero. h](jC)}(h ``flags``h]j)}(hjdh]hflags}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhK{hj^ubjT)}(hhh](h)}(hMBZh]hMBZ}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKyhjzubh)}(h All undefined bits must be zero.h]h All undefined bits must be zero.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhK{hjzubeh}(h]h ]h"]h$]h&]uh1jShj^ubeh}(h]h ]h"]h$]h&]uh1j<hjyhK{hjubj=)}(h4``rsvd`` MBZ Reserved for future use; must be zero.h](jC)}(h``rsvd``h]j)}(hjh]hrsvd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubjT)}(hhh](h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubh)}(h&Reserved for future use; must be zero.h]h&Reserved for future use; must be zero.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhKhjubeh}(h]h ]h"]h$]h&]uh1j7hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjhhubh)}(hX5Many interfaces need to grow over time. In most cases we can simply extend the struct and have userspace pass in more data. Another option, as demonstrated by Vulkan's approach to providing extensions for forward and backward compatibility, is to use a list of optional structs to provide those extra details.h]hX7Many interfaces need to grow over time. In most cases we can simply extend the struct and have userspace pass in more data. Another option, as demonstrated by Vulkan’s approach to providing extensions for forward and backward compatibility, is to use a list of optional structs to provide those extra details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKChjhhubh)}(hXMThe key advantage to using an extension chain is that it allows us to redefine the interface more easily than an ever growing struct of increasing complexity, and for large parts of that interface to be entirely optional. The downside is more pointer chasing; chasing across the __user boundary with pointers encapsulated inside u64.h]hXMThe key advantage to using an extension chain is that it allows us to redefine the interface more easily than an ever growing struct of increasing complexity, and for large parts of that interface to be entirely optional. The downside is more pointer chasing; chasing across the __user boundary with pointers encapsulated inside u64.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKIhjhhubh)}(hExample chaining:h]hExample chaining:}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKOhjhhubj)}(hX)struct i915_user_extension ext3 { .next_extension = 0, // end .name = ..., }; struct i915_user_extension ext2 { .next_extension = (uintptr_t)&ext3, .name = ..., }; struct i915_user_extension ext1 { .next_extension = (uintptr_t)&ext2, .name = ..., };h]hX)struct i915_user_extension ext3 { .next_extension = 0, // end .name = ..., }; struct i915_user_extension ext2 { .next_extension = (uintptr_t)&ext3, .name = ..., }; struct i915_user_extension ext1 { .next_extension = (uintptr_t)&ext2, .name = ..., };}hjAsbah}(h]h ]h"]h$]h&]j>j?forcelanguageChighlight_args}uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKQhjhhubh)}(hTypically the struct i915_user_extension would be embedded in some uAPI struct, and in this case we would feed it the head of the chain(i.e ext1), which would then apply all of the above extensions.h]hTypically the struct i915_user_extension would be embedded in some uAPI struct, and in this case we would feed it the head of the chain(i.e ext1), which would then apply all of the above extensions.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhK`hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_i915_gem_engine_class (C enum)c.drm_i915_gem_engine_classhNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_gem_engine_classh]j)}(henum drm_i915_gem_engine_classh](j)}(henumh]henum}(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjyhhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhKgubj!)}(hdrm_i915_gem_engine_classh]j')}(hjwh]hdrm_i915_gem_engine_class}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjyhhhjhKgubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjuhhhjhKgubah}(h]jpah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhKghjrhhubjU)}(hhh]h)}(huapi engine type enumerationh]huapi engine type enumeration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jThjrhhhjhKgubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhNhNubj})}(hXN**Constants** ``I915_ENGINE_CLASS_RENDER`` Render engines support instructions used for 3D, Compute (GPGPU), and programmable media workloads. These instructions fetch data and dispatch individual work items to threads that operate in parallel. The threads run small programs (called "kernels" or "shaders") on the GPU's execution units (EUs). ``I915_ENGINE_CLASS_COPY`` Copy engines (also referred to as "blitters") support instructions that move blocks of data from one location in memory to another, or that fill a specified location of memory with fixed data. Copy engines can perform pre-defined logical or bitwise operations on the source, destination, or pattern data. ``I915_ENGINE_CLASS_VIDEO`` Video engines (also referred to as "bit stream decode" (BSD) or "vdbox") support instructions that perform fixed-function media decode and encode. ``I915_ENGINE_CLASS_VIDEO_ENHANCE`` Video enhancement engines (also referred to as "vebox") support instructions related to image enhancement. ``I915_ENGINE_CLASS_COMPUTE`` Compute engines support a subset of the instructions available on render engines: compute engines support Compute (GPGPU) and programmable media workloads, but do not support the 3D pipeline. ``I915_ENGINE_CLASS_INVALID`` Placeholder value to represent an invalid engine class assignment.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubj8)}(hhh](j=)}(hXK``I915_ENGINE_CLASS_RENDER`` Render engines support instructions used for 3D, Compute (GPGPU), and programmable media workloads. These instructions fetch data and dispatch individual work items to threads that operate in parallel. The threads run small programs (called "kernels" or "shaders") on the GPU's execution units (EUs). h](jC)}(h``I915_ENGINE_CLASS_RENDER``h]j)}(hjh]hI915_ENGINE_CLASS_RENDER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubjT)}(hhh]h)}(hX-Render engines support instructions used for 3D, Compute (GPGPU), and programmable media workloads. These instructions fetch data and dispatch individual work items to threads that operate in parallel. The threads run small programs (called "kernels" or "shaders") on the GPU's execution units (EUs).h]hX7Render engines support instructions used for 3D, Compute (GPGPU), and programmable media workloads. These instructions fetch data and dispatch individual work items to threads that operate in parallel. The threads run small programs (called “kernels” or “shaders”) on the GPU’s execution units (EUs).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhKhjubj=)}(hXL``I915_ENGINE_CLASS_COPY`` Copy engines (also referred to as "blitters") support instructions that move blocks of data from one location in memory to another, or that fill a specified location of memory with fixed data. Copy engines can perform pre-defined logical or bitwise operations on the source, destination, or pattern data. h](jC)}(h``I915_ENGINE_CLASS_COPY``h]j)}(hj;h]hI915_ENGINE_CLASS_COPY}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhj5ubjT)}(hhh]h)}(hX0Copy engines (also referred to as "blitters") support instructions that move blocks of data from one location in memory to another, or that fill a specified location of memory with fixed data. Copy engines can perform pre-defined logical or bitwise operations on the source, destination, or pattern data.h]hX4Copy engines (also referred to as “blitters”) support instructions that move blocks of data from one location in memory to another, or that fill a specified location of memory with fixed data. Copy engines can perform pre-defined logical or bitwise operations on the source, destination, or pattern data.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjQubah}(h]h ]h"]h$]h&]uh1jShj5ubeh}(h]h ]h"]h$]h&]uh1j<hjPhKhjubj=)}(h``I915_ENGINE_CLASS_VIDEO`` Video engines (also referred to as "bit stream decode" (BSD) or "vdbox") support instructions that perform fixed-function media decode and encode. h](jC)}(h``I915_ENGINE_CLASS_VIDEO``h]j)}(hjuh]hI915_ENGINE_CLASS_VIDEO}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjoubjT)}(hhh]h)}(hVideo engines (also referred to as "bit stream decode" (BSD) or "vdbox") support instructions that perform fixed-function media decode and encode.h]hVideo engines (also referred to as “bit stream decode” (BSD) or “vdbox”) support instructions that perform fixed-function media decode and encode.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubah}(h]h ]h"]h$]h&]uh1jShjoubeh}(h]h ]h"]h$]h&]uh1j<hjhKhjubj=)}(h``I915_ENGINE_CLASS_VIDEO_ENHANCE`` Video enhancement engines (also referred to as "vebox") support instructions related to image enhancement. h](jC)}(h#``I915_ENGINE_CLASS_VIDEO_ENHANCE``h]j)}(hjh]hI915_ENGINE_CLASS_VIDEO_ENHANCE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubjT)}(hhh]h)}(hjVideo enhancement engines (also referred to as "vebox") support instructions related to image enhancement.h]hnVideo enhancement engines (also referred to as “vebox”) support instructions related to image enhancement.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhKhjubj=)}(h``I915_ENGINE_CLASS_COMPUTE`` Compute engines support a subset of the instructions available on render engines: compute engines support Compute (GPGPU) and programmable media workloads, but do not support the 3D pipeline. h](jC)}(h``I915_ENGINE_CLASS_COMPUTE``h]j)}(hjh]hI915_ENGINE_CLASS_COMPUTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubjT)}(hhh]h)}(hCompute engines support a subset of the instructions available on render engines: compute engines support Compute (GPGPU) and programmable media workloads, but do not support the 3D pipeline.h]hCompute engines support a subset of the instructions available on render engines: compute engines support Compute (GPGPU) and programmable media workloads, but do not support the 3D pipeline.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhKhjubj=)}(h```I915_ENGINE_CLASS_INVALID`` Placeholder value to represent an invalid engine class assignment.h](jC)}(h``I915_ENGINE_CLASS_INVALID``h]j)}(hj#h]hI915_ENGINE_CLASS_INVALID}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubjT)}(hhh]h)}(hBPlaceholder value to represent an invalid engine class assignment.h]hBPlaceholder value to represent an invalid engine class assignment.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhj9ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj8hKhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hjfh]h Description}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjhhubh)}(hX-Different engines serve different roles, and there may be more than one engine serving each role. This enum provides a classification of the role of the engine, which may be used when requesting operations to be performed on a certain subset of engines, or for providing information about that group.h]hX-Different engines serve different roles, and there may be more than one engine serving each role. This enum provides a classification of the role of the engine, which may be used when requesting operations to be performed on a certain subset of engines, or for providing information about that group.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%i915_engine_class_instance (C struct)c.i915_engine_class_instancehNtauh1jhjhhhNhNubj)}(hhh](j)}(hi915_engine_class_instanceh]j)}(h!struct i915_engine_class_instanceh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj!)}(hi915_engine_class_instanceh]j')}(hjh]hi915_engine_class_instance}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhKubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhKhjhhubjU)}(hhh]h)}(h Engine class/instance identifierh]h Engine class/instance identifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhNhNubj})}(hXJ**Definition**:: struct i915_engine_class_instance { __u16 engine_class; #define I915_ENGINE_CLASS_INVALID_NONE -1; #define I915_ENGINE_CLASS_INVALID_VIRTUAL -2; __u16 engine_instance; }; **Members** ``engine_class`` Engine class from enum drm_i915_gem_engine_class ``engine_instance`` Engine instance.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubj)}(hstruct i915_engine_class_instance { __u16 engine_class; #define I915_ENGINE_CLASS_INVALID_NONE -1; #define I915_ENGINE_CLASS_INVALID_VIRTUAL -2; __u16 engine_instance; };h]hstruct i915_engine_class_instance { __u16 engine_class; #define I915_ENGINE_CLASS_INVALID_NONE -1; #define I915_ENGINE_CLASS_INVALID_VIRTUAL -2; __u16 engine_instance; };}hj#sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubh)}(h **Members**h]j)}(hj4h]hMembers}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubj8)}(hhh](j=)}(hB``engine_class`` Engine class from enum drm_i915_gem_engine_class h](jC)}(h``engine_class``h]j)}(hjSh]h engine_class}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjMubjT)}(hhh]h)}(h0Engine class from enum drm_i915_gem_engine_classh]h0Engine class from enum drm_i915_gem_engine_class}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhKhjiubah}(h]h ]h"]h$]h&]uh1jShjMubeh}(h]h ]h"]h$]h&]uh1j<hjhhKhjJubj=)}(h$``engine_instance`` Engine instance.h](jC)}(h``engine_instance``h]j)}(hjh]hengine_instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubjT)}(hhh]h)}(hEngine instance.h]hEngine instance.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhKhjJubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjhhubh)}(hX@There may be more than one engine fulfilling any role within the system. Each engine of a class is given a unique instance number and therefore any engine can be specified by its class:instance tuplet. APIs that allow access to any engine in the system will use struct i915_engine_class_instance for this identification.h]hX@There may be more than one engine fulfilling any role within the system. Each engine of a class is given a unique instance number and therefore any engine can be specified by its class:instance tuplet. APIs that allow access to any engine in the system will use struct i915_engine_class_instance for this identification.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjhhubj )}(hL.. _perf_events exposed by i915 through /sys/bus/event_sources/drivers/i915:h]h}(h]h ]h"]h$]h&]hʌFperf-events-exposed-by-i915-through-sys-bus-event-sources-drivers-i915uh1j hKhjhhhNubh)}(hK**perf_events exposed by i915 through /sys/bus/event_sources/drivers/i915**h]j)}(hj h]hGperf_events exposed by i915 through /sys/bus/event_sources/drivers/i915}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]jah ]h"]Gperf_events exposed by i915 through /sys/bus/event_sources/drivers/i915ah$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjhhj3}j jsj5}jjsubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_i915_getparam (C struct)c.drm_i915_getparamhNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_getparamh]j)}(hstruct drm_i915_getparamh](j)}(hjh]hstruct}(hj3 hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj/ hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMubj)}(h h]h }(hjA hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ hhhj@ hMubj!)}(hdrm_i915_getparamh]j')}(hj- h]hdrm_i915_getparam}(hjS hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjO ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj/ hhhj@ hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj+ hhhj@ hMubah}(h]j& ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj@ hMhj( hhubjU)}(hhh]h)}(h!Driver parameter query structure.h]h!Driver parameter query structure.}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM2hjr hhubah}(h]h ]h"]h$]h&]uh1jThj( hhhj@ hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj jxj jyjzj{uh1jhhhjhNhNubj})}(hXN**Definition**:: struct drm_i915_getparam { __s32 param; int __user *value; }; **Members** ``param`` Driver parameter to query. ``value`` Address of memory where queried value should be put. WARNING: Using pointers instead of fixed-size u64 means we need to write compat32 code. Don't repeat this mistake.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM6hj ubj)}(hEstruct drm_i915_getparam { __s32 param; int __user *value; };h]hEstruct drm_i915_getparam { __s32 param; int __user *value; };}hj sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM8hj ubh)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM=hj ubj8)}(hhh](j=)}(h%``param`` Driver parameter to query. h](jC)}(h ``param``h]j)}(hj h]hparam}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM6hj ubjT)}(hhh]h)}(hDriver parameter to query.h]hDriver parameter to query.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM6hj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hM6hj ubj=)}(h``value`` Address of memory where queried value should be put. WARNING: Using pointers instead of fixed-size u64 means we need to write compat32 code. Don't repeat this mistake.h](jC)}(h ``value``h]j)}(hj h]hvalue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM<hj ubjT)}(hhh](h)}(h4Address of memory where queried value should be put.h]h4Address of memory where queried value should be put.}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM:hj1 ubh)}(hrWARNING: Using pointers instead of fixed-size u64 means we need to write compat32 code. Don't repeat this mistake.h]htWARNING: Using pointers instead of fixed-size u64 means we need to write compat32 code. Don’t repeat this mistake.}(hjC hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0 hM<hj1 ubeh}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj0 hM<hj ubeh}(h]h ]h"]h$]h&]uh1j7hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_i915_getparam_t (C type)c.drm_i915_getparam_thNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_getparam_th]j)}(htype drm_i915_getparam_th](j)}(htypeh]htype}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMCubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMCubj!)}(hdrm_i915_getparam_th]j')}(hj} h]hdrm_i915_getparam_t}(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj hhhj hMCubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj{ hhhj hMCubah}(h]jv ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj hMChjx hhubjU)}(hhh]h)}(h?Driver parameter query structure. See struct drm_i915_getparam.h]h?Driver parameter query structure. See struct drm_i915_getparam.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMBhj hhubah}(h]h ]h"]h$]h&]uh1jThjx hhhj hMCubeh}(h]h ](jqtypeeh"]h$]h&]jvjqjwj jxj jyjzj{uh1jhhhjhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_i915_gem_mmap_offset (C struct)c.drm_i915_gem_mmap_offsethNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_gem_mmap_offseth]j)}(hstruct drm_i915_gem_mmap_offseth](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMGubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMGubj!)}(hdrm_i915_gem_mmap_offseth]j')}(hj h]hdrm_i915_gem_mmap_offset}(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj hhhj hMGubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj hhhj hMGubah}(h]j ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj hMGhj hhubjU)}(hhh]h)}(h5Retrieve an offset so we can mmap this buffer object.h]h5Retrieve an offset so we can mmap this buffer object.}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj: hhubah}(h]h ]h"]h$]h&]uh1jThj hhhj hMGubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjU jxjU jyjzj{uh1jhhhjhNhNubj})}(hXh**Definition**:: struct drm_i915_gem_mmap_offset { __u32 handle; __u32 pad; __u64 offset; __u64 flags; #define I915_MMAP_OFFSET_GTT 0; #define I915_MMAP_OFFSET_WC 1; #define I915_MMAP_OFFSET_WB 2; #define I915_MMAP_OFFSET_UC 3; #define I915_MMAP_OFFSET_FIXED 4; __u64 extensions; }; **Members** ``handle`` Handle for the object being mapped. ``pad`` Must be zero ``offset`` The fake offset to use for subsequent mmap call This is a fixed-size type for 32/64 compatibility. ``flags`` Flags for extended behaviour. It is mandatory that one of the `MMAP_OFFSET` types should be included: - `I915_MMAP_OFFSET_GTT`: Use mmap with the object bound to GTT. (Write-Combined) - `I915_MMAP_OFFSET_WC`: Use Write-Combined caching. - `I915_MMAP_OFFSET_WB`: Use Write-Back caching. - `I915_MMAP_OFFSET_FIXED`: Use object placement to determine caching. On devices with local memory `I915_MMAP_OFFSET_FIXED` is the only valid type. On devices without local memory, this caching mode is invalid. As caching mode when specifying `I915_MMAP_OFFSET_FIXED`, WC or WB will be used, depending on the object placement on creation. WB will be used when the object can only exist in system memory, WC otherwise. ``extensions`` Zero-terminated chain of extensions. No current extensions defined; mbz.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj] ubh:}(hj] hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjY ubj)}(hX-struct drm_i915_gem_mmap_offset { __u32 handle; __u32 pad; __u64 offset; __u64 flags; #define I915_MMAP_OFFSET_GTT 0; #define I915_MMAP_OFFSET_WC 1; #define I915_MMAP_OFFSET_WB 2; #define I915_MMAP_OFFSET_UC 3; #define I915_MMAP_OFFSET_FIXED 4; __u64 extensions; };h]hX-struct drm_i915_gem_mmap_offset { __u32 handle; __u32 pad; __u64 offset; __u64 flags; #define I915_MMAP_OFFSET_GTT 0; #define I915_MMAP_OFFSET_WC 1; #define I915_MMAP_OFFSET_WB 2; #define I915_MMAP_OFFSET_UC 3; #define I915_MMAP_OFFSET_FIXED 4; __u64 extensions; };}hjz sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjY ubh)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjY ubj8)}(hhh](j=)}(h/``handle`` Handle for the object being mapped. h](jC)}(h ``handle``h]j)}(hj h]hhandle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj ubjT)}(hhh]h)}(h#Handle for the object being mapped.h]h#Handle for the object being mapped.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hMhj ubj=)}(h``pad`` Must be zero h](jC)}(h``pad``h]j)}(hj h]hpad}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj ubjT)}(hhh]h)}(h Must be zeroh]h Must be zero}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hMhj ubj=)}(ho``offset`` The fake offset to use for subsequent mmap call This is a fixed-size type for 32/64 compatibility. h](jC)}(h ``offset``h]j)}(hj h]hoffset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj ubjT)}(hhh](h)}(h/The fake offset to use for subsequent mmap callh]h/The fake offset to use for subsequent mmap call}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj2 ubh)}(h2This is a fixed-size type for 32/64 compatibility.h]h2This is a fixed-size type for 32/64 compatibility.}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1 hMhj2 ubeh}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj1 hMhj ubj=)}(hX``flags`` Flags for extended behaviour. It is mandatory that one of the `MMAP_OFFSET` types should be included: - `I915_MMAP_OFFSET_GTT`: Use mmap with the object bound to GTT. (Write-Combined) - `I915_MMAP_OFFSET_WC`: Use Write-Combined caching. - `I915_MMAP_OFFSET_WB`: Use Write-Back caching. - `I915_MMAP_OFFSET_FIXED`: Use object placement to determine caching. On devices with local memory `I915_MMAP_OFFSET_FIXED` is the only valid type. On devices without local memory, this caching mode is invalid. As caching mode when specifying `I915_MMAP_OFFSET_FIXED`, WC or WB will be used, depending on the object placement on creation. WB will be used when the object can only exist in system memory, WC otherwise. h](jC)}(h ``flags``h]j)}(hjd h]hflags}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj^ ubjT)}(hhh](h)}(hFlags for extended behaviour.h]hFlags for extended behaviour.}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjz ubh)}(hGIt is mandatory that one of the `MMAP_OFFSET` types should be included:h](h It is mandatory that one of the }(hj hhhNhNubhtitle_reference)}(h `MMAP_OFFSET`h]h MMAP_OFFSET}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh types should be included:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjz ubh)}(hhh](h)}(hO`I915_MMAP_OFFSET_GTT`: Use mmap with the object bound to GTT. (Write-Combined)h]h)}(hj h](j )}(h`I915_MMAP_OFFSET_GTT`h]hI915_MMAP_OFFSET_GTT}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh9: Use mmap with the object bound to GTT. (Write-Combined)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj ubah}(h]h ]h"]h$]h&]uh1hhj ubh)}(h2`I915_MMAP_OFFSET_WC`: Use Write-Combined caching.h]h)}(hj h](j )}(h`I915_MMAP_OFFSET_WC`h]hI915_MMAP_OFFSET_WC}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh: Use Write-Combined caching.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj ubah}(h]h ]h"]h$]h&]uh1hhj ubh)}(h.`I915_MMAP_OFFSET_WB`: Use Write-Back caching.h]h)}(hj h](j )}(h`I915_MMAP_OFFSET_WB`h]hI915_MMAP_OFFSET_WB}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh: Use Write-Back caching.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj ubah}(h]h ]h"]h$]h&]uh1hhj ubh)}(hE`I915_MMAP_OFFSET_FIXED`: Use object placement to determine caching. h]h)}(hD`I915_MMAP_OFFSET_FIXED`: Use object placement to determine caching.h](j )}(h`I915_MMAP_OFFSET_FIXED`h]hI915_MMAP_OFFSET_FIXED}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj( ubh,: Use object placement to determine caching.}(hj( hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj$ ubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]bullet-uh1hhj hMhjz ubh)}(hOn devices with local memory `I915_MMAP_OFFSET_FIXED` is the only valid type. On devices without local memory, this caching mode is invalid.h](hOn devices with local memory }(hjS hhhNhNubj )}(h`I915_MMAP_OFFSET_FIXED`h]hI915_MMAP_OFFSET_FIXED}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjS ubhW is the only valid type. On devices without local memory, this caching mode is invalid.}(hjS hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjz ubh)}(hAs caching mode when specifying `I915_MMAP_OFFSET_FIXED`, WC or WB will be used, depending on the object placement on creation. WB will be used when the object can only exist in system memory, WC otherwise.h](h As caching mode when specifying }(hjt hhhNhNubj )}(h`I915_MMAP_OFFSET_FIXED`h]hI915_MMAP_OFFSET_FIXED}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjt ubh, WC or WB will be used, depending on the object placement on creation. WB will be used when the object can only exist in system memory, WC otherwise.}(hjt hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjz ubeh}(h]h ]h"]h$]h&]uh1jShj^ ubeh}(h]h ]h"]h$]h&]uh1j<hjy hMhj ubj=)}(hX``extensions`` Zero-terminated chain of extensions. No current extensions defined; mbz.h](jC)}(h``extensions``h]j)}(hj h]h extensions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj ubjT)}(hhh](h)}(h$Zero-terminated chain of extensions.h]h$Zero-terminated chain of extensions.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj ubh)}(h#No current extensions defined; mbz.h]h#No current extensions defined; mbz.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj ubeh}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hMhj ubeh}(h]h ]h"]h$]h&]uh1j7hjY ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM"hjhhubh)}(hThis struct is passed as argument to the `DRM_IOCTL_I915_GEM_MMAP_OFFSET` ioctl, and is used to retrieve the fake offset to mmap an object specified by :c:type:`handle`.h](h)This struct is passed as argument to the }(hjhhhNhNubj )}(h `DRM_IOCTL_I915_GEM_MMAP_OFFSET`h]hDRM_IOCTL_I915_GEM_MMAP_OFFSET}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubhO ioctl, and is used to retrieve the fake offset to mmap an object specified by }(hjhhhNhNubh)}(h:c:type:`handle`h]j)}(hj+h]hhandle}(hj-hhhNhNubah}(h]h ](xrefjqc-typeeh"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]refdocgpu/driver-uapi refdomainjqreftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sb reftargethandleuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjShMhjhhubh)}(hThe legacy way of using `DRM_IOCTL_I915_GEM_MMAP` is removed on gen12+. `DRM_IOCTL_I915_GEM_MMAP_GTT` is an older supported alias to this struct, but will behave as setting the :c:type:`extensions` to 0, and :c:type:`flags` to `I915_MMAP_OFFSET_GTT`.h](hThe legacy way of using }(hj^hhhNhNubj )}(h`DRM_IOCTL_I915_GEM_MMAP`h]hDRM_IOCTL_I915_GEM_MMAP}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj^ubh is removed on gen12+. }(hj^hhhNhNubj )}(h`DRM_IOCTL_I915_GEM_MMAP_GTT`h]hDRM_IOCTL_I915_GEM_MMAP_GTT}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj^ubhL is an older supported alias to this struct, but will behave as setting the }(hj^hhhNhNubh)}(h:c:type:`extensions`h]j)}(hjh]h extensions}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ extensionsuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj^ubh to 0, and }(hj^hhhNhNubh)}(h:c:type:`flags`h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQflagsuh1hhjhMhj^ubh to }(hj^hhhNhNubj )}(h`I915_MMAP_OFFSET_GTT`h]hI915_MMAP_OFFSET_GTT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj^ubh.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_i915_gem_set_domain (C struct)c.drm_i915_gem_set_domainhNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_gem_set_domainh]j)}(hstruct drm_i915_gem_set_domainh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_i915_gem_set_domainh]j')}(hjh]hdrm_i915_gem_set_domain}(hj"hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(hdAdjust the objects write or read domain, in preparation for accessing the pages via some CPU domain.h]hdAdjust the objects write or read domain, in preparation for accessing the pages via some CPU domain.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM$hjAhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj\jxj\jyjzj{uh1jhhhjhNhNubj})}(hXo**Definition**:: struct drm_i915_gem_set_domain { __u32 handle; __u32 read_domains; __u32 write_domain; }; **Members** ``handle`` Handle for the object. ``read_domains`` New read domains. ``write_domain`` New write domain. Note that having something in the write domain implies it's in the read domain, and only that read domain.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh:}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM(hj`ubj)}(hestruct drm_i915_gem_set_domain { __u32 handle; __u32 read_domains; __u32 write_domain; };h]hestruct drm_i915_gem_set_domain { __u32 handle; __u32 read_domains; __u32 write_domain; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM*hj`ubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM0hj`ubj8)}(hhh](j=)}(h"``handle`` Handle for the object. h](jC)}(h ``handle``h]j)}(hjh]hhandle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMKhjubjT)}(hhh]h)}(hHandle for the object.h]hHandle for the object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMKhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMKhjubj=)}(h#``read_domains`` New read domains. h](jC)}(h``read_domains``h]j)}(hjh]h read_domains}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMNhjubjT)}(hhh]h)}(hNew read domains.h]hNew read domains.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMNhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMNhjubj=)}(h``write_domain`` New write domain. Note that having something in the write domain implies it's in the read domain, and only that read domain.h](jC)}(h``write_domain``h]j)}(hj#h]h write_domain}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMThjubjT)}(hhh](h)}(hNew write domain.h]hNew write domain.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMRhj9ubh)}(hjNote that having something in the write domain implies it's in the read domain, and only that read domain.h]hlNote that having something in the write domain implies it’s in the read domain, and only that read domain.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMThj9ubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj8hMThjubeh}(h]h ]h"]h$]h&]uh1j7hj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hjth]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMXhjhhubh)}(hSpecifying a new write or read domain will flush the object out of the previous domain(if required), before then updating the objects domain tracking with the new domain.h]hSpecifying a new write or read domain will flush the object out of the previous domain(if required), before then updating the objects domain tracking with the new domain.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM%hjhhubh)}(hVNote this might involve waiting for the object first if it is still active on the GPU.h]hVNote this might involve waiting for the object first if it is still active on the GPU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM)hjhhubh)}(h;Supported values for **read_domains** and **write_domain**:h](hSupported values for }(hjhhhNhNubj)}(h**read_domains**h]h read_domains}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**write_domain**h]h write_domain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM,hjhhubh block_quote)}(h- I915_GEM_DOMAIN_WC: Uncached write-combined domain - I915_GEM_DOMAIN_CPU: CPU cache domain - I915_GEM_DOMAIN_GTT: Mappable aperture domain h]h)}(hhh](h)}(h2I915_GEM_DOMAIN_WC: Uncached write-combined domainh]h)}(hjh]h2I915_GEM_DOMAIN_WC: Uncached write-combined domain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM.hjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h%I915_GEM_DOMAIN_CPU: CPU cache domainh]h)}(hjh]h%I915_GEM_DOMAIN_CPU: CPU cache domain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM/hjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h.I915_GEM_DOMAIN_GTT: Mappable aperture domain h]h)}(h-I915_GEM_DOMAIN_GTT: Mappable aperture domainh]h-I915_GEM_DOMAIN_GTT: Mappable aperture domain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM0hjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1jhjhM.hjhhubh)}(hAll other domains are rejected.h]hAll other domains are rejected.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM2hjhhubh)}(hXINote that for discrete, starting from DG1, this is no longer supported, and is instead rejected. On such platforms the CPU domain is effectively static, where we also only support a single :c:type:`drm_i915_gem_mmap_offset` cache mode, which can't be set explicitly and instead depends on the object placements, as per the below.h](hNote that for discrete, starting from DG1, this is no longer supported, and is instead rejected. On such platforms the CPU domain is effectively static, where we also only support a single }(hjHhhhNhNubh)}(h":c:type:`drm_i915_gem_mmap_offset`h]j)}(hjRh]hdrm_i915_gem_mmap_offset}(hjThhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_gem_mmap_offsetuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM4hjHubhl cache mode, which can’t be set explicitly and instead depends on the object placements, as per the below.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjohM4hjhhubh)}(h*Implicit caching rules, starting from DG1:h]h*Implicit caching rules, starting from DG1:}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM:hjhhubj)}(hXH- If any of the object placements (see :c:type:`drm_i915_gem_create_ext_memory_regions`) contain I915_MEMORY_CLASS_DEVICE then the object will be allocated and mapped as write-combined only. - Everything else is always allocated and mapped as write-back, with the guarantee that everything is also coherent with the GPU. h]h)}(hhh](h)}(hIf any of the object placements (see :c:type:`drm_i915_gem_create_ext_memory_regions`) contain I915_MEMORY_CLASS_DEVICE then the object will be allocated and mapped as write-combined only. h]h)}(hIf any of the object placements (see :c:type:`drm_i915_gem_create_ext_memory_regions`) contain I915_MEMORY_CLASS_DEVICE then the object will be allocated and mapped as write-combined only.h](h%If any of the object placements (see }(hjhhhNhNubh)}(h0:c:type:`drm_i915_gem_create_ext_memory_regions`h]j)}(hjh]h&drm_i915_gem_create_ext_memory_regions}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ&drm_i915_gem_create_ext_memory_regionsuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM<hjubhg) contain I915_MEMORY_CLASS_DEVICE then the object will be allocated and mapped as write-combined only.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hEverything else is always allocated and mapped as write-back, with the guarantee that everything is also coherent with the GPU. h]h)}(hEverything else is always allocated and mapped as write-back, with the guarantee that everything is also coherent with the GPU.h]hEverything else is always allocated and mapped as write-back, with the guarantee that everything is also coherent with the GPU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM@hjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjhM<hjhhubh)}(hNote that this is likely to change in the future again, where we might need more flexibility on future devices, so making this all explicit as part of a new :c:type:`drm_i915_gem_create_ext` extension is probable.h](hNote that this is likely to change in the future again, where we might need more flexibility on future devices, so making this all explicit as part of a new }(hjhhhNhNubh)}(h!:c:type:`drm_i915_gem_create_ext`h]j)}(hjh]hdrm_i915_gem_create_ext}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_gem_create_extuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMChjubh extension is probable.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMChjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_i915_gem_exec_fence (C struct)c.drm_i915_gem_exec_fencehNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_gem_exec_fenceh]j)}(hstruct drm_i915_gem_exec_fenceh](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj8hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhjIhMJubj!)}(hdrm_i915_gem_exec_fenceh]j')}(hj6h]hdrm_i915_gem_exec_fence}(hj\hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjXubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj8hhhjIhMJubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj4hhhjIhMJubah}(h]j/ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjIhMJhj1hhubjU)}(hhh]h)}(h/An input or output fence for the execbuf ioctl.h]h/An input or output fence for the execbuf ioctl.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM'hj{hhubah}(h]h ]h"]h$]h&]uh1jThj1hhhjIhMJubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_gem_exec_fence { __u32 handle; __u32 flags; #define I915_EXEC_FENCE_WAIT (1<<0); #define I915_EXEC_FENCE_SIGNAL (1<<1); #define __I915_EXEC_FENCE_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SIGNAL << 1)); }; **Members** ``handle`` User's handle for a drm_syncobj to wait on or signal. ``flags`` Supported flags are: I915_EXEC_FENCE_WAIT: Wait for the input fence before request submission. I915_EXEC_FENCE_SIGNAL: Return request completion fence as outputh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM+hjubj)}(hstruct drm_i915_gem_exec_fence { __u32 handle; __u32 flags; #define I915_EXEC_FENCE_WAIT (1<<0); #define I915_EXEC_FENCE_SIGNAL (1<<1); #define __I915_EXEC_FENCE_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SIGNAL << 1)); };h]hstruct drm_i915_gem_exec_fence { __u32 handle; __u32 flags; #define I915_EXEC_FENCE_WAIT (1<<0); #define I915_EXEC_FENCE_SIGNAL (1<<1); #define __I915_EXEC_FENCE_UNKNOWN_FLAGS (-(I915_EXEC_FENCE_SIGNAL << 1)); };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM-hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM5hjubj8)}(hhh](j=)}(hA``handle`` User's handle for a drm_syncobj to wait on or signal. h](jC)}(h ``handle``h]j)}(hjh]hhandle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM1hjubjT)}(hhh]h)}(h5User's handle for a drm_syncobj to wait on or signal.h]h7User’s handle for a drm_syncobj to wait on or signal.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM1hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM1hjubj=)}(h``flags`` Supported flags are: I915_EXEC_FENCE_WAIT: Wait for the input fence before request submission. I915_EXEC_FENCE_SIGNAL: Return request completion fence as outputh](jC)}(h ``flags``h]j)}(hj$h]hflags}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM:hjubjT)}(hhh](h)}(hSupported flags are:h]hSupported flags are:}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM5hj:ubh)}(hII915_EXEC_FENCE_WAIT: Wait for the input fence before request submission.h]hII915_EXEC_FENCE_WAIT: Wait for the input fence before request submission.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM7hj:ubh)}(hAI915_EXEC_FENCE_SIGNAL: Return request completion fence as outputh]hAI915_EXEC_FENCE_SIGNAL: Return request completion fence as output}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hM:hj:ubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj9hM:hjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM>hjhhubh)}(hBThe request will wait for input fence to signal before submission.h]hBThe request will wait for input fence to signal before submission.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM(hjhhubh)}(hOThe returned output fence will be signaled after the completion of the request.h]hOThe returned output fence will be signaled after the completion of the request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM*hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j6drm_i915_gem_execbuffer_ext_timeline_fences (C struct)-c.drm_i915_gem_execbuffer_ext_timeline_fenceshNtauh1jhjhhhNhNubj)}(hhh](j)}(h+drm_i915_gem_execbuffer_ext_timeline_fencesh]j)}(h2struct drm_i915_gem_execbuffer_ext_timeline_fencesh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM0ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM0ubj!)}(h+drm_i915_gem_execbuffer_ext_timeline_fencesh]j')}(hjh]h+drm_i915_gem_execbuffer_ext_timeline_fences}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhM0ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhM0ubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhM0hjhhubjU)}(hhh]h)}(h"Timeline fences for execbuf ioctl.h]h"Timeline fences for execbuf ioctl.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMChjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhM0ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj+jxj+jyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_gem_execbuffer_ext_timeline_fences { #define DRM_I915_GEM_EXECBUFFER_EXT_TIMELINE_FENCES 0; struct i915_user_extension base; __u64 fence_count; __u64 handles_ptr; __u64 values_ptr; }; **Members** ``base`` Extension link. See struct i915_user_extension. ``fence_count`` Number of elements in the **handles_ptr** & **value_ptr** arrays. ``handles_ptr`` Pointer to an array of struct drm_i915_gem_exec_fence of length **fence_count**. ``values_ptr`` Pointer to an array of u64 values of length **fence_count**. Values must be 0 for a binary drm_syncobj. A Value of 0 for a timeline drm_syncobj is invalid as it turns a drm_syncobj into a binary one.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh:}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMGhj/ubj)}(hstruct drm_i915_gem_execbuffer_ext_timeline_fences { #define DRM_I915_GEM_EXECBUFFER_EXT_TIMELINE_FENCES 0; struct i915_user_extension base; __u64 fence_count; __u64 handles_ptr; __u64 values_ptr; };h]hstruct drm_i915_gem_execbuffer_ext_timeline_fences { #define DRM_I915_GEM_EXECBUFFER_EXT_TIMELINE_FENCES 0; struct i915_user_extension base; __u64 fence_count; __u64 handles_ptr; __u64 values_ptr; };}hjPsbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMIhj/ubh)}(h **Members**h]j)}(hjah]hMembers}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMQhj/ubj8)}(hhh](j=)}(h9``base`` Extension link. See struct i915_user_extension. h](jC)}(h``base``h]j)}(hjh]hbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMMhjzubjT)}(hhh]h)}(h/Extension link. See struct i915_user_extension.h]h/Extension link. See struct i915_user_extension.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMMhjubah}(h]h ]h"]h$]h&]uh1jShjzubeh}(h]h ]h"]h$]h&]uh1j<hjhMMhjwubj=)}(hR``fence_count`` Number of elements in the **handles_ptr** & **value_ptr** arrays. h](jC)}(h``fence_count``h]j)}(hjh]h fence_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMRhjubjT)}(hhh]h)}(hANumber of elements in the **handles_ptr** & **value_ptr** arrays.h](hNumber of elements in the }(hjhhhNhNubj)}(h**handles_ptr**h]h handles_ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh & }(hjhhhNhNubj)}(h **value_ptr**h]h value_ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh arrays.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMQhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMRhjwubj=)}(ha``handles_ptr`` Pointer to an array of struct drm_i915_gem_exec_fence of length **fence_count**. h](jC)}(h``handles_ptr``h]j)}(hjh]h handles_ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMXhjubjT)}(hhh]h)}(hPPointer to an array of struct drm_i915_gem_exec_fence of length **fence_count**.h](h@Pointer to an array of struct drm_i915_gem_exec_fence of length }(hj0hhhNhNubj)}(h**fence_count**h]h fence_count}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMWhj-ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj,hMXhjwubj=)}(h``values_ptr`` Pointer to an array of u64 values of length **fence_count**. Values must be 0 for a binary drm_syncobj. A Value of 0 for a timeline drm_syncobj is invalid as it turns a drm_syncobj into a binary one.h](jC)}(h``values_ptr``h]j)}(hjch]h values_ptr}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM`hj]ubjT)}(hhh]h)}(hPointer to an array of u64 values of length **fence_count**. Values must be 0 for a binary drm_syncobj. A Value of 0 for a timeline drm_syncobj is invalid as it turns a drm_syncobj into a binary one.h](h,Pointer to an array of u64 values of length }(hj|hhhNhNubj)}(h**fence_count**h]h fence_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh. Values must be 0 for a binary drm_syncobj. A Value of 0 for a timeline drm_syncobj is invalid as it turns a drm_syncobj into a binary one.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM]hjyubah}(h]h ]h"]h$]h&]uh1jShj]ubeh}(h]h ]h"]h$]h&]uh1j<hjxhM`hjwubeh}(h]h ]h"]h$]h&]uh1j7hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMdhjhhubh)}(hThis structure describes an array of drm_syncobj and associated points for timeline variants of drm_syncobj. It is invalid to append this structure to the execbuf if I915_EXEC_FENCE_ARRAY is set.h]hThis structure describes an array of drm_syncobj and associated points for timeline variants of drm_syncobj. It is invalid to append this structure to the execbuf if I915_EXEC_FENCE_ARRAY is set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMDhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_i915_gem_execbuffer2 (C struct)c.drm_i915_gem_execbuffer2hNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_gem_execbuffer2h]j)}(hstruct drm_i915_gem_execbuffer2h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMKubj!)}(hdrm_i915_gem_execbuffer2h]j')}(hjh]hdrm_i915_gem_execbuffer2}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMKubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMKhjhhubjU)}(hhh]h)}(h-Structure for DRM_I915_GEM_EXECBUFFER2 ioctl.h]h-Structure for DRM_I915_GEM_EXECBUFFER2 ioctl.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMfhj5hhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjPjxjPjyjzj{uh1jhhhjhNhNubj})}(hX **Definition**:: struct drm_i915_gem_execbuffer2 { __u64 buffers_ptr; __u32 buffer_count; __u32 batch_start_offset; __u32 batch_len; __u32 DR1; __u32 DR4; __u32 num_cliprects; __u64 cliprects_ptr; __u64 flags; #define I915_EXEC_RING_MASK (0x3f); #define I915_EXEC_DEFAULT (0<<0); #define I915_EXEC_RENDER (1<<0); #define I915_EXEC_BSD (2<<0); #define I915_EXEC_BLT (3<<0); #define I915_EXEC_VEBOX (4<<0); #define I915_EXEC_CONSTANTS_MASK (3<<6); #define I915_EXEC_CONSTANTS_REL_GENERAL (0<<6) ; #define I915_EXEC_CONSTANTS_ABSOLUTE (1<<6); #define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) ; #define I915_EXEC_GEN7_SOL_RESET (1<<8); #define I915_EXEC_SECURE (1<<9); #define I915_EXEC_IS_PINNED (1<<10); #define I915_EXEC_NO_RELOC (1<<11); #define I915_EXEC_HANDLE_LUT (1<<12); #define I915_EXEC_BSD_SHIFT (13); #define I915_EXEC_BSD_MASK (3 << I915_EXEC_BSD_SHIFT); #define I915_EXEC_BSD_DEFAULT (0 << I915_EXEC_BSD_SHIFT); #define I915_EXEC_BSD_RING1 (1 << I915_EXEC_BSD_SHIFT); #define I915_EXEC_BSD_RING2 (2 << I915_EXEC_BSD_SHIFT); #define I915_EXEC_RESOURCE_STREAMER (1<<15); #define I915_EXEC_FENCE_IN (1<<16); #define I915_EXEC_FENCE_OUT (1<<17); #define I915_EXEC_BATCH_FIRST (1<<18); #define I915_EXEC_FENCE_ARRAY (1<<19); #define I915_EXEC_FENCE_SUBMIT (1 << 20); #define I915_EXEC_USE_EXTENSIONS (1 << 21); #define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_USE_EXTENSIONS << 1)); __u64 rsvd1; __u64 rsvd2; }; **Members** ``buffers_ptr`` Pointer to a list of gem_exec_object2 structs ``buffer_count`` Number of elements in **buffers_ptr** array ``batch_start_offset`` Offset in the batchbuffer to start execution from. ``batch_len`` Length in bytes of the batch buffer, starting from the **batch_start_offset**. If 0, length is assumed to be the batch buffer object size. ``DR1`` deprecated ``DR4`` deprecated ``num_cliprects`` See **cliprects_ptr** ``cliprects_ptr`` Kernel clipping was a DRI1 misfeature. It is invalid to use this field if I915_EXEC_FENCE_ARRAY or I915_EXEC_USE_EXTENSIONS flags are not set. If I915_EXEC_FENCE_ARRAY is set, then this is a pointer to an array of :c:type:`drm_i915_gem_exec_fence` and **num_cliprects** is the length of the array. If I915_EXEC_USE_EXTENSIONS is set, then this is a pointer to a single :c:type:`i915_user_extension` and num_cliprects is 0. ``flags`` Execbuf flags ``rsvd1`` Context id ``rsvd2`` in and out sync_file file descriptors. When I915_EXEC_FENCE_IN or I915_EXEC_FENCE_SUBMIT flag is set, the lower 32 bits of this field will have the in sync_file fd (input). When I915_EXEC_FENCE_OUT flag is set, the upper 32 bits of this field will have the out sync_file fd (output).h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh:}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMjhjTubj)}(hXstruct drm_i915_gem_execbuffer2 { __u64 buffers_ptr; __u32 buffer_count; __u32 batch_start_offset; __u32 batch_len; __u32 DR1; __u32 DR4; __u32 num_cliprects; __u64 cliprects_ptr; __u64 flags; #define I915_EXEC_RING_MASK (0x3f); #define I915_EXEC_DEFAULT (0<<0); #define I915_EXEC_RENDER (1<<0); #define I915_EXEC_BSD (2<<0); #define I915_EXEC_BLT (3<<0); #define I915_EXEC_VEBOX (4<<0); #define I915_EXEC_CONSTANTS_MASK (3<<6); #define I915_EXEC_CONSTANTS_REL_GENERAL (0<<6) ; #define I915_EXEC_CONSTANTS_ABSOLUTE (1<<6); #define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) ; #define I915_EXEC_GEN7_SOL_RESET (1<<8); #define I915_EXEC_SECURE (1<<9); #define I915_EXEC_IS_PINNED (1<<10); #define I915_EXEC_NO_RELOC (1<<11); #define I915_EXEC_HANDLE_LUT (1<<12); #define I915_EXEC_BSD_SHIFT (13); #define I915_EXEC_BSD_MASK (3 << I915_EXEC_BSD_SHIFT); #define I915_EXEC_BSD_DEFAULT (0 << I915_EXEC_BSD_SHIFT); #define I915_EXEC_BSD_RING1 (1 << I915_EXEC_BSD_SHIFT); #define I915_EXEC_BSD_RING2 (2 << I915_EXEC_BSD_SHIFT); #define I915_EXEC_RESOURCE_STREAMER (1<<15); #define I915_EXEC_FENCE_IN (1<<16); #define I915_EXEC_FENCE_OUT (1<<17); #define I915_EXEC_BATCH_FIRST (1<<18); #define I915_EXEC_FENCE_ARRAY (1<<19); #define I915_EXEC_FENCE_SUBMIT (1 << 20); #define I915_EXEC_USE_EXTENSIONS (1 << 21); #define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_USE_EXTENSIONS << 1)); __u64 rsvd1; __u64 rsvd2; };h]hXstruct drm_i915_gem_execbuffer2 { __u64 buffers_ptr; __u32 buffer_count; __u32 batch_start_offset; __u32 batch_len; __u32 DR1; __u32 DR4; __u32 num_cliprects; __u64 cliprects_ptr; __u64 flags; #define I915_EXEC_RING_MASK (0x3f); #define I915_EXEC_DEFAULT (0<<0); #define I915_EXEC_RENDER (1<<0); #define I915_EXEC_BSD (2<<0); #define I915_EXEC_BLT (3<<0); #define I915_EXEC_VEBOX (4<<0); #define I915_EXEC_CONSTANTS_MASK (3<<6); #define I915_EXEC_CONSTANTS_REL_GENERAL (0<<6) ; #define I915_EXEC_CONSTANTS_ABSOLUTE (1<<6); #define I915_EXEC_CONSTANTS_REL_SURFACE (2<<6) ; #define I915_EXEC_GEN7_SOL_RESET (1<<8); #define I915_EXEC_SECURE (1<<9); #define I915_EXEC_IS_PINNED (1<<10); #define I915_EXEC_NO_RELOC (1<<11); #define I915_EXEC_HANDLE_LUT (1<<12); #define I915_EXEC_BSD_SHIFT (13); #define I915_EXEC_BSD_MASK (3 << I915_EXEC_BSD_SHIFT); #define I915_EXEC_BSD_DEFAULT (0 << I915_EXEC_BSD_SHIFT); #define I915_EXEC_BSD_RING1 (1 << I915_EXEC_BSD_SHIFT); #define I915_EXEC_BSD_RING2 (2 << I915_EXEC_BSD_SHIFT); #define I915_EXEC_RESOURCE_STREAMER (1<<15); #define I915_EXEC_FENCE_IN (1<<16); #define I915_EXEC_FENCE_OUT (1<<17); #define I915_EXEC_BATCH_FIRST (1<<18); #define I915_EXEC_FENCE_ARRAY (1<<19); #define I915_EXEC_FENCE_SUBMIT (1 << 20); #define I915_EXEC_USE_EXTENSIONS (1 << 21); #define __I915_EXEC_UNKNOWN_FLAGS (-(I915_EXEC_USE_EXTENSIONS << 1)); __u64 rsvd1; __u64 rsvd2; };}hjusbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMlhjTubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjTubj8)}(hhh](j=)}(h>``buffers_ptr`` Pointer to a list of gem_exec_object2 structs h](jC)}(h``buffers_ptr``h]j)}(hjh]h buffers_ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMkhjubjT)}(hhh]h)}(h-Pointer to a list of gem_exec_object2 structsh]h-Pointer to a list of gem_exec_object2 structs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMkhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMkhjubj=)}(h=``buffer_count`` Number of elements in **buffers_ptr** array h](jC)}(h``buffer_count``h]j)}(hjh]h buffer_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMnhjubjT)}(hhh]h)}(h+Number of elements in **buffers_ptr** arrayh](hNumber of elements in }(hjhhhNhNubj)}(h**buffers_ptr**h]h buffers_ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh array}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMnhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMnhjubj=)}(hJ``batch_start_offset`` Offset in the batchbuffer to start execution from. h](jC)}(h``batch_start_offset``h]j)}(hj)h]hbatch_start_offset}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMshj#ubjT)}(hhh]h)}(h2Offset in the batchbuffer to start execution from.h]h2Offset in the batchbuffer to start execution from.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMrhj?ubah}(h]h ]h"]h$]h&]uh1jShj#ubeh}(h]h ]h"]h$]h&]uh1j<hj>hMshjubj=)}(h``batch_len`` Length in bytes of the batch buffer, starting from the **batch_start_offset**. If 0, length is assumed to be the batch buffer object size. h](jC)}(h ``batch_len``h]j)}(hjch]h batch_len}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMzhj]ubjT)}(hhh]h)}(hLength in bytes of the batch buffer, starting from the **batch_start_offset**. If 0, length is assumed to be the batch buffer object size.h](h7Length in bytes of the batch buffer, starting from the }(hj|hhhNhNubj)}(h**batch_start_offset**h]hbatch_start_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubh=. If 0, length is assumed to be the batch buffer object size.}(hj|hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMxhjyubah}(h]h ]h"]h$]h&]uh1jShj]ubeh}(h]h ]h"]h$]h&]uh1j<hjxhMzhjubj=)}(h``DR1`` deprecated h](jC)}(h``DR1``h]j)}(hjh]hDR1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM~hjubjT)}(hhh]h)}(h deprecatedh]h deprecated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM~hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM~hjubj=)}(h``DR4`` deprecated h](jC)}(h``DR4``h]j)}(hjh]hDR4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubjT)}(hhh]h)}(h deprecatedh]h deprecated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h(``num_cliprects`` See **cliprects_ptr** h](jC)}(h``num_cliprects``h]j)}(hj!h]h num_cliprects}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubjT)}(hhh]h)}(hSee **cliprects_ptr**h](hSee }(hj:hhhNhNubj)}(h**cliprects_ptr**h]h cliprects_ptr}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj6hMhjubj=)}(hX``cliprects_ptr`` Kernel clipping was a DRI1 misfeature. It is invalid to use this field if I915_EXEC_FENCE_ARRAY or I915_EXEC_USE_EXTENSIONS flags are not set. If I915_EXEC_FENCE_ARRAY is set, then this is a pointer to an array of :c:type:`drm_i915_gem_exec_fence` and **num_cliprects** is the length of the array. If I915_EXEC_USE_EXTENSIONS is set, then this is a pointer to a single :c:type:`i915_user_extension` and num_cliprects is 0. h](jC)}(h``cliprects_ptr``h]j)}(hjhh]h cliprects_ptr}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjbubjT)}(hhh](h)}(h&Kernel clipping was a DRI1 misfeature.h]h&Kernel clipping was a DRI1 misfeature.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj~ubh)}(hgIt is invalid to use this field if I915_EXEC_FENCE_ARRAY or I915_EXEC_USE_EXTENSIONS flags are not set.h]hgIt is invalid to use this field if I915_EXEC_FENCE_ARRAY or I915_EXEC_USE_EXTENSIONS flags are not set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj~ubh)}(hIf I915_EXEC_FENCE_ARRAY is set, then this is a pointer to an array of :c:type:`drm_i915_gem_exec_fence` and **num_cliprects** is the length of the array.h](hGIf I915_EXEC_FENCE_ARRAY is set, then this is a pointer to an array of }(hjhhhNhNubh)}(h!:c:type:`drm_i915_gem_exec_fence`h]j)}(hjh]hdrm_i915_gem_exec_fence}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_gem_exec_fenceuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh and }(hjhhhNhNubj)}(h**num_cliprects**h]h num_cliprects}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is the length of the array.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj~ubh)}(h|If I915_EXEC_USE_EXTENSIONS is set, then this is a pointer to a single :c:type:`i915_user_extension` and num_cliprects is 0.h](hGIf I915_EXEC_USE_EXTENSIONS is set, then this is a pointer to a single }(hjhhhNhNubh)}(h:c:type:`i915_user_extension`h]j)}(hjh]hi915_user_extension}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQi915_user_extensionuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh and num_cliprects is 0.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj~ubeh}(h]h ]h"]h$]h&]uh1jShjbubeh}(h]h ]h"]h$]h&]uh1j<hj}hMhjubj=)}(h``flags`` Execbuf flags h](jC)}(h ``flags``h]j)}(hj'h]hflags}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj!ubjT)}(hhh]h)}(h Execbuf flagsh]h Execbuf flags}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hMhj=ubah}(h]h ]h"]h$]h&]uh1jShj!ubeh}(h]h ]h"]h$]h&]uh1j<hj<hMhjubj=)}(h``rsvd1`` Context id h](jC)}(h ``rsvd1``h]j)}(hj`h]hrsvd1}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjZubjT)}(hhh]h)}(h Context idh]h Context id}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjvubah}(h]h ]h"]h$]h&]uh1jShjZubeh}(h]h ]h"]h$]h&]uh1j<hjuhMhjubj=)}(hX'``rsvd2`` in and out sync_file file descriptors. When I915_EXEC_FENCE_IN or I915_EXEC_FENCE_SUBMIT flag is set, the lower 32 bits of this field will have the in sync_file fd (input). When I915_EXEC_FENCE_OUT flag is set, the upper 32 bits of this field will have the out sync_file fd (output).h](jC)}(h ``rsvd2``h]j)}(hjh]hrsvd2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubjT)}(hhh](h)}(h&in and out sync_file file descriptors.h]h&in and out sync_file file descriptors.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(hWhen I915_EXEC_FENCE_IN or I915_EXEC_FENCE_SUBMIT flag is set, the lower 32 bits of this field will have the in sync_file fd (input).h]hWhen I915_EXEC_FENCE_IN or I915_EXEC_FENCE_SUBMIT flag is set, the lower 32 bits of this field will have the in sync_file fd (input).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(hnWhen I915_EXEC_FENCE_OUT flag is set, the upper 32 bits of this field will have the out sync_file fd (output).h]hnWhen I915_EXEC_FENCE_OUT flag is set, the upper 32 bits of this field will have the out sync_file fd (output).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_i915_gem_caching (C struct)c.drm_i915_gem_cachinghNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_gem_cachingh]j)}(hstruct drm_i915_gem_cachingh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM!ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhM!ubj!)}(hdrm_i915_gem_cachingh]j')}(hj h]hdrm_i915_gem_caching}(hj0hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj,ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj hhhjhM!ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhM!ubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhM!hjhhubjU)}(hhh]h)}(h/Set or get the caching for given object handle.h]h/Set or get the caching for given object handle.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMlhjOhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhM!ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjjxjjjyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_gem_caching { __u32 handle; #define I915_CACHING_NONE 0; #define I915_CACHING_CACHED 1; #define I915_CACHING_DISPLAY 2; __u32 caching; }; **Members** ``handle`` Handle of the buffer to set/get the caching level. ``caching`` The GTT caching level to apply or possible return value. The supported **caching** values: I915_CACHING_NONE: GPU access is not coherent with CPU caches. Default for machines without an LLC. This means manual flushing might be needed, if we want GPU access to be coherent. I915_CACHING_CACHED: GPU access is coherent with CPU caches and furthermore the data is cached in last-level caches shared between CPU cores and the GPU GT. I915_CACHING_DISPLAY: Special GPU caching mode which is coherent with the scanout engines. Transparently falls back to I915_CACHING_NONE on platforms where no special cache mode (like write-through or gfdt flushing) is available. The kernel automatically sets this mode when using a buffer as a scanout target. Userspace can manually set this mode to avoid a costly stall and clflush in the hotpath of drawing the first frame.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh:}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMphjnubj)}(hstruct drm_i915_gem_caching { __u32 handle; #define I915_CACHING_NONE 0; #define I915_CACHING_CACHED 1; #define I915_CACHING_DISPLAY 2; __u32 caching; };h]hstruct drm_i915_gem_caching { __u32 handle; #define I915_CACHING_NONE 0; #define I915_CACHING_CACHED 1; #define I915_CACHING_DISPLAY 2; __u32 caching; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMrhjnubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMzhjnubj8)}(hhh](j=)}(h>``handle`` Handle of the buffer to set/get the caching level. h](jC)}(h ``handle``h]j)}(hjh]hhandle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubjT)}(hhh]h)}(h2Handle of the buffer to set/get the caching level.h]h2Handle of the buffer to set/get the caching level.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hXm``caching`` The GTT caching level to apply or possible return value. The supported **caching** values: I915_CACHING_NONE: GPU access is not coherent with CPU caches. Default for machines without an LLC. This means manual flushing might be needed, if we want GPU access to be coherent. I915_CACHING_CACHED: GPU access is coherent with CPU caches and furthermore the data is cached in last-level caches shared between CPU cores and the GPU GT. I915_CACHING_DISPLAY: Special GPU caching mode which is coherent with the scanout engines. Transparently falls back to I915_CACHING_NONE on platforms where no special cache mode (like write-through or gfdt flushing) is available. The kernel automatically sets this mode when using a buffer as a scanout target. Userspace can manually set this mode to avoid a costly stall and clflush in the hotpath of drawing the first frame.h](jC)}(h ``caching``h]j)}(hjh]hcaching}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubjT)}(hhh](h)}(h8The GTT caching level to apply or possible return value.h]h8The GTT caching level to apply or possible return value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(h!The supported **caching** values:h](hThe supported }(hj hhhNhNubj)}(h **caching**h]hcaching}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh values:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(hI915_CACHING_NONE:h]hI915_CACHING_NONE:}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(hGPU access is not coherent with CPU caches. Default for machines without an LLC. This means manual flushing might be needed, if we want GPU access to be coherent.h]hGPU access is not coherent with CPU caches. Default for machines without an LLC. This means manual flushing might be needed, if we want GPU access to be coherent.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(hI915_CACHING_CACHED:h]hI915_CACHING_CACHED:}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(hGPU access is coherent with CPU caches and furthermore the data is cached in last-level caches shared between CPU cores and the GPU GT.h]hGPU access is coherent with CPU caches and furthermore the data is cached in last-level caches shared between CPU cores and the GPU GT.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(hI915_CACHING_DISPLAY:h]hI915_CACHING_DISPLAY:}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(hXSpecial GPU caching mode which is coherent with the scanout engines. Transparently falls back to I915_CACHING_NONE on platforms where no special cache mode (like write-through or gfdt flushing) is available. The kernel automatically sets this mode when using a buffer as a scanout target. Userspace can manually set this mode to avoid a costly stall and clflush in the hotpath of drawing the first frame.h]hXSpecial GPU caching mode which is coherent with the scanout engines. Transparently falls back to I915_CACHING_NONE on platforms where no special cache mode (like write-through or gfdt flushing) is available. The kernel automatically sets this mode when using a buffer as a scanout target. Userspace can manually set this mode to avoid a costly stall and clflush in the hotpath of drawing the first frame.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj hMhjubeh}(h]h ]h"]h$]h&]uh1j7hjnubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubh)}(hX?Allow userspace to control the GTT caching bits for a given object when the object is later mapped through the ppGTT(or GGTT on older platforms lacking ppGTT support, or if the object is used for scanout). Note that this might require unbinding the object from the GTT first, if its current caching value doesn't match.h]hXAAllow userspace to control the GTT caching bits for a given object when the object is later mapped through the ppGTT(or GGTT on older platforms lacking ppGTT support, or if the object is used for scanout). Note that this might require unbinding the object from the GTT first, if its current caching value doesn’t match.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMmhjhhubh)}(hXNote that this all changes on discrete platforms, starting from DG1, the set/get caching is no longer supported, and is now rejected. Instead the CPU caching attributes(WB vs WC) will become an immutable creation time property for the object, along with the GTT caching level. For now we don't expose any new uAPI for this, instead on DG1 this is all implicit, although this largely shouldn't matter since DG1 is coherent by default(without any way of controlling it).h]hXNote that this all changes on discrete platforms, starting from DG1, the set/get caching is no longer supported, and is now rejected. Instead the CPU caching attributes(WB vs WC) will become an immutable creation time property for the object, along with the GTT caching level. For now we don’t expose any new uAPI for this, instead on DG1 this is all implicit, although this largely shouldn’t matter since DG1 is coherent by default(without any way of controlling it).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMshjhhubh)}(h*Implicit caching rules, starting from DG1:h]h*Implicit caching rules, starting from DG1:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM{hjhhubj)}(hXH- If any of the object placements (see :c:type:`drm_i915_gem_create_ext_memory_regions`) contain I915_MEMORY_CLASS_DEVICE then the object will be allocated and mapped as write-combined only. - Everything else is always allocated and mapped as write-back, with the guarantee that everything is also coherent with the GPU. h]h)}(hhh](h)}(hIf any of the object placements (see :c:type:`drm_i915_gem_create_ext_memory_regions`) contain I915_MEMORY_CLASS_DEVICE then the object will be allocated and mapped as write-combined only. h]h)}(hIf any of the object placements (see :c:type:`drm_i915_gem_create_ext_memory_regions`) contain I915_MEMORY_CLASS_DEVICE then the object will be allocated and mapped as write-combined only.h](h%If any of the object placements (see }(hjhhhNhNubh)}(h0:c:type:`drm_i915_gem_create_ext_memory_regions`h]j)}(hjh]h&drm_i915_gem_create_ext_memory_regions}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ&drm_i915_gem_create_ext_memory_regionsuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM}hjubhg) contain I915_MEMORY_CLASS_DEVICE then the object will be allocated and mapped as write-combined only.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hM}hjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hEverything else is always allocated and mapped as write-back, with the guarantee that everything is also coherent with the GPU. h]h)}(hEverything else is always allocated and mapped as write-back, with the guarantee that everything is also coherent with the GPU.h]hEverything else is always allocated and mapped as write-back, with the guarantee that everything is also coherent with the GPU.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj<ubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jQ jR uh1hhj+hM}hjubah}(h]h ]h"]h$]h&]uh1jhj+hM}hjhhubh)}(hNote that this is likely to change in the future again, where we might need more flexibility on future devices, so making this all explicit as part of a new :c:type:`drm_i915_gem_create_ext` extension is probable.h](hNote that this is likely to change in the future again, where we might need more flexibility on future devices, so making this all explicit as part of a new }(hjahhhNhNubh)}(h!:c:type:`drm_i915_gem_create_ext`h]j)}(hjkh]hdrm_i915_gem_create_ext}(hjmhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_gem_create_extuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjaubh extension is probable.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjhhubh)}(hXSide note: Part of the reason for this is that changing the at-allocation-time CPU caching attributes for the pages might be required(and is expensive) if we need to then CPU map the pages later with different caching attributes. This inconsistent caching behaviour, while supported on x86, is not universally supported on other architectures. So for simplicity we opt for setting everything at creation time, whilst also making it immutable, on discrete platforms.h]hXSide note: Part of the reason for this is that changing the at-allocation-time CPU caching attributes for the pages might be required(and is expensive) if we need to then CPU map the pages later with different caching attributes. This inconsistent caching behaviour, while supported on x86, is not universally supported on other architectures. So for simplicity we opt for setting everything at creation time, whilst also making it immutable, on discrete platforms.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_i915_gem_context_create_ext (C struct)!c.drm_i915_gem_context_create_exthNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_gem_context_create_exth]j)}(h&struct drm_i915_gem_context_create_exth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_i915_gem_context_create_exth]j')}(hjh]hdrm_i915_gem_context_create_ext}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(h Structure for creating contexts.h]h Structure for creating contexts.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_gem_context_create_ext { __u32 ctx_id; __u32 flags; #define I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS (1u << 0); #define I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE (1u << 1); #define I915_CONTEXT_CREATE_FLAGS_UNKNOWN (-(I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE << 1)); __u64 extensions; #define I915_CONTEXT_CREATE_EXT_SETPARAM 0; #define I915_CONTEXT_CREATE_EXT_CLONE 1; }; **Members** ``ctx_id`` Id of the created context (output) ``flags`` Supported flags are: I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS: Extensions may be appended to this structure and driver must check for those. See **extensions**. I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE Created context will have single timeline. ``extensions`` Zero-terminated chain of extensions. I915_CONTEXT_CREATE_EXT_SETPARAM: Context parameter to set or query during context creation. See struct drm_i915_gem_context_create_ext_setparam. I915_CONTEXT_CREATE_EXT_CLONE: This extension has been removed. On the off chance someone somewhere has attempted to use it, never re-use this extension number.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubj)}(hXstruct drm_i915_gem_context_create_ext { __u32 ctx_id; __u32 flags; #define I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS (1u << 0); #define I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE (1u << 1); #define I915_CONTEXT_CREATE_FLAGS_UNKNOWN (-(I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE << 1)); __u64 extensions; #define I915_CONTEXT_CREATE_EXT_SETPARAM 0; #define I915_CONTEXT_CREATE_EXT_CLONE 1; };h]hXstruct drm_i915_gem_context_create_ext { __u32 ctx_id; __u32 flags; #define I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS (1u << 0); #define I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE (1u << 1); #define I915_CONTEXT_CREATE_FLAGS_UNKNOWN (-(I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE << 1)); __u64 extensions; #define I915_CONTEXT_CREATE_EXT_SETPARAM 0; #define I915_CONTEXT_CREATE_EXT_CLONE 1; };}hj:sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(h **Members**h]j)}(hjKh]hMembers}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubj8)}(hhh](j=)}(h.``ctx_id`` Id of the created context (output) h](jC)}(h ``ctx_id``h]j)}(hjjh]hctx_id}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjdubjT)}(hhh]h)}(h"Id of the created context (output)h]h"Id of the created context (output)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjdubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjaubj=)}(hX``flags`` Supported flags are: I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS: Extensions may be appended to this structure and driver must check for those. See **extensions**. I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE Created context will have single timeline. h](jC)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubjT)}(hhh](h)}(hSupported flags are:h]hSupported flags are:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(h)I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS:h]h)I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(haExtensions may be appended to this structure and driver must check for those. See **extensions**.h](hRExtensions may be appended to this structure and driver must check for those. See }(hjhhhNhNubj)}(h**extensions**h]h extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(h)I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINEh]h)I915_CONTEXT_CREATE_FLAGS_SINGLE_TIMELINE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(h*Created context will have single timeline.h]h*Created context will have single timeline.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjaubj=)}(hXh``extensions`` Zero-terminated chain of extensions. I915_CONTEXT_CREATE_EXT_SETPARAM: Context parameter to set or query during context creation. See struct drm_i915_gem_context_create_ext_setparam. I915_CONTEXT_CREATE_EXT_CLONE: This extension has been removed. On the off chance someone somewhere has attempted to use it, never re-use this extension number.h](jC)}(h``extensions``h]j)}(hj*h]h extensions}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj$ubjT)}(hhh](h)}(h$Zero-terminated chain of extensions.h]h$Zero-terminated chain of extensions.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj@ubh)}(hI915_CONTEXT_CREATE_EXT_SETPARAM: Context parameter to set or query during context creation. See struct drm_i915_gem_context_create_ext_setparam.h]hI915_CONTEXT_CREATE_EXT_SETPARAM: Context parameter to set or query during context creation. See struct drm_i915_gem_context_create_ext_setparam.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj@ubh)}(hI915_CONTEXT_CREATE_EXT_CLONE: This extension has been removed. On the off chance someone somewhere has attempted to use it, never re-use this extension number.h]hI915_CONTEXT_CREATE_EXT_CLONE: This extension has been removed. On the off chance someone somewhere has attempted to use it, never re-use this extension number.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj@ubeh}(h]h ]h"]h$]h&]uh1jShj$ubeh}(h]h ]h"]h$]h&]uh1j<hj?hMhjaubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_i915_gem_context_param (C struct)c.drm_i915_gem_context_paramhNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_gem_context_paramh]j)}(h!struct drm_i915_gem_context_paramh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_i915_gem_context_paramh]j')}(hjh]hdrm_i915_gem_context_param}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(h"Context parameter to set or query.h]h"Context parameter to set or query.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_gem_context_param { __u32 ctx_id; __u32 size; __u64 param; #define I915_CONTEXT_PARAM_BAN_PERIOD 0x1; #define I915_CONTEXT_PARAM_NO_ZEROMAP 0x2; #define I915_CONTEXT_PARAM_GTT_SIZE 0x3; #define I915_CONTEXT_PARAM_NO_ERROR_CAPTURE 0x4; #define I915_CONTEXT_PARAM_BANNABLE 0x5; #define I915_CONTEXT_PARAM_PRIORITY 0x6; #define I915_CONTEXT_MAX_USER_PRIORITY 1023 ; #define I915_CONTEXT_DEFAULT_PRIORITY 0; #define I915_CONTEXT_MIN_USER_PRIORITY -1023 ; #define I915_CONTEXT_PARAM_SSEU 0x7; #define I915_CONTEXT_PARAM_RECOVERABLE 0x8; #define I915_CONTEXT_PARAM_VM 0x9; #define I915_CONTEXT_PARAM_ENGINES 0xa; #define I915_CONTEXT_PARAM_PERSISTENCE 0xb; #define I915_CONTEXT_PARAM_RINGSIZE 0xc; #define I915_CONTEXT_PARAM_PROTECTED_CONTENT 0xd; #define I915_CONTEXT_PARAM_LOW_LATENCY 0xe; #define I915_CONTEXT_PARAM_CONTEXT_IMAGE 0xf; __u64 value; }; **Members** ``ctx_id`` Context id ``size`` Size of the parameter **value** ``param`` Parameter to set or query ``value`` Context parameter value to be set or queriedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubj)}(hXstruct drm_i915_gem_context_param { __u32 ctx_id; __u32 size; __u64 param; #define I915_CONTEXT_PARAM_BAN_PERIOD 0x1; #define I915_CONTEXT_PARAM_NO_ZEROMAP 0x2; #define I915_CONTEXT_PARAM_GTT_SIZE 0x3; #define I915_CONTEXT_PARAM_NO_ERROR_CAPTURE 0x4; #define I915_CONTEXT_PARAM_BANNABLE 0x5; #define I915_CONTEXT_PARAM_PRIORITY 0x6; #define I915_CONTEXT_MAX_USER_PRIORITY 1023 ; #define I915_CONTEXT_DEFAULT_PRIORITY 0; #define I915_CONTEXT_MIN_USER_PRIORITY -1023 ; #define I915_CONTEXT_PARAM_SSEU 0x7; #define I915_CONTEXT_PARAM_RECOVERABLE 0x8; #define I915_CONTEXT_PARAM_VM 0x9; #define I915_CONTEXT_PARAM_ENGINES 0xa; #define I915_CONTEXT_PARAM_PERSISTENCE 0xb; #define I915_CONTEXT_PARAM_RINGSIZE 0xc; #define I915_CONTEXT_PARAM_PROTECTED_CONTENT 0xd; #define I915_CONTEXT_PARAM_LOW_LATENCY 0xe; #define I915_CONTEXT_PARAM_CONTEXT_IMAGE 0xf; __u64 value; };h]hXstruct drm_i915_gem_context_param { __u32 ctx_id; __u32 size; __u64 param; #define I915_CONTEXT_PARAM_BAN_PERIOD 0x1; #define I915_CONTEXT_PARAM_NO_ZEROMAP 0x2; #define I915_CONTEXT_PARAM_GTT_SIZE 0x3; #define I915_CONTEXT_PARAM_NO_ERROR_CAPTURE 0x4; #define I915_CONTEXT_PARAM_BANNABLE 0x5; #define I915_CONTEXT_PARAM_PRIORITY 0x6; #define I915_CONTEXT_MAX_USER_PRIORITY 1023 ; #define I915_CONTEXT_DEFAULT_PRIORITY 0; #define I915_CONTEXT_MIN_USER_PRIORITY -1023 ; #define I915_CONTEXT_PARAM_SSEU 0x7; #define I915_CONTEXT_PARAM_RECOVERABLE 0x8; #define I915_CONTEXT_PARAM_VM 0x9; #define I915_CONTEXT_PARAM_ENGINES 0xa; #define I915_CONTEXT_PARAM_PERSISTENCE 0xb; #define I915_CONTEXT_PARAM_RINGSIZE 0xc; #define I915_CONTEXT_PARAM_PROTECTED_CONTENT 0xd; #define I915_CONTEXT_PARAM_LOW_LATENCY 0xe; #define I915_CONTEXT_PARAM_CONTEXT_IMAGE 0xf; __u64 value; };}hj!sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubh)}(h **Members**h]j)}(hj2h]hMembers}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubj8)}(hhh](j=)}(h``ctx_id`` Context id h](jC)}(h ``ctx_id``h]j)}(hjQh]hctx_id}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjKubjT)}(hhh]h)}(h Context idh]h Context id}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjgubah}(h]h ]h"]h$]h&]uh1jShjKubeh}(h]h ]h"]h$]h&]uh1j<hjfhMhjHubj=)}(h)``size`` Size of the parameter **value** h](jC)}(h``size``h]j)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubjT)}(hhh]h)}(hSize of the parameter **value**h](hSize of the parameter }(hjhhhNhNubj)}(h **value**h]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjHubj=)}(h$``param`` Parameter to set or query h](jC)}(h ``param``h]j)}(hjh]hparam}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjubjT)}(hhh]h)}(hParameter to set or queryh]hParameter to set or query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjHubj=)}(h6``value`` Context parameter value to be set or queriedh](jC)}(h ``value``h]j)}(hj h]hvalue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj ubjT)}(hhh]h)}(h,Context parameter value to be set or queriedh]h,Context parameter value to be set or queried}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hMhjHubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubj )}(h.. _Virtual Engine uAPI:h]h}(h]h ]h"]h$]h&]hʌvirtual-engine-uapiuh1j hMhjhhhNubh)}(h**Virtual Engine uAPI**h]j)}(hjX h]hVirtual Engine uAPI}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubah}(h]jU ah ]h"]virtual engine uapiah$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhj3}jk jK sj5}jU jK subh)}(hVirtual engine is a concept where userspace is able to configure a set of physical engines, submit a batch buffer, and let the driver execute it on any engine from the set as it sees fit.h]hVirtual engine is a concept where userspace is able to configure a set of physical engines, submit a batch buffer, and let the driver execute it on any engine from the set as it sees fit.}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubh)}(hThis is primarily useful on parts which have multiple instances of a same class engine, like for example GT3+ Skylake parts with their two VCS engines.h]hThis is primarily useful on parts which have multiple instances of a same class engine, like for example GT3+ Skylake parts with their two VCS engines.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubh)}(hXFor instance userspace can enumerate all engines of a certain class using the previously described `Engine Discovery uAPI`_. After that userspace can create a GEM context with a placeholder slot for the virtual engine (using `I915_ENGINE_CLASS_INVALID` and `I915_ENGINE_CLASS_INVALID_NONE` for class and instance respectively) and finally using the `I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE` extension place a virtual engine in the same reserved slot.h](hcFor instance userspace can enumerate all engines of a certain class using the previously described }(hj hhhNhNubh)}(h`Engine Discovery uAPI`_h]hEngine Discovery uAPI}(hj hhhNhNubah}(h]h ]h"]h$]h&]nameEngine Discovery uAPIhʌengine-discovery-uapiuh1hhj resolvedKubhf. After that userspace can create a GEM context with a placeholder slot for the virtual engine (using }(hj hhhNhNubj )}(h`I915_ENGINE_CLASS_INVALID`h]hI915_ENGINE_CLASS_INVALID}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh and }(hj hhhNhNubj )}(h `I915_ENGINE_CLASS_INVALID_NONE`h]hI915_ENGINE_CLASS_INVALID_NONE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh< for class and instance respectively) and finally using the }(hj hhhNhNubj )}(h'`I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE`h]h%I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh< extension place a virtual engine in the same reserved slot.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubh)}(hIExample of creating a virtual engine and submitting a batch buffer to it:h]hIExample of creating a virtual engine and submitting a batch buffer to it:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubj)}(hX(I915_DEFINE_CONTEXT_ENGINES_LOAD_BALANCE(virtual, 2) = { .base.name = I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE, .engine_index = 0, // Place this virtual engine into engine map slot 0 .num_siblings = 2, .engines = { { I915_ENGINE_CLASS_VIDEO, 0 }, { I915_ENGINE_CLASS_VIDEO, 1 }, }, }; I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, 1) = { .engines = { { I915_ENGINE_CLASS_INVALID, I915_ENGINE_CLASS_INVALID_NONE } }, .extensions = to_user_pointer(&virtual), // Chains after load_balance extension }; struct drm_i915_gem_context_create_ext_setparam p_engines = { .base = { .name = I915_CONTEXT_CREATE_EXT_SETPARAM, }, .param = { .param = I915_CONTEXT_PARAM_ENGINES, .value = to_user_pointer(&engines), .size = sizeof(engines), }, }; struct drm_i915_gem_context_create_ext create = { .flags = I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS, .extensions = to_user_pointer(&p_engines); }; ctx_id = gem_context_create_ext(drm_fd, &create); // Now we have created a GEM context with its engine map containing a // single virtual engine. Submissions to this slot can go either to // vcs0 or vcs1, depending on the load balancing algorithm used inside // the driver. The load balancing is dynamic from one batch buffer to // another and transparent to userspace. ... execbuf.rsvd1 = ctx_id; execbuf.flags = 0; // Submits to index 0 which is the virtual engine gem_execbuf(drm_fd, &execbuf);h]hX(I915_DEFINE_CONTEXT_ENGINES_LOAD_BALANCE(virtual, 2) = { .base.name = I915_CONTEXT_ENGINES_EXT_LOAD_BALANCE, .engine_index = 0, // Place this virtual engine into engine map slot 0 .num_siblings = 2, .engines = { { I915_ENGINE_CLASS_VIDEO, 0 }, { I915_ENGINE_CLASS_VIDEO, 1 }, }, }; I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, 1) = { .engines = { { I915_ENGINE_CLASS_INVALID, I915_ENGINE_CLASS_INVALID_NONE } }, .extensions = to_user_pointer(&virtual), // Chains after load_balance extension }; struct drm_i915_gem_context_create_ext_setparam p_engines = { .base = { .name = I915_CONTEXT_CREATE_EXT_SETPARAM, }, .param = { .param = I915_CONTEXT_PARAM_ENGINES, .value = to_user_pointer(&engines), .size = sizeof(engines), }, }; struct drm_i915_gem_context_create_ext create = { .flags = I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS, .extensions = to_user_pointer(&p_engines); }; ctx_id = gem_context_create_ext(drm_fd, &create); // Now we have created a GEM context with its engine map containing a // single virtual engine. Submissions to this slot can go either to // vcs0 or vcs1, depending on the load balancing algorithm used inside // the driver. The load balancing is dynamic from one batch buffer to // another and transparent to userspace. ... execbuf.rsvd1 = ctx_id; execbuf.flags = 0; // Submits to index 0 which is the virtual engine gem_execbuf(drm_fd, &execbuf);}hj sbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j/i915_context_engines_parallel_submit (C struct)&c.i915_context_engines_parallel_submithNtauh1jhjhhhNhNubj)}(hhh](j)}(h$i915_context_engines_parallel_submith]j)}(h+struct i915_context_engines_parallel_submith](j)}(hjh]hstruct}(hj"!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMubj)}(h h]h }(hj0!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj/!hMubj!)}(h$i915_context_engines_parallel_submith]j')}(hj!h]h$i915_context_engines_parallel_submit}(hjB!hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj>!ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj!hhhj/!hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj!hhhj/!hMubah}(h]j!ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj/!hMhj!hhubjU)}(hhh]h)}(h)Configure engine for parallel submission.h]h)Configure engine for parallel submission.}(hjd!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhML hja!hhubah}(h]h ]h"]h$]h&]uh1jThj!hhhj/!hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj|!jxj|!jyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct i915_context_engines_parallel_submit { struct i915_user_extension base; __u16 engine_index; __u16 width; __u16 num_siblings; __u16 mbz16; __u64 flags; __u64 mbz64[3]; struct i915_engine_class_instance engines[]; }; **Members** ``base`` base user extension. ``engine_index`` slot for parallel engine ``width`` number of contexts per parallel engine or in other words the number of batches in each submission ``num_siblings`` number of siblings per context or in other words the number of possible placements for each submission ``mbz16`` reserved for future use; must be zero ``flags`` all undefined flags must be zero, currently not defined flags ``mbz64`` reserved for future use; must be zero ``engines`` 2-d array of engine instances to configure parallel engine length = width (i) * num_siblings (j) index = j + i * num_siblingsh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh:}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMP hj!ubj)}(hstruct i915_context_engines_parallel_submit { struct i915_user_extension base; __u16 engine_index; __u16 width; __u16 num_siblings; __u16 mbz16; __u64 flags; __u64 mbz64[3]; struct i915_engine_class_instance engines[]; };h]hstruct i915_context_engines_parallel_submit { struct i915_user_extension base; __u16 engine_index; __u16 width; __u16 num_siblings; __u16 mbz16; __u64 flags; __u64 mbz64[3]; struct i915_engine_class_instance engines[]; };}hj!sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMR hj!ubh)}(h **Members**h]j)}(hj!h]hMembers}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM] hj!ubj8)}(hhh](j=)}(h``base`` base user extension. h](jC)}(h``base``h]j)}(hj!h]hbase}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj!ubjT)}(hhh]h)}(hbase user extension.h]hbase user extension.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hM hj!ubah}(h]h ]h"]h$]h&]uh1jShj!ubeh}(h]h ]h"]h$]h&]uh1j<hj!hM hj!ubj=)}(h*``engine_index`` slot for parallel engine h](jC)}(h``engine_index``h]j)}(hj "h]h engine_index}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj"ubjT)}(hhh]h)}(hslot for parallel engineh]hslot for parallel engine}(hj#"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM hj "ubah}(h]h ]h"]h$]h&]uh1jShj"ubeh}(h]h ]h"]h$]h&]uh1j<hj"hM hj!ubj=)}(hl``width`` number of contexts per parallel engine or in other words the number of batches in each submission h](jC)}(h ``width``h]j)}(hjC"h]hwidth}(hjE"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA"ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj="ubjT)}(hhh]h)}(hanumber of contexts per parallel engine or in other words the number of batches in each submissionh]hanumber of contexts per parallel engine or in other words the number of batches in each submission}(hj\"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjY"ubah}(h]h ]h"]h$]h&]uh1jShj="ubeh}(h]h ]h"]h$]h&]uh1j<hjX"hM hj!ubj=)}(hx``num_siblings`` number of siblings per context or in other words the number of possible placements for each submission h](jC)}(h``num_siblings``h]j)}(hj}"h]h num_siblings}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{"ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjw"ubjT)}(hhh]h)}(hfnumber of siblings per context or in other words the number of possible placements for each submissionh]hfnumber of siblings per context or in other words the number of possible placements for each submission}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj"ubah}(h]h ]h"]h$]h&]uh1jShjw"ubeh}(h]h ]h"]h$]h&]uh1j<hj"hM hj!ubj=)}(h0``mbz16`` reserved for future use; must be zero h](jC)}(h ``mbz16``h]j)}(hj"h]hmbz16}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj"ubjT)}(hhh]h)}(h%reserved for future use; must be zeroh]h%reserved for future use; must be zero}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM hj"ubah}(h]h ]h"]h$]h&]uh1jShj"ubeh}(h]h ]h"]h$]h&]uh1j<hj"hM hj!ubj=)}(hH``flags`` all undefined flags must be zero, currently not defined flags h](jC)}(h ``flags``h]j)}(hj"h]hflags}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj"ubjT)}(hhh]h)}(h=all undefined flags must be zero, currently not defined flagsh]h=all undefined flags must be zero, currently not defined flags}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hM hj#ubah}(h]h ]h"]h$]h&]uh1jShj"ubeh}(h]h ]h"]h$]h&]uh1j<hj#hM hj!ubj=)}(h0``mbz64`` reserved for future use; must be zero h](jC)}(h ``mbz64``h]j)}(hj)#h]hmbz64}(hj+#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'#ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj##ubjT)}(hhh]h)}(h%reserved for future use; must be zeroh]h%reserved for future use; must be zero}(hjB#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>#hM hj?#ubah}(h]h ]h"]h$]h&]uh1jShj##ubeh}(h]h ]h"]h$]h&]uh1j<hj>#hM hj!ubj=)}(h``engines`` 2-d array of engine instances to configure parallel engine length = width (i) * num_siblings (j) index = j + i * num_siblingsh](jC)}(h ``engines``h]j)}(hjb#h]hengines}(hjd#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`#ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj\#ubjT)}(hhh](h)}(h:2-d array of engine instances to configure parallel engineh]h:2-d array of engine instances to configure parallel engine}(hj{#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjx#ubh)}(hBlength = width (i) * num_siblings (j) index = j + i * num_siblingsh]hBlength = width (i) * num_siblings (j) index = j + i * num_siblings}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw#hM hjx#ubeh}(h]h ]h"]h$]h&]uh1jShj\#ubeh}(h]h ]h"]h$]h&]uh1j<hjw#hM hj!ubeh}(h]h ]h"]h$]h&]uh1j7hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(hXOSetup a slot in the context engine map to allow multiple BBs to be submitted in a single execbuf IOCTL. Those BBs will then be scheduled to run on the GPU in parallel. Multiple hardware contexts are created internally in the i915 to run these BBs. Once a slot is configured for N BBs only N BBs can be submitted in each execbuf IOCTL and this is implicit behavior e.g. The user doesn't tell the execbuf IOCTL there are N BBs, the execbuf IOCTL knows how many BBs there are based on the slot's configuration. The N BBs are the last N buffer objects or first N if I915_EXEC_BATCH_FIRST is set.h]hXSSetup a slot in the context engine map to allow multiple BBs to be submitted in a single execbuf IOCTL. Those BBs will then be scheduled to run on the GPU in parallel. Multiple hardware contexts are created internally in the i915 to run these BBs. Once a slot is configured for N BBs only N BBs can be submitted in each execbuf IOCTL and this is implicit behavior e.g. The user doesn’t tell the execbuf IOCTL there are N BBs, the execbuf IOCTL knows how many BBs there are based on the slot’s configuration. The N BBs are the last N buffer objects or first N if I915_EXEC_BATCH_FIRST is set.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMM hjhhubh)}(hX9The default placement behavior is to create implicit bonds between each context if each context maps to more than 1 physical engine (e.g. context is a virtual engine). Also we only allow contexts of same engine class and these contexts must be in logically contiguous order. Examples of the placement behavior are described below. Lastly, the default is to not allow BBs to be preempted mid-batch. Rather insert coordinated preemption points on all hardware contexts between each set of BBs. Flags could be added in the future to change both of these default behaviors.h]hX9The default placement behavior is to create implicit bonds between each context if each context maps to more than 1 physical engine (e.g. context is a virtual engine). Also we only allow contexts of same engine class and these contexts must be in logically contiguous order. Examples of the placement behavior are described below. Lastly, the default is to not allow BBs to be preempted mid-batch. Rather insert coordinated preemption points on all hardware contexts between each set of BBs. Flags could be added in the future to change both of these default behaviors.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMV hjhhubh)}(hReturns -EINVAL if hardware context placement configuration is invalid or if the placement configuration isn't supported on the platform / submission interface. Returns -ENODEV if extension isn't supported on the platform / submission interface.h]hReturns -EINVAL if hardware context placement configuration is invalid or if the placement configuration isn’t supported on the platform / submission interface. Returns -ENODEV if extension isn’t supported on the platform / submission interface.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM_ hjhhubj)}(hX3Examples syntax: CS[X] = generic engine of same class, logical instance X INVALID = I915_ENGINE_CLASS_INVALID, I915_ENGINE_CLASS_INVALID_NONE Example 1 pseudo code: set_engines(INVALID) set_parallel(engine_index=0, width=2, num_siblings=1, engines=CS[0],CS[1]) Results in the following valid placement: CS[0], CS[1] Example 2 pseudo code: set_engines(INVALID) set_parallel(engine_index=0, width=2, num_siblings=2, engines=CS[0],CS[2],CS[1],CS[3]) Results in the following valid placements: CS[0], CS[1] CS[2], CS[3] This can be thought of as two virtual engines, each containing two engines thereby making a 2D array. However, there are bonds tying the entries together and placing restrictions on how they can be scheduled. Specifically, the scheduler can choose only vertical columns from the 2D array. That is, CS[0] is bonded to CS[1] and CS[2] to CS[3]. So if the scheduler wants to submit to CS[0], it must also choose CS[1] and vice versa. Same for CS[2] requires also using CS[3]. VE[0] = CS[0], CS[2] VE[1] = CS[1], CS[3] Example 3 pseudo code: set_engines(INVALID) set_parallel(engine_index=0, width=2, num_siblings=2, engines=CS[0],CS[1],CS[1],CS[3]) Results in the following valid and invalid placements: CS[0], CS[1] CS[1], CS[3] - Not logically contiguous, return -EINVALh]hX3Examples syntax: CS[X] = generic engine of same class, logical instance X INVALID = I915_ENGINE_CLASS_INVALID, I915_ENGINE_CLASS_INVALID_NONE Example 1 pseudo code: set_engines(INVALID) set_parallel(engine_index=0, width=2, num_siblings=1, engines=CS[0],CS[1]) Results in the following valid placement: CS[0], CS[1] Example 2 pseudo code: set_engines(INVALID) set_parallel(engine_index=0, width=2, num_siblings=2, engines=CS[0],CS[2],CS[1],CS[3]) Results in the following valid placements: CS[0], CS[1] CS[2], CS[3] This can be thought of as two virtual engines, each containing two engines thereby making a 2D array. However, there are bonds tying the entries together and placing restrictions on how they can be scheduled. Specifically, the scheduler can choose only vertical columns from the 2D array. That is, CS[0] is bonded to CS[1] and CS[2] to CS[3]. So if the scheduler wants to submit to CS[0], it must also choose CS[1] and vice versa. Same for CS[2] requires also using CS[3]. VE[0] = CS[0], CS[2] VE[1] = CS[1], CS[3] Example 3 pseudo code: set_engines(INVALID) set_parallel(engine_index=0, width=2, num_siblings=2, engines=CS[0],CS[1],CS[1],CS[3]) Results in the following valid and invalid placements: CS[0], CS[1] CS[1], CS[3] - Not logically contiguous, return -EINVAL}hj#sbah}(h]h ]h"]h$]h&]j>j?jOjPnonejR}uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMe hjhhubj )}(h.. _Context Engine Map uAPI:h]h}(h]h ]h"]h$]h&]hʌcontext-engine-map-uapiuh1j hMhjhhhNubh)}(h**Context Engine Map uAPI**h]j)}(hj$h]hContext Engine Map uAPI}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]j$ah ]h"]context engine map uapiah$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhj3}j'$j$sj5}j$j$subh)}(hContext engine map is a new way of addressing engines when submitting batch- buffers, replacing the existing way of using identifiers like `I915_EXEC_BLT` inside the flags field of `struct drm_i915_gem_execbuffer2`.h](hContext engine map is a new way of addressing engines when submitting batch- buffers, replacing the existing way of using identifiers like }(hj-$hhhNhNubj )}(h`I915_EXEC_BLT`h]h I915_EXEC_BLT}(hj5$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj-$ubh inside the flags field of }(hj-$hhhNhNubj )}(h!`struct drm_i915_gem_execbuffer2`h]hstruct drm_i915_gem_execbuffer2}(hjG$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj-$ubh.}(hj-$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(hTo use it created GEM contexts need to be configured with a list of engines the user is intending to submit to. This is accomplished using the `I915_CONTEXT_PARAM_ENGINES` parameter and `struct i915_context_param_engines`.h](hTo use it created GEM contexts need to be configured with a list of engines the user is intending to submit to. This is accomplished using the }(hj`$hhhNhNubj )}(h`I915_CONTEXT_PARAM_ENGINES`h]hI915_CONTEXT_PARAM_ENGINES}(hjh$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj`$ubh parameter and }(hj`$hhhNhNubj )}(h#`struct i915_context_param_engines`h]h!struct i915_context_param_engines}(hjz$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj`$ubh.}(hj`$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(h[For such contexts the `I915_EXEC_RING_MASK` field becomes an index into the configured map.h](hFor such contexts the }(hj$hhhNhNubj )}(h`I915_EXEC_RING_MASK`h]hI915_EXEC_RING_MASK}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj$ubh0 field becomes an index into the configured map.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(h;Example of creating such context and submitting against it:h]h;Example of creating such context and submitting against it:}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubj)}(hX}I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, 2) = { .engines = { { I915_ENGINE_CLASS_RENDER, 0 }, { I915_ENGINE_CLASS_COPY, 0 } } }; struct drm_i915_gem_context_create_ext_setparam p_engines = { .base = { .name = I915_CONTEXT_CREATE_EXT_SETPARAM, }, .param = { .param = I915_CONTEXT_PARAM_ENGINES, .value = to_user_pointer(&engines), .size = sizeof(engines), }, }; struct drm_i915_gem_context_create_ext create = { .flags = I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS, .extensions = to_user_pointer(&p_engines); }; ctx_id = gem_context_create_ext(drm_fd, &create); // We have now created a GEM context with two engines in the map: // Index 0 points to rcs0 while index 1 points to bcs0. Other engines // will not be accessible from this context. ... execbuf.rsvd1 = ctx_id; execbuf.flags = 0; // Submits to index 0, which is rcs0 for this context gem_execbuf(drm_fd, &execbuf); ... execbuf.rsvd1 = ctx_id; execbuf.flags = 1; // Submits to index 0, which is bcs0 for this context gem_execbuf(drm_fd, &execbuf);h]hX}I915_DEFINE_CONTEXT_PARAM_ENGINES(engines, 2) = { .engines = { { I915_ENGINE_CLASS_RENDER, 0 }, { I915_ENGINE_CLASS_COPY, 0 } } }; struct drm_i915_gem_context_create_ext_setparam p_engines = { .base = { .name = I915_CONTEXT_CREATE_EXT_SETPARAM, }, .param = { .param = I915_CONTEXT_PARAM_ENGINES, .value = to_user_pointer(&engines), .size = sizeof(engines), }, }; struct drm_i915_gem_context_create_ext create = { .flags = I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS, .extensions = to_user_pointer(&p_engines); }; ctx_id = gem_context_create_ext(drm_fd, &create); // We have now created a GEM context with two engines in the map: // Index 0 points to rcs0 while index 1 points to bcs0. Other engines // will not be accessible from this context. ... execbuf.rsvd1 = ctx_id; execbuf.flags = 0; // Submits to index 0, which is rcs0 for this context gem_execbuf(drm_fd, &execbuf); ... execbuf.rsvd1 = ctx_id; execbuf.flags = 1; // Submits to index 0, which is bcs0 for this context gem_execbuf(drm_fd, &execbuf);}hj$sbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j3drm_i915_gem_context_create_ext_setparam (C struct)*c.drm_i915_gem_context_create_ext_setparamhNtauh1jhjhhhNhNubj)}(hhh](j)}(h(drm_i915_gem_context_create_ext_setparamh]j)}(h/struct drm_i915_gem_context_create_ext_setparamh](j)}(hjh]hstruct}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj$hM ubj!)}(h(drm_i915_gem_context_create_ext_setparamh]j')}(hj$h]h(drm_i915_gem_context_create_ext_setparam}(hj %hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj%ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj$hhhj$hM ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj$hhhj$hM ubah}(h]j$ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj$hM hj$hhubjU)}(hhh]h)}(h:Context parameter to set or query during context creation.h]h:Context parameter to set or query during context creation.}(hj.%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM# hj+%hhubah}(h]h ]h"]h$]h&]uh1jThj$hhhj$hM ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjF%jxjF%jyjzj{uh1jhhhjhNhNubj})}(hXB**Definition**:: struct drm_i915_gem_context_create_ext_setparam { struct i915_user_extension base; struct drm_i915_gem_context_param param; }; **Members** ``base`` Extension link. See struct i915_user_extension. ``param`` Context parameter to set or query. See struct drm_i915_gem_context_param.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjR%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN%ubh:}(hjN%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM' hjJ%ubj)}(hstruct drm_i915_gem_context_create_ext_setparam { struct i915_user_extension base; struct drm_i915_gem_context_param param; };h]hstruct drm_i915_gem_context_create_ext_setparam { struct i915_user_extension base; struct drm_i915_gem_context_param param; };}hjk%sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM) hjJ%ubh)}(h **Members**h]j)}(hj|%h]hMembers}(hj~%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz%ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM. hjJ%ubj8)}(hhh](j=)}(h9``base`` Extension link. See struct i915_user_extension. h](jC)}(h``base``h]j)}(hj%h]hbase}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM( hj%ubjT)}(hhh]h)}(h/Extension link. See struct i915_user_extension.h]h/Extension link. See struct i915_user_extension.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hM( hj%ubah}(h]h ]h"]h$]h&]uh1jShj%ubeh}(h]h ]h"]h$]h&]uh1j<hj%hM( hj%ubj=)}(hS``param`` Context parameter to set or query. See struct drm_i915_gem_context_param.h](jC)}(h ``param``h]j)}(hj%h]hparam}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM, hj%ubjT)}(hhh]h)}(hIContext parameter to set or query. See struct drm_i915_gem_context_param.h]hIContext parameter to set or query. See struct drm_i915_gem_context_param.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hM, hj%ubah}(h]h ]h"]h$]h&]uh1jShj%ubeh}(h]h ]h"]h$]h&]uh1j<hj%hM, hj%ubeh}(h]h ]h"]h$]h&]uh1j7hjJ%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_i915_gem_vm_control (C struct)c.drm_i915_gem_vm_controlhNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_gem_vm_controlh]j)}(hstruct drm_i915_gem_vm_controlh](j)}(hjh]hstruct}(hj-&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)&hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM3 ubj)}(h h]h }(hj;&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)&hhhj:&hM3 ubj!)}(hdrm_i915_gem_vm_controlh]j')}(hj'&h]hdrm_i915_gem_vm_control}(hjM&hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjI&ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj)&hhhj:&hM3 ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj%&hhhj:&hM3 ubah}(h]j &ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj:&hM3 hj"&hhubjU)}(hhh]h)}(h"Structure to create or destroy VM.h]h"Structure to create or destroy VM.}(hjo&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM7 hjl&hhubah}(h]h ]h"]h$]h&]uh1jThj"&hhhj:&hM3 ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj&jxj&jyjzj{uh1jhhhjhNhNubj})}(hX&**Definition**:: struct drm_i915_gem_vm_control { __u64 extensions; __u32 flags; __u32 vm_id; }; **Members** ``extensions`` Zero-terminated chain of extensions. ``flags`` reserved for future usage, currently MBZ ``vm_id`` Id of the VM created or to be destroyedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh:}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM; hj&ubj)}(h[struct drm_i915_gem_vm_control { __u64 extensions; __u32 flags; __u32 vm_id; };h]h[struct drm_i915_gem_vm_control { __u64 extensions; __u32 flags; __u32 vm_id; };}hj&sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM= hj&ubh)}(h **Members**h]j)}(hj&h]hMembers}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMC hj&ubj8)}(hhh](j=)}(h4``extensions`` Zero-terminated chain of extensions. h](jC)}(h``extensions``h]j)}(hj&h]h extensions}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMM hj&ubjT)}(hhh]h)}(h$Zero-terminated chain of extensions.h]h$Zero-terminated chain of extensions.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMM hj&ubah}(h]h ]h"]h$]h&]uh1jShj&ubeh}(h]h ]h"]h$]h&]uh1j<hj&hMM hj&ubj=)}(h3``flags`` reserved for future usage, currently MBZ h](jC)}(h ``flags``h]j)}(hj'h]hflags}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMP hj'ubjT)}(hhh]h)}(h(reserved for future usage, currently MBZh]h(reserved for future usage, currently MBZ}(hj.'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*'hMP hj+'ubah}(h]h ]h"]h$]h&]uh1jShj'ubeh}(h]h ]h"]h$]h&]uh1j<hj*'hMP hj&ubj=)}(h1``vm_id`` Id of the VM created or to be destroyedh](jC)}(h ``vm_id``h]j)}(hjN'h]hvm_id}(hjP'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL'ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMR hjH'ubjT)}(hhh]h)}(h'Id of the VM created or to be destroyedh]h'Id of the VM created or to be destroyed}(hjg'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMS hjd'ubah}(h]h ]h"]h$]h&]uh1jShjH'ubeh}(h]h ]h"]h$]h&]uh1j<hjc'hMR hj&ubeh}(h]h ]h"]h$]h&]uh1j7hj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMV hjhhubh)}(hDRM_I915_GEM_VM_CREATE -h]hDRM_I915_GEM_VM_CREATE -}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM8 hjhhubh)}(hCreate a new virtual memory address space (ppGTT) for use within a context on the same file. Extensions can be provided to configure exactly how the address space is setup upon creation.h]hCreate a new virtual memory address space (ppGTT) for use within a context on the same file. Extensions can be provided to configure exactly how the address space is setup upon creation.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM: hjhhubh)}(hiThe id of new VM (bound to the fd) for use with I915_CONTEXT_PARAM_VM is returned in the outparam **id**.h](hbThe id of new VM (bound to the fd) for use with I915_CONTEXT_PARAM_VM is returned in the outparam }(hj'hhhNhNubj)}(h**id**h]hid}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM> hjhhubh)}(hAn extension chain maybe provided, starting with **extensions**, and terminated by the **next_extension** being 0. Currently, no extensions are defined.h](h1An extension chain maybe provided, starting with }(hj'hhhNhNubj)}(h**extensions**h]h extensions}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh, and terminated by the }(hj'hhhNhNubj)}(h**next_extension**h]hnext_extension}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh/ being 0. Currently, no extensions are defined.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMA hjhhubh)}(hDRM_I915_GEM_VM_DESTROY -h]hDRM_I915_GEM_VM_DESTROY -}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMD hjhhubh)}(hj?uh1j hjm(hhhj~(hMM ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhji(hhhj~(hMM ubah}(h]jd(ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj~(hMM hjf(hhubjU)}(hhh]h)}(h-Create GEM object from user allocated memory.h]h-Create GEM object from user allocated memory.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj(hhubah}(h]h ]h"]h$]h&]uh1jThjf(hhhj~(hMM ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj(jxj(jyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_gem_userptr { __u64 user_ptr; __u64 user_size; __u32 flags; #define I915_USERPTR_READ_ONLY 0x1; #define I915_USERPTR_PROBE 0x2; #define I915_USERPTR_UNSYNCHRONIZED 0x80000000; __u32 handle; }; **Members** ``user_ptr`` The pointer to the allocated memory. Needs to be aligned to PAGE_SIZE. ``user_size`` The size in bytes for the allocated memory. This will also become the object size. Needs to be aligned to PAGE_SIZE, and should be at least PAGE_SIZE, or larger. ``flags`` Supported flags: I915_USERPTR_READ_ONLY: Mark the object as readonly, this also means GPU access can only be readonly. This is only supported on HW which supports readonly access through the GTT. If the HW can't support readonly access, an error is returned. I915_USERPTR_PROBE: Probe the provided **user_ptr** range and validate that the **user_ptr** is indeed pointing to normal memory and that the range is also valid. For example if some garbage address is given to the kernel, then this should complain. Returns -EFAULT if the probe failed. Note that this doesn't populate the backing pages, and also doesn't guarantee that the object will remain valid when the object is eventually used. The kernel supports this feature if I915_PARAM_HAS_USERPTR_PROBE returns a non-zero value. I915_USERPTR_UNSYNCHRONIZED: NOT USED. Setting this flag will result in an error. ``handle`` Returned handle for the object. Object handles are nonzero.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh:}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj(ubj)}(hstruct drm_i915_gem_userptr { __u64 user_ptr; __u64 user_size; __u32 flags; #define I915_USERPTR_READ_ONLY 0x1; #define I915_USERPTR_PROBE 0x2; #define I915_USERPTR_UNSYNCHRONIZED 0x80000000; __u32 handle; };h]hstruct drm_i915_gem_userptr { __u64 user_ptr; __u64 user_size; __u32 flags; #define I915_USERPTR_READ_ONLY 0x1; #define I915_USERPTR_PROBE 0x2; #define I915_USERPTR_UNSYNCHRONIZED 0x80000000; __u32 handle; };}hj(sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj(ubh)}(h **Members**h]j)}(hj)h]hMembers}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj(ubj8)}(hhh](j=)}(hU``user_ptr`` The pointer to the allocated memory. Needs to be aligned to PAGE_SIZE. h](jC)}(h ``user_ptr``h]j)}(hj )h]huser_ptr}(hj")hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj)ubjT)}(hhh](h)}(h$The pointer to the allocated memory.h]h$The pointer to the allocated memory.}(hj9)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj6)ubh)}(h!Needs to be aligned to PAGE_SIZE.h]h!Needs to be aligned to PAGE_SIZE.}(hjH)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5)hM hj6)ubeh}(h]h ]h"]h$]h&]uh1jShj)ubeh}(h]h ]h"]h$]h&]uh1j<hj5)hM hj)ubj=)}(h``user_size`` The size in bytes for the allocated memory. This will also become the object size. Needs to be aligned to PAGE_SIZE, and should be at least PAGE_SIZE, or larger. h](jC)}(h ``user_size``h]j)}(hjh)h]h user_size}(hjj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf)ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjb)ubjT)}(hhh](h)}(hRThe size in bytes for the allocated memory. This will also become the object size.h]hRThe size in bytes for the allocated memory. This will also become the object size.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj~)ubh)}(hNNeeds to be aligned to PAGE_SIZE, and should be at least PAGE_SIZE, or larger.h]hNNeeds to be aligned to PAGE_SIZE, and should be at least PAGE_SIZE, or larger.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj~)ubeh}(h]h ]h"]h$]h&]uh1jShjb)ubeh}(h]h ]h"]h$]h&]uh1j<hj})hM hj)ubj=)}(hXv``flags`` Supported flags: I915_USERPTR_READ_ONLY: Mark the object as readonly, this also means GPU access can only be readonly. This is only supported on HW which supports readonly access through the GTT. If the HW can't support readonly access, an error is returned. I915_USERPTR_PROBE: Probe the provided **user_ptr** range and validate that the **user_ptr** is indeed pointing to normal memory and that the range is also valid. For example if some garbage address is given to the kernel, then this should complain. Returns -EFAULT if the probe failed. Note that this doesn't populate the backing pages, and also doesn't guarantee that the object will remain valid when the object is eventually used. The kernel supports this feature if I915_PARAM_HAS_USERPTR_PROBE returns a non-zero value. I915_USERPTR_UNSYNCHRONIZED: NOT USED. Setting this flag will result in an error. h](jC)}(h ``flags``h]j)}(hj)h]hflags}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj)ubjT)}(hhh](h)}(hSupported flags:h]hSupported flags:}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj)ubh)}(hI915_USERPTR_READ_ONLY:h]hI915_USERPTR_READ_ONLY:}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj)ubh)}(hMark the object as readonly, this also means GPU access can only be readonly. This is only supported on HW which supports readonly access through the GTT. If the HW can't support readonly access, an error is returned.h]hMark the object as readonly, this also means GPU access can only be readonly. This is only supported on HW which supports readonly access through the GTT. If the HW can’t support readonly access, an error is returned.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj)ubh)}(hI915_USERPTR_PROBE:h]hI915_USERPTR_PROBE:}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj)ubh)}(hProbe the provided **user_ptr** range and validate that the **user_ptr** is indeed pointing to normal memory and that the range is also valid. For example if some garbage address is given to the kernel, then this should complain.h](hProbe the provided }(hj*hhhNhNubj)}(h **user_ptr**h]huser_ptr}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh range and validate that the }(hj*hhhNhNubj)}(h **user_ptr**h]huser_ptr}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh is indeed pointing to normal memory and that the range is also valid. For example if some garbage address is given to the kernel, then this should complain.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj)ubh)}(h$Returns -EFAULT if the probe failed.h]h$Returns -EFAULT if the probe failed.}(hj9*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj)ubh)}(hNote that this doesn't populate the backing pages, and also doesn't guarantee that the object will remain valid when the object is eventually used.h]hNote that this doesn’t populate the backing pages, and also doesn’t guarantee that the object will remain valid when the object is eventually used.}(hjH*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj)ubh)}(hZThe kernel supports this feature if I915_PARAM_HAS_USERPTR_PROBE returns a non-zero value.h]hZThe kernel supports this feature if I915_PARAM_HAS_USERPTR_PROBE returns a non-zero value.}(hjW*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj)ubh)}(hI915_USERPTR_UNSYNCHRONIZED:h]hI915_USERPTR_UNSYNCHRONIZED:}(hjf*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj)ubh)}(h4NOT USED. Setting this flag will result in an error.h]h4NOT USED. Setting this flag will result in an error.}(hju*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hM hj)ubeh}(h]h ]h"]h$]h&]uh1jShj)ubeh}(h]h ]h"]h$]h&]uh1j<hj)hM hj)ubj=)}(hG``handle`` Returned handle for the object. Object handles are nonzero.h](jC)}(h ``handle``h]j)}(hj*h]hhandle}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj*ubjT)}(hhh](h)}(hReturned handle for the object.h]hReturned handle for the object.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj*ubh)}(hObject handles are nonzero.h]hObject handles are nonzero.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj*ubeh}(h]h ]h"]h$]h&]uh1jShj*ubeh}(h]h ]h"]h$]h&]uh1j<hj*hM hj)ubeh}(h]h ]h"]h$]h&]uh1j7hj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(h\Userptr objects have several restrictions on what ioctls can be used with the object handle.h]h\Userptr objects have several restrictions on what ioctls can be used with the object handle.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_i915_perf_oa_config (C struct)c.drm_i915_perf_oa_confighNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_perf_oa_configh]j)}(hstruct drm_i915_perf_oa_configh](j)}(hjh]hstruct}(hj%+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!+hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM ubj)}(h h]h }(hj3+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!+hhhj2+hM ubj!)}(hdrm_i915_perf_oa_configh]j')}(hj+h]hdrm_i915_perf_oa_config}(hjE+hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjA+ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj!+hhhj2+hM ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj+hhhj2+hM ubah}(h]j+ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj2+hM hj+hhubjU)}(hhh]h}(h]h ]h"]h$]h&]uh1jThj+hhhj2+hM ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjp+jxjp+jyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_perf_oa_config { char uuid[36]; __u32 n_mux_regs; __u32 n_boolean_regs; __u32 n_flex_regs; __u64 mux_regs_ptr; __u64 boolean_regs_ptr; __u64 flex_regs_ptr; }; **Members** ``uuid`` String formatted like "%\08x-%\04x-%\04x-%\04x-%\012x" ``n_mux_regs`` Number of mux regs in :c:type:`mux_regs_ptr`. ``n_boolean_regs`` Number of boolean regs in :c:type:`boolean_regs_ptr`. ``n_flex_regs`` Number of flex regs in :c:type:`flex_regs_ptr`. ``mux_regs_ptr`` Pointer to tuples of u32 values (register address, value) for mux registers. Expected length of buffer is (2 * sizeof(u32) * :c:type:`n_mux_regs`). ``boolean_regs_ptr`` Pointer to tuples of u32 values (register address, value) for mux registers. Expected length of buffer is (2 * sizeof(u32) * :c:type:`n_boolean_regs`). ``flex_regs_ptr`` Pointer to tuples of u32 values (register address, value) for mux registers. Expected length of buffer is (2 * sizeof(u32) * :c:type:`n_flex_regs`).h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj|+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx+ubh:}(hjx+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjt+ubj)}(hstruct drm_i915_perf_oa_config { char uuid[36]; __u32 n_mux_regs; __u32 n_boolean_regs; __u32 n_flex_regs; __u64 mux_regs_ptr; __u64 boolean_regs_ptr; __u64 flex_regs_ptr; };h]hstruct drm_i915_perf_oa_config { char uuid[36]; __u32 n_mux_regs; __u32 n_boolean_regs; __u32 n_flex_regs; __u64 mux_regs_ptr; __u64 boolean_regs_ptr; __u64 flex_regs_ptr; };}hj+sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjt+ubh)}(h **Members**h]j)}(hj+h]hMembers}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjt+ubj8)}(hhh](j=)}(h@``uuid`` String formatted like "%\08x-%\04x-%\04x-%\04x-%\012x" h](jC)}(h``uuid``h]j)}(hj+h]huuid}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj+ubjT)}(hhh]h)}(h6String formatted like "%\08x-%\04x-%\04x-%\04x-%\012x"h]h:String formatted like “%08x-%04x-%04x-%04x-%012x”}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hM hj+ubah}(h]h ]h"]h$]h&]uh1jShj+ubeh}(h]h ]h"]h$]h&]uh1j<hj+hM hj+ubj=)}(h=``n_mux_regs`` Number of mux regs in :c:type:`mux_regs_ptr`. h](jC)}(h``n_mux_regs``h]j)}(hj+h]h n_mux_regs}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj+ubjT)}(hhh]h)}(h-Number of mux regs in :c:type:`mux_regs_ptr`.h](hNumber of mux regs in }(hj,hhhNhNubh)}(h:c:type:`mux_regs_ptr`h]j)}(hj!,h]h mux_regs_ptr}(hj#,hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ mux_regs_ptruh1hhj,hM hj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hM hj,ubah}(h]h ]h"]h$]h&]uh1jShj+ubeh}(h]h ]h"]h$]h&]uh1j<hj,hM hj+ubj=)}(hI``n_boolean_regs`` Number of boolean regs in :c:type:`boolean_regs_ptr`. h](jC)}(h``n_boolean_regs``h]j)}(hjZ,h]hn_boolean_regs}(hj\,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX,ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjT,ubjT)}(hhh]h)}(h5Number of boolean regs in :c:type:`boolean_regs_ptr`.h](hNumber of boolean regs in }(hjs,hhhNhNubh)}(h:c:type:`boolean_regs_ptr`h]j)}(hj},h]hboolean_regs_ptr}(hj,hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj{,ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQboolean_regs_ptruh1hhjo,hM hjs,ubh.}(hjs,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjo,hM hjp,ubah}(h]h ]h"]h$]h&]uh1jShjT,ubeh}(h]h ]h"]h$]h&]uh1j<hjo,hM hj+ubj=)}(h@``n_flex_regs`` Number of flex regs in :c:type:`flex_regs_ptr`. h](jC)}(h``n_flex_regs``h]j)}(hj,h]h n_flex_regs}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj,ubjT)}(hhh]h)}(h/Number of flex regs in :c:type:`flex_regs_ptr`.h](hNumber of flex regs in }(hj,hhhNhNubh)}(h:c:type:`flex_regs_ptr`h]j)}(hj,h]h flex_regs_ptr}(hj,hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ flex_regs_ptruh1hhj,hM hj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hM hj,ubah}(h]h ]h"]h$]h&]uh1jShj,ubeh}(h]h ]h"]h$]h&]uh1j<hj,hM hj+ubj=)}(h``mux_regs_ptr`` Pointer to tuples of u32 values (register address, value) for mux registers. Expected length of buffer is (2 * sizeof(u32) * :c:type:`n_mux_regs`). h](jC)}(h``mux_regs_ptr``h]j)}(hj-h]h mux_regs_ptr}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj -ubjT)}(hhh]h)}(hPointer to tuples of u32 values (register address, value) for mux registers. Expected length of buffer is (2 * sizeof(u32) * :c:type:`n_mux_regs`).h](h~Pointer to tuples of u32 values (register address, value) for mux registers. Expected length of buffer is (2 * sizeof(u32) * }(hj+-hhhNhNubh)}(h:c:type:`n_mux_regs`h]j)}(hj5-h]h n_mux_regs}(hj7-hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj3-ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ n_mux_regsuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj+-ubh).}(hj+-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjR-hM hj(-ubah}(h]h ]h"]h$]h&]uh1jShj -ubeh}(h]h ]h"]h$]h&]uh1j<hj'-hM hj+ubj=)}(h``boolean_regs_ptr`` Pointer to tuples of u32 values (register address, value) for mux registers. Expected length of buffer is (2 * sizeof(u32) * :c:type:`n_boolean_regs`). h](jC)}(h``boolean_regs_ptr``h]j)}(hjo-h]hboolean_regs_ptr}(hjq-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm-ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hji-ubjT)}(hhh]h)}(hPointer to tuples of u32 values (register address, value) for mux registers. Expected length of buffer is (2 * sizeof(u32) * :c:type:`n_boolean_regs`).h](h~Pointer to tuples of u32 values (register address, value) for mux registers. Expected length of buffer is (2 * sizeof(u32) * }(hj-hhhNhNubh)}(h:c:type:`n_boolean_regs`h]j)}(hj-h]hn_boolean_regs}(hj-hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQn_boolean_regsuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj-ubh).}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hM hj-ubah}(h]h ]h"]h$]h&]uh1jShji-ubeh}(h]h ]h"]h$]h&]uh1j<hj-hM hj+ubj=)}(h``flex_regs_ptr`` Pointer to tuples of u32 values (register address, value) for mux registers. Expected length of buffer is (2 * sizeof(u32) * :c:type:`n_flex_regs`).h](jC)}(h``flex_regs_ptr``h]j)}(hj-h]h flex_regs_ptr}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj-ubjT)}(hhh]h)}(hPointer to tuples of u32 values (register address, value) for mux registers. Expected length of buffer is (2 * sizeof(u32) * :c:type:`n_flex_regs`).h](h~Pointer to tuples of u32 values (register address, value) for mux registers. Expected length of buffer is (2 * sizeof(u32) * }(hj-hhhNhNubh)}(h:c:type:`n_flex_regs`h]j)}(hj-h]h n_flex_regs}(hj-hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ n_flex_regsuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj-ubh).}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj .hM hj-ubah}(h]h ]h"]h$]h&]uh1jShj-ubeh}(h]h ]h"]h$]h&]uh1j<hj-hM hj+ubeh}(h]h ]h"]h$]h&]uh1j7hjt+ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hj2.h]h Description}(hj4.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0.ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(h?Structure to upload perf dynamic configuration into the kernel.h]h?Structure to upload perf dynamic configuration into the kernel.}(hjH.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_i915_query_item (C struct)c.drm_i915_query_itemhNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_query_itemh]j)}(hstruct drm_i915_query_itemh](j)}(hjh]hstruct}(hjp.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjl.hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM ubj)}(h h]h }(hj~.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl.hhhj}.hM ubj!)}(hdrm_i915_query_itemh]j')}(hjj.h]hdrm_i915_query_item}(hj.hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj.ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjl.hhhj}.hM ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjh.hhhj}.hM ubah}(h]jc.ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj}.hM hje.hhubjU)}(hhh]h)}(h.An individual query for the kernel to process.h]h.An individual query for the kernel to process.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj.hhubah}(h]h ]h"]h$]h&]uh1jThje.hhhj}.hM ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj.jxj.jyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_query_item { __u64 query_id; #define DRM_I915_QUERY_TOPOLOGY_INFO 1; #define DRM_I915_QUERY_ENGINE_INFO 2; #define DRM_I915_QUERY_PERF_CONFIG 3; #define DRM_I915_QUERY_MEMORY_REGIONS 4; #define DRM_I915_QUERY_HWCONFIG_BLOB 5; #define DRM_I915_QUERY_GEOMETRY_SUBSLICES 6; #define DRM_I915_QUERY_GUC_SUBMISSION_VERSION 7; __s32 length; __u32 flags; #define DRM_I915_QUERY_PERF_CONFIG_LIST 1; #define DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID 2; #define DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_ID 3; __u64 data_ptr; }; **Members** ``query_id`` The id for this query. Currently accepted query IDs are: - ``DRM_I915_QUERY_TOPOLOGY_INFO`` (see struct drm_i915_query_topology_info) - ``DRM_I915_QUERY_ENGINE_INFO`` (see struct drm_i915_engine_info) - ``DRM_I915_QUERY_PERF_CONFIG`` (see struct drm_i915_query_perf_config) - ``DRM_I915_QUERY_MEMORY_REGIONS`` (see struct drm_i915_query_memory_regions) - ``DRM_I915_QUERY_HWCONFIG_BLOB`` (see `GuC HWCONFIG blob uAPI`) - ``DRM_I915_QUERY_GEOMETRY_SUBSLICES`` (see struct drm_i915_query_topology_info) - ``DRM_I915_QUERY_GUC_SUBMISSION_VERSION`` (see struct drm_i915_query_guc_submission_version) ``length`` When set to zero by userspace, this is filled with the size of the data to be written at the **data_ptr** pointer. The kernel sets this value to a negative value to signal an error on a particular query item. ``flags`` When :c:type:`query_id` == ``DRM_I915_QUERY_TOPOLOGY_INFO``, must be 0. When :c:type:`query_id` == ``DRM_I915_QUERY_PERF_CONFIG``, must be one of the following: - ``DRM_I915_QUERY_PERF_CONFIG_LIST`` - ``DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID`` - ``DRM_I915_QUERY_PERF_CONFIG_FOR_UUID`` When :c:type:`query_id` == ``DRM_I915_QUERY_GEOMETRY_SUBSLICES`` must contain a struct i915_engine_class_instance that references a render engine. ``data_ptr`` Data will be written at the location pointed by **data_ptr** when the value of **length** matches the length of the data to be written by the kernel.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh:}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj.ubj)}(hXkstruct drm_i915_query_item { __u64 query_id; #define DRM_I915_QUERY_TOPOLOGY_INFO 1; #define DRM_I915_QUERY_ENGINE_INFO 2; #define DRM_I915_QUERY_PERF_CONFIG 3; #define DRM_I915_QUERY_MEMORY_REGIONS 4; #define DRM_I915_QUERY_HWCONFIG_BLOB 5; #define DRM_I915_QUERY_GEOMETRY_SUBSLICES 6; #define DRM_I915_QUERY_GUC_SUBMISSION_VERSION 7; __s32 length; __u32 flags; #define DRM_I915_QUERY_PERF_CONFIG_LIST 1; #define DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID 2; #define DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_ID 3; __u64 data_ptr; };h]hXkstruct drm_i915_query_item { __u64 query_id; #define DRM_I915_QUERY_TOPOLOGY_INFO 1; #define DRM_I915_QUERY_ENGINE_INFO 2; #define DRM_I915_QUERY_PERF_CONFIG 3; #define DRM_I915_QUERY_MEMORY_REGIONS 4; #define DRM_I915_QUERY_HWCONFIG_BLOB 5; #define DRM_I915_QUERY_GEOMETRY_SUBSLICES 6; #define DRM_I915_QUERY_GUC_SUBMISSION_VERSION 7; __s32 length; __u32 flags; #define DRM_I915_QUERY_PERF_CONFIG_LIST 1; #define DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID 2; #define DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_ID 3; __u64 data_ptr; };}hj.sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj.ubh)}(h **Members**h]j)}(hj/h]hMembers}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj.ubj8)}(hhh](j=)}(hXi``query_id`` The id for this query. Currently accepted query IDs are: - ``DRM_I915_QUERY_TOPOLOGY_INFO`` (see struct drm_i915_query_topology_info) - ``DRM_I915_QUERY_ENGINE_INFO`` (see struct drm_i915_engine_info) - ``DRM_I915_QUERY_PERF_CONFIG`` (see struct drm_i915_query_perf_config) - ``DRM_I915_QUERY_MEMORY_REGIONS`` (see struct drm_i915_query_memory_regions) - ``DRM_I915_QUERY_HWCONFIG_BLOB`` (see `GuC HWCONFIG blob uAPI`) - ``DRM_I915_QUERY_GEOMETRY_SUBSLICES`` (see struct drm_i915_query_topology_info) - ``DRM_I915_QUERY_GUC_SUBMISSION_VERSION`` (see struct drm_i915_query_guc_submission_version) h](jC)}(h ``query_id``h]j)}(hj/h]hquery_id}(hj!/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj/ubjT)}(hhh]j8)}(hhh]j=)}(hXUThe id for this query. Currently accepted query IDs are: - ``DRM_I915_QUERY_TOPOLOGY_INFO`` (see struct drm_i915_query_topology_info) - ``DRM_I915_QUERY_ENGINE_INFO`` (see struct drm_i915_engine_info) - ``DRM_I915_QUERY_PERF_CONFIG`` (see struct drm_i915_query_perf_config) - ``DRM_I915_QUERY_MEMORY_REGIONS`` (see struct drm_i915_query_memory_regions) - ``DRM_I915_QUERY_HWCONFIG_BLOB`` (see `GuC HWCONFIG blob uAPI`) - ``DRM_I915_QUERY_GEOMETRY_SUBSLICES`` (see struct drm_i915_query_topology_info) - ``DRM_I915_QUERY_GUC_SUBMISSION_VERSION`` (see struct drm_i915_query_guc_submission_version) h](jC)}(h9The id for this query. Currently accepted query IDs are:h]h9The id for this query. Currently accepted query IDs are:}(hj?/hhhNhNubah}(h]h ]h"]h$]h&]uh1jBhj4/hM hj;/ubjT)}(hhh]h)}(hhh](h)}(hJ``DRM_I915_QUERY_TOPOLOGY_INFO`` (see struct drm_i915_query_topology_info)h]h)}(hjU/h](j)}(h ``DRM_I915_QUERY_TOPOLOGY_INFO``h]hDRM_I915_QUERY_TOPOLOGY_INFO}(hjZ/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW/ubh* (see struct drm_i915_query_topology_info)}(hjW/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjS/ubah}(h]h ]h"]h$]h&]uh1hhjP/ubh)}(h@``DRM_I915_QUERY_ENGINE_INFO`` (see struct drm_i915_engine_info)h]h)}(hj{/h](j)}(h``DRM_I915_QUERY_ENGINE_INFO``h]hDRM_I915_QUERY_ENGINE_INFO}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}/ubh" (see struct drm_i915_engine_info)}(hj}/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjy/ubah}(h]h ]h"]h$]h&]uh1hhjP/ubh)}(hF``DRM_I915_QUERY_PERF_CONFIG`` (see struct drm_i915_query_perf_config)h]h)}(hj/h](j)}(h``DRM_I915_QUERY_PERF_CONFIG``h]hDRM_I915_QUERY_PERF_CONFIG}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh( (see struct drm_i915_query_perf_config)}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj/ubah}(h]h ]h"]h$]h&]uh1hhjP/ubh)}(hL``DRM_I915_QUERY_MEMORY_REGIONS`` (see struct drm_i915_query_memory_regions)h]h)}(hj/h](j)}(h!``DRM_I915_QUERY_MEMORY_REGIONS``h]hDRM_I915_QUERY_MEMORY_REGIONS}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh+ (see struct drm_i915_query_memory_regions)}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj/ubah}(h]h ]h"]h$]h&]uh1hhjP/ubh)}(h?``DRM_I915_QUERY_HWCONFIG_BLOB`` (see `GuC HWCONFIG blob uAPI`)h]h)}(hj/h](j)}(h ``DRM_I915_QUERY_HWCONFIG_BLOB``h]hDRM_I915_QUERY_HWCONFIG_BLOB}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh (see }(hj/hhhNhNubj )}(h`GuC HWCONFIG blob uAPI`h]hGuC HWCONFIG blob uAPI}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj/ubh)}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj/ubah}(h]h ]h"]h$]h&]uh1hhjP/ubh)}(hO``DRM_I915_QUERY_GEOMETRY_SUBSLICES`` (see struct drm_i915_query_topology_info)h]h)}(hj%0h](j)}(h%``DRM_I915_QUERY_GEOMETRY_SUBSLICES``h]h!DRM_I915_QUERY_GEOMETRY_SUBSLICES}(hj*0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'0ubh* (see struct drm_i915_query_topology_info)}(hj'0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj#0ubah}(h]h ]h"]h$]h&]uh1hhjP/ubh)}(h]``DRM_I915_QUERY_GUC_SUBMISSION_VERSION`` (see struct drm_i915_query_guc_submission_version) h]h)}(h\``DRM_I915_QUERY_GUC_SUBMISSION_VERSION`` (see struct drm_i915_query_guc_submission_version)h](j)}(h)``DRM_I915_QUERY_GUC_SUBMISSION_VERSION``h]h%DRM_I915_QUERY_GUC_SUBMISSION_VERSION}(hjQ0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM0ubh3 (see struct drm_i915_query_guc_submission_version)}(hjM0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj4/hM hjI0ubah}(h]h ]h"]h$]h&]uh1hhjP/ubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjr/hM hjM/ubah}(h]h ]h"]h$]h&]uh1jShj;/ubeh}(h]h ]h"]h$]h&]uh1j<hj4/hM hj8/ubah}(h]h ]h"]h$]h&]uh1j7hj5/ubah}(h]h ]h"]h$]h&]uh1jShj/ubeh}(h]h ]h"]h$]h&]uh1j<hj4/hM hj/ubj=)}(h``length`` When set to zero by userspace, this is filled with the size of the data to be written at the **data_ptr** pointer. The kernel sets this value to a negative value to signal an error on a particular query item. h](jC)}(h ``length``h]j)}(hj0h]hlength}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj0ubjT)}(hhh]h)}(hWhen set to zero by userspace, this is filled with the size of the data to be written at the **data_ptr** pointer. The kernel sets this value to a negative value to signal an error on a particular query item.h](h]When set to zero by userspace, this is filled with the size of the data to be written at the }(hj0hhhNhNubj)}(h **data_ptr**h]hdata_ptr}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubhg pointer. The kernel sets this value to a negative value to signal an error on a particular query item.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj0ubah}(h]h ]h"]h$]h&]uh1jShj0ubeh}(h]h ]h"]h$]h&]uh1j<hj0hM hj/ubj=)}(hX``flags`` When :c:type:`query_id` == ``DRM_I915_QUERY_TOPOLOGY_INFO``, must be 0. When :c:type:`query_id` == ``DRM_I915_QUERY_PERF_CONFIG``, must be one of the following: - ``DRM_I915_QUERY_PERF_CONFIG_LIST`` - ``DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID`` - ``DRM_I915_QUERY_PERF_CONFIG_FOR_UUID`` When :c:type:`query_id` == ``DRM_I915_QUERY_GEOMETRY_SUBSLICES`` must contain a struct i915_engine_class_instance that references a render engine. h](jC)}(h ``flags``h]j)}(hj0h]hflags}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj0ubjT)}(hhh](h)}(hGWhen :c:type:`query_id` == ``DRM_I915_QUERY_TOPOLOGY_INFO``, must be 0.h](hWhen }(hj0hhhNhNubh)}(h:c:type:`query_id`h]j)}(hj1h]hquery_id}(hj 1hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQquery_iduh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj0ubh == }(hj0hhhNhNubj)}(h ``DRM_I915_QUERY_TOPOLOGY_INFO``h]hDRM_I915_QUERY_TOPOLOGY_INFO}(hj*1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh , must be 0.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%1hM hj0ubh)}(hXWhen :c:type:`query_id` == ``DRM_I915_QUERY_PERF_CONFIG``, must be one of the following:h](hWhen }(hjB1hhhNhNubh)}(h:c:type:`query_id`h]j)}(hjL1h]hquery_id}(hjN1hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjJ1ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQquery_iduh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjB1ubh == }(hjB1hhhNhNubj)}(h``DRM_I915_QUERY_PERF_CONFIG``h]hDRM_I915_QUERY_PERF_CONFIG}(hjn1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB1ubh, must be one of the following:}(hjB1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhji1hM hj0ubj)}(h- ``DRM_I915_QUERY_PERF_CONFIG_LIST`` - ``DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID`` - ``DRM_I915_QUERY_PERF_CONFIG_FOR_UUID`` h]h)}(hhh](h)}(h#``DRM_I915_QUERY_PERF_CONFIG_LIST``h]h)}(hj1h]j)}(hj1h]hDRM_I915_QUERY_PERF_CONFIG_LIST}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj1ubah}(h]h ]h"]h$]h&]uh1hhj1ubh)}(h,``DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID``h]h)}(hj1h]j)}(hj1h]h(DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj1ubah}(h]h ]h"]h$]h&]uh1hhj1ubh)}(h(``DRM_I915_QUERY_PERF_CONFIG_FOR_UUID`` h]h)}(h'``DRM_I915_QUERY_PERF_CONFIG_FOR_UUID``h]j)}(hj1h]h#DRM_I915_QUERY_PERF_CONFIG_FOR_UUID}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj1ubah}(h]h ]h"]h$]h&]uh1hhj1ubeh}(h]h ]h"]h$]h&]jQ jR uh1hhj1hM hj1ubah}(h]h ]h"]h$]h&]uh1jhj1hM hj0ubh)}(hWhen :c:type:`query_id` == ``DRM_I915_QUERY_GEOMETRY_SUBSLICES`` must contain a struct i915_engine_class_instance that references a render engine.h](hWhen }(hj1hhhNhNubh)}(h:c:type:`query_id`h]j)}(hj2h]hquery_id}(hj 2hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQquery_iduh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj1ubh == }(hj1hhhNhNubj)}(h%``DRM_I915_QUERY_GEOMETRY_SUBSLICES``h]h!DRM_I915_QUERY_GEOMETRY_SUBSLICES}(hj)2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubhR must contain a struct i915_engine_class_instance that references a render engine.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$2hM hj0ubeh}(h]h ]h"]h$]h&]uh1jShj0ubeh}(h]h ]h"]h$]h&]uh1j<hj0hM hj/ubj=)}(h``data_ptr`` Data will be written at the location pointed by **data_ptr** when the value of **length** matches the length of the data to be written by the kernel.h](jC)}(h ``data_ptr``h]j)}(hjS2h]hdata_ptr}(hjU2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ2ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM) hjM2ubjT)}(hhh]h)}(hData will be written at the location pointed by **data_ptr** when the value of **length** matches the length of the data to be written by the kernel.h](h0Data will be written at the location pointed by }(hjl2hhhNhNubj)}(h **data_ptr**h]hdata_ptr}(hjt2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl2ubh when the value of }(hjl2hhhNhNubj)}(h **length**h]hlength}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl2ubh< matches the length of the data to be written by the kernel.}(hjl2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM( hji2ubah}(h]h ]h"]h$]h&]uh1jShjM2ubeh}(h]h ]h"]h$]h&]uh1j<hjh2hM) hj/ubeh}(h]h ]h"]h$]h&]uh1j7hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM- hjhhubh)}(hThe behaviour is determined by the **query_id**. Note that exactly what **data_ptr** is also depends on the specific **query_id**.h](h#The behaviour is determined by the }(hj2hhhNhNubj)}(h **query_id**h]hquery_id}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh. Note that exactly what }(hj2hhhNhNubj)}(h **data_ptr**h]hdata_ptr}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh! is also depends on the specific }(hj2hhhNhNubj)}(h **query_id**h]hquery_id}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_i915_query (C struct)c.drm_i915_queryhNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_queryh]j)}(hstruct drm_i915_queryh](j)}(hjh]hstruct}(hj.3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj*3hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM ubj)}(h h]h }(hj<3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*3hhhj;3hM ubj!)}(hdrm_i915_queryh]j')}(hj(3h]hdrm_i915_query}(hjN3hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjJ3ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj*3hhhj;3hM ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj&3hhhj;3hM ubah}(h]j!3ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj;3hM hj#3hhubjU)}(hhh]h)}(hISupply an array of struct drm_i915_query_item for the kernel to fill out.h]hISupply an array of struct drm_i915_query_item for the kernel to fill out.}(hjp3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM1 hjm3hhubah}(h]h ]h"]h$]h&]uh1jThj#3hhhj;3hM ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj3jxj3jyjzj{uh1jhhhjhNhNubj})}(hXl**Definition**:: struct drm_i915_query { __u32 num_items; __u32 flags; __u64 items_ptr; }; **Members** ``num_items`` The number of elements in the **items_ptr** array ``flags`` Unused for now. Must be cleared to zero. ``items_ptr`` Pointer to an array of struct drm_i915_query_item. The number of array elements is **num_items**.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh:}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM5 hj3ubj)}(hUstruct drm_i915_query { __u32 num_items; __u32 flags; __u64 items_ptr; };h]hUstruct drm_i915_query { __u32 num_items; __u32 flags; __u64 items_ptr; };}hj3sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM7 hj3ubh)}(h **Members**h]j)}(hj3h]hMembers}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM= hj3ubj8)}(hhh](j=)}(h@``num_items`` The number of elements in the **items_ptr** array h](jC)}(h ``num_items``h]j)}(hj3h]h num_items}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMI hj3ubjT)}(hhh]h)}(h1The number of elements in the **items_ptr** arrayh](hThe number of elements in the }(hj3hhhNhNubj)}(h **items_ptr**h]h items_ptr}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh array}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj3hMI hj3ubah}(h]h ]h"]h$]h&]uh1jShj3ubeh}(h]h ]h"]h$]h&]uh1j<hj3hMI hj3ubj=)}(h3``flags`` Unused for now. Must be cleared to zero. h](jC)}(h ``flags``h]j)}(hj(4h]hflags}(hj*4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&4ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMM hj"4ubjT)}(hhh]h)}(h(Unused for now. Must be cleared to zero.h]h(Unused for now. Must be cleared to zero.}(hjA4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=4hMM hj>4ubah}(h]h ]h"]h$]h&]uh1jShj"4ubeh}(h]h ]h"]h$]h&]uh1j<hj=4hMM hj3ubj=)}(ho``items_ptr`` Pointer to an array of struct drm_i915_query_item. The number of array elements is **num_items**.h](jC)}(h ``items_ptr``h]j)}(hja4h]h items_ptr}(hjc4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_4ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMR hj[4ubjT)}(hhh]h)}(haPointer to an array of struct drm_i915_query_item. The number of array elements is **num_items**.h](hSPointer to an array of struct drm_i915_query_item. The number of array elements is }(hjz4hhhNhNubj)}(h **num_items**h]h num_items}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz4ubh.}(hjz4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjv4hMR hjw4ubah}(h]h ]h"]h$]h&]uh1jShj[4ubeh}(h]h ]h"]h$]h&]uh1j<hjv4hMR hj3ubeh}(h]h ]h"]h$]h&]uh1j7hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMV hjhhubh)}(h`Note that this is generally a two step process for each struct drm_i915_query_item in the array:h]h`Note that this is generally a two step process for each struct drm_i915_query_item in the array:}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM2 hjhhubhenumerated_list)}(hhh](h)}(hX4Call the DRM_IOCTL_I915_QUERY, giving it our array of struct drm_i915_query_item, with :c:type:`drm_i915_query_item.length ` set to zero. The kernel will then fill in the size, in bytes, which tells userspace how memory it needs to allocate for the blob(say for an array of properties). h]h)}(hX3Call the DRM_IOCTL_I915_QUERY, giving it our array of struct drm_i915_query_item, with :c:type:`drm_i915_query_item.length ` set to zero. The kernel will then fill in the size, in bytes, which tells userspace how memory it needs to allocate for the blob(say for an array of properties).h](hWCall the DRM_IOCTL_I915_QUERY, giving it our array of struct drm_i915_query_item, with }(hj4hhhNhNubh)}(h::c:type:`drm_i915_query_item.length `h]j)}(hj4h]hdrm_i915_query_item.length}(hj4hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_query_itemuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM5 hj4ubh set to zero. The kernel will then fill in the size, in bytes, which tells userspace how memory it needs to allocate for the blob(say for an array of properties).}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj 5hM5 hj4ubah}(h]h ]h"]h$]h&]uh1hhj4ubh)}(hXPNext we call DRM_IOCTL_I915_QUERY again, this time with the :c:type:`drm_i915_query_item.data_ptr ` equal to our newly allocated blob. Note that the :c:type:`drm_i915_query_item.length ` should still be the same as what the kernel previously set. At this point the kernel can fill in the blob. h]h)}(hXONext we call DRM_IOCTL_I915_QUERY again, this time with the :c:type:`drm_i915_query_item.data_ptr ` equal to our newly allocated blob. Note that the :c:type:`drm_i915_query_item.length ` should still be the same as what the kernel previously set. At this point the kernel can fill in the blob.h](h`h]j)}(hj)5h]hdrm_i915_query_item.data_ptr}(hj+5hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj'5ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_query_itemuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM: hj5ubh2 equal to our newly allocated blob. Note that the }(hj5hhhNhNubh)}(h::c:type:`drm_i915_query_item.length `h]j)}(hjM5h]hdrm_i915_query_item.length}(hjO5hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjK5ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_query_itemuh1hhjF5hM: hj5ubhk should still be the same as what the kernel previously set. At this point the kernel can fill in the blob.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjF5hM: hj5ubah}(h]h ]h"]h$]h&]uh1hhj4ubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1j4hjhhhNhNubh)}(hNote that for some query items it can make sense for userspace to just pass in a buffer/blob equal to or larger than the required size. In this case only a single ioctl call is needed. For some smaller query items this can work quite well.h]hNote that for some query items it can make sense for userspace to just pass in a buffer/blob equal to or larger than the required size. In this case only a single ioctl call is needed. For some smaller query items this can work quite well.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM? hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_i915_query_topology_info (C struct)c.drm_i915_query_topology_infohNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_query_topology_infoh]j)}(h#struct drm_i915_query_topology_infoh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMG ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj5hMG ubj!)}(hdrm_i915_query_topology_infoh]j')}(hj5h]hdrm_i915_query_topology_info}(hj5hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj5ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj5hhhj5hMG ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj5hhhj5hMG ubah}(h]j5ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj5hMG hj5hhubjU)}(hhh]h}(h]h ]h"]h$]h&]uh1jThj5hhhj5hMG ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj5jxj5jyjzj{uh1jhhhjhNhNubj})}(hX? **Definition**:: struct drm_i915_query_topology_info { __u16 flags; __u16 max_slices; __u16 max_subslices; __u16 max_eus_per_subslice; __u16 subslice_offset; __u16 subslice_stride; __u16 eu_offset; __u16 eu_stride; __u8 data[]; }; **Members** ``flags`` Unused for now. Must be cleared to zero. ``max_slices`` The number of bits used to express the slice mask. ``max_subslices`` The number of bits used to express the subslice mask. ``max_eus_per_subslice`` The number of bits in the EU mask that correspond to a single subslice's EUs. ``subslice_offset`` Offset in data[] at which the subslice masks are stored. ``subslice_stride`` Stride at which each of the subslice masks for each slice are stored. ``eu_offset`` Offset in data[] at which the EU masks are stored. ``eu_stride`` Stride at which each of the EU masks for each subslice are stored. ``data`` Contains 3 pieces of information : - The slice mask with one bit per slice telling whether a slice is available. The availability of slice X can be queried with the following formula : .. code:: c (data[X / 8] >> (X % 8)) & 1 Starting with Xe_HP platforms, Intel hardware no longer has traditional slices so i915 will always report a single slice (hardcoded slicemask = 0x1) which contains all of the platform's subslices. I.e., the mask here does not reflect any of the newer hardware concepts such as "gslices" or "cslices" since userspace is capable of inferring those from the subslice mask. - The subslice mask for each slice with one bit per subslice telling whether a subslice is available. Starting with Gen12 we use the term "subslice" to refer to what the hardware documentation describes as a "dual-subslices." The availability of subslice Y in slice X can be queried with the following formula : .. code:: c (data[subslice_offset + X * subslice_stride + Y / 8] >> (Y % 8)) & 1 - The EU mask for each subslice in each slice, with one bit per EU telling whether an EU is available. The availability of EU Z in subslice Y in slice X can be queried with the following formula : .. code:: c (data[eu_offset + (X * max_subslices + Y) * eu_stride + Z / 8 ] >> (Z % 8)) & 1h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh:}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM^ hj5ubj)}(hstruct drm_i915_query_topology_info { __u16 flags; __u16 max_slices; __u16 max_subslices; __u16 max_eus_per_subslice; __u16 subslice_offset; __u16 subslice_stride; __u16 eu_offset; __u16 eu_stride; __u8 data[]; };h]hstruct drm_i915_query_topology_info { __u16 flags; __u16 max_slices; __u16 max_subslices; __u16 max_eus_per_subslice; __u16 subslice_offset; __u16 subslice_stride; __u16 eu_offset; __u16 eu_stride; __u8 data[]; };}hj6sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM` hj5ubh)}(h **Members**h]j)}(hj.6h]hMembers}(hj06hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,6ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMl hj5ubj8)}(hhh](j=)}(h3``flags`` Unused for now. Must be cleared to zero. h](jC)}(h ``flags``h]j)}(hjM6h]hflags}(hjO6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK6ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMb hjG6ubjT)}(hhh]h)}(h(Unused for now. Must be cleared to zero.h]h(Unused for now. Must be cleared to zero.}(hjf6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb6hMb hjc6ubah}(h]h ]h"]h$]h&]uh1jShjG6ubeh}(h]h ]h"]h$]h&]uh1j<hjb6hMb hjD6ubj=)}(hB``max_slices`` The number of bits used to express the slice mask. h](jC)}(h``max_slices``h]j)}(hj6h]h max_slices}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMi hj6ubjT)}(hhh]h)}(h2The number of bits used to express the slice mask.h]h2The number of bits used to express the slice mask.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMi hj6ubah}(h]h ]h"]h$]h&]uh1jShj6ubeh}(h]h ]h"]h$]h&]uh1j<hj6hMi hjD6ubj=)}(hH``max_subslices`` The number of bits used to express the subslice mask. h](jC)}(h``max_subslices``h]j)}(hj6h]h max_subslices}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMp hj6ubjT)}(hhh]h)}(h5The number of bits used to express the subslice mask.h]h5The number of bits used to express the subslice mask.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMp hj6ubah}(h]h ]h"]h$]h&]uh1jShj6ubeh}(h]h ]h"]h$]h&]uh1j<hj6hMp hjD6ubj=)}(hg``max_eus_per_subslice`` The number of bits in the EU mask that correspond to a single subslice's EUs. h](jC)}(h``max_eus_per_subslice``h]j)}(hj6h]hmax_eus_per_subslice}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMx hj6ubjT)}(hhh]h)}(hMThe number of bits in the EU mask that correspond to a single subslice's EUs.h]hOThe number of bits in the EU mask that correspond to a single subslice’s EUs.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMw hj7ubah}(h]h ]h"]h$]h&]uh1jShj6ubeh}(h]h ]h"]h$]h&]uh1j<hj 7hMx hjD6ubj=)}(hM``subslice_offset`` Offset in data[] at which the subslice masks are stored. h](jC)}(h``subslice_offset``h]j)}(hj27h]hsubslice_offset}(hj47hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj07ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj,7ubjT)}(hhh]h)}(h8Offset in data[] at which the subslice masks are stored.h]h8Offset in data[] at which the subslice masks are stored.}(hjK7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG7hM hjH7ubah}(h]h ]h"]h$]h&]uh1jShj,7ubeh}(h]h ]h"]h$]h&]uh1j<hjG7hM hjD6ubj=)}(hZ``subslice_stride`` Stride at which each of the subslice masks for each slice are stored. h](jC)}(h``subslice_stride``h]j)}(hjk7h]hsubslice_stride}(hjm7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji7ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hje7ubjT)}(hhh]h)}(hEStride at which each of the subslice masks for each slice are stored.h]hEStride at which each of the subslice masks for each slice are stored.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj7ubah}(h]h ]h"]h$]h&]uh1jShje7ubeh}(h]h ]h"]h$]h&]uh1j<hj7hM hjD6ubj=)}(hA``eu_offset`` Offset in data[] at which the EU masks are stored. h](jC)}(h ``eu_offset``h]j)}(hj7h]h eu_offset}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj7ubjT)}(hhh]h)}(h2Offset in data[] at which the EU masks are stored.h]h2Offset in data[] at which the EU masks are stored.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM hj7ubah}(h]h ]h"]h$]h&]uh1jShj7ubeh}(h]h ]h"]h$]h&]uh1j<hj7hM hjD6ubj=)}(hQ``eu_stride`` Stride at which each of the EU masks for each subslice are stored. h](jC)}(h ``eu_stride``h]j)}(hj7h]h eu_stride}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj7ubjT)}(hhh]h)}(hBStride at which each of the EU masks for each subslice are stored.h]hBStride at which each of the EU masks for each subslice are stored.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM hj7ubah}(h]h ]h"]h$]h&]uh1jShj7ubeh}(h]h ]h"]h$]h&]uh1j<hj7hM hjD6ubj=)}(hX```data`` Contains 3 pieces of information : - The slice mask with one bit per slice telling whether a slice is available. The availability of slice X can be queried with the following formula : .. code:: c (data[X / 8] >> (X % 8)) & 1 Starting with Xe_HP platforms, Intel hardware no longer has traditional slices so i915 will always report a single slice (hardcoded slicemask = 0x1) which contains all of the platform's subslices. I.e., the mask here does not reflect any of the newer hardware concepts such as "gslices" or "cslices" since userspace is capable of inferring those from the subslice mask. - The subslice mask for each slice with one bit per subslice telling whether a subslice is available. Starting with Gen12 we use the term "subslice" to refer to what the hardware documentation describes as a "dual-subslices." The availability of subslice Y in slice X can be queried with the following formula : .. code:: c (data[subslice_offset + X * subslice_stride + Y / 8] >> (Y % 8)) & 1 - The EU mask for each subslice in each slice, with one bit per EU telling whether an EU is available. The availability of EU Z in subslice Y in slice X can be queried with the following formula : .. code:: c (data[eu_offset + (X * max_subslices + Y) * eu_stride + Z / 8 ] >> (Z % 8)) & 1h](jC)}(h``data``h]j)}(hj8h]hdata}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj8ubjT)}(hhh](h)}(h"Contains 3 pieces of information :h]h"Contains 3 pieces of information :}(hj08hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj-8ubh)}(hhh](h)}(hX6The slice mask with one bit per slice telling whether a slice is available. The availability of slice X can be queried with the following formula : .. code:: c (data[X / 8] >> (X % 8)) & 1 Starting with Xe_HP platforms, Intel hardware no longer has traditional slices so i915 will always report a single slice (hardcoded slicemask = 0x1) which contains all of the platform's subslices. I.e., the mask here does not reflect any of the newer hardware concepts such as "gslices" or "cslices" since userspace is capable of inferring those from the subslice mask. h](h)}(hThe slice mask with one bit per slice telling whether a slice is available. The availability of slice X can be queried with the following formula :h]hThe slice mask with one bit per slice telling whether a slice is available. The availability of slice X can be queried with the following formula :}(hjF8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjB8ubj)}(h(data[X / 8] >> (X % 8)) & 1h]h(data[X / 8] >> (X % 8)) & 1}hjU8sbah}(h]h ]h"]h$]h&]forcehighlight_args}j>j?jPjquh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjB8ubh)}(hXrStarting with Xe_HP platforms, Intel hardware no longer has traditional slices so i915 will always report a single slice (hardcoded slicemask = 0x1) which contains all of the platform's subslices. I.e., the mask here does not reflect any of the newer hardware concepts such as "gslices" or "cslices" since userspace is capable of inferring those from the subslice mask.h]hX|Starting with Xe_HP platforms, Intel hardware no longer has traditional slices so i915 will always report a single slice (hardcoded slicemask = 0x1) which contains all of the platform’s subslices. I.e., the mask here does not reflect any of the newer hardware concepts such as “gslices” or “cslices” since userspace is capable of inferring those from the subslice mask.}(hjg8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjB8ubeh}(h]h ]h"]h$]h&]uh1hhj?8ubh)}(hXThe subslice mask for each slice with one bit per subslice telling whether a subslice is available. Starting with Gen12 we use the term "subslice" to refer to what the hardware documentation describes as a "dual-subslices." The availability of subslice Y in slice X can be queried with the following formula : .. code:: c (data[subslice_offset + X * subslice_stride + Y / 8] >> (Y % 8)) & 1 h](h)}(hX7The subslice mask for each slice with one bit per subslice telling whether a subslice is available. Starting with Gen12 we use the term "subslice" to refer to what the hardware documentation describes as a "dual-subslices." The availability of subslice Y in slice X can be queried with the following formula :h]hX?The subslice mask for each slice with one bit per subslice telling whether a subslice is available. Starting with Gen12 we use the term “subslice” to refer to what the hardware documentation describes as a “dual-subslices.” The availability of subslice Y in slice X can be queried with the following formula :}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj|8ubj)}(hD(data[subslice_offset + X * subslice_stride + Y / 8] >> (Y % 8)) & 1h]hD(data[subslice_offset + X * subslice_stride + Y / 8] >> (Y % 8)) & 1}hj8sbah}(h]h ]h"]h$]h&]forcehighlight_args}j>j?jPjquh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj|8ubeh}(h]h ]h"]h$]h&]uh1hhj?8ubh)}(hX9The EU mask for each subslice in each slice, with one bit per EU telling whether an EU is available. The availability of EU Z in subslice Y in slice X can be queried with the following formula : .. code:: c (data[eu_offset + (X * max_subslices + Y) * eu_stride + Z / 8 ] >> (Z % 8)) & 1h](h)}(hThe EU mask for each subslice in each slice, with one bit per EU telling whether an EU is available. The availability of EU Z in subslice Y in slice X can be queried with the following formula :h]hThe EU mask for each subslice in each slice, with one bit per EU telling whether an EU is available. The availability of EU Z in subslice Y in slice X can be queried with the following formula :}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj8ubj)}(h\(data[eu_offset + (X * max_subslices + Y) * eu_stride + Z / 8 ] >> (Z % 8)) & 1h]h\(data[eu_offset + (X * max_subslices + Y) * eu_stride + Z / 8 ] >> (Z % 8)) & 1}hj8sbah}(h]h ]h"]h$]h&]forcehighlight_args}j>j?jPjquh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj8ubeh}(h]h ]h"]h$]h&]uh1hhj?8ubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjT8hM hj-8ubeh}(h]h ]h"]h$]h&]uh1jShj8ubeh}(h]h ]h"]h$]h&]uh1j<hj,8hM hjD6ubeh}(h]h ]h"]h$]h&]uh1j7hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(hSDescribes slice/subslice/EU information queried by ``DRM_I915_QUERY_TOPOLOGY_INFO``h](h3Describes slice/subslice/EU information queried by }(hj 9hhhNhNubj)}(h ``DRM_I915_QUERY_TOPOLOGY_INFO``h]hDRM_I915_QUERY_TOPOLOGY_INFO}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 9ubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM[ hjhhubj )}(h.. _Engine Discovery uAPI:h]h}(h]h ]h"]h$]h&]hj uh1j hMhjhhhN referencedKubh)}(h**Engine Discovery uAPI**h]j)}(hj39h]hEngine Discovery uAPI}(hj59hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj19ubah}(h]j ah ]h"]engine discovery uapiah$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMa hjhhj3}jF9j&9sj5}j j&9sj09Kubh)}(hEngine discovery uAPI is a way of enumerating physical engines present in a GPU associated with an open i915 DRM file descriptor. This supersedes the old way of using `DRM_IOCTL_I915_GETPARAM` and engine identifiers like `I915_PARAM_HAS_BLT`.h](hEngine discovery uAPI is a way of enumerating physical engines present in a GPU associated with an open i915 DRM file descriptor. This supersedes the old way of using }(hjL9hhhNhNubj )}(h`DRM_IOCTL_I915_GETPARAM`h]hDRM_IOCTL_I915_GETPARAM}(hjT9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjL9ubh and engine identifiers like }(hjL9hhhNhNubj )}(h`I915_PARAM_HAS_BLT`h]hI915_PARAM_HAS_BLT}(hjf9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjL9ubh.}(hjL9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(hThe need for this interface came starting with Icelake and newer GPUs, which started to establish a pattern of having multiple engines of a same class, where not all instances were always completely functionally equivalent.h]hThe need for this interface came starting with Icelake and newer GPUs, which started to establish a pattern of having multiple engines of a same class, where not all instances were always completely functionally equivalent.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(hqEntry point for this uapi is `DRM_IOCTL_I915_QUERY` with the `DRM_I915_QUERY_ENGINE_INFO` as the queried item id.h](hEntry point for this uapi is }(hj9hhhNhNubj )}(h`DRM_IOCTL_I915_QUERY`h]hDRM_IOCTL_I915_QUERY}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh with the }(hj9hhhNhNubj )}(h`DRM_I915_QUERY_ENGINE_INFO`h]hDRM_I915_QUERY_ENGINE_INFO}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubh as the queried item id.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(h(Example for getting the list of engines:h]h(Example for getting the list of engines:}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubj)}(hXstruct drm_i915_query_engine_info *info; struct drm_i915_query_item item = { .query_id = DRM_I915_QUERY_ENGINE_INFO; }; struct drm_i915_query query = { .num_items = 1, .items_ptr = (uintptr_t)&item, }; int err, i; // First query the size of the blob we need, this needs to be large // enough to hold our array of engines. The kernel will fill out the // item.length for us, which is the number of bytes we need. // // Alternatively a large buffer can be allocated straightaway enabling // querying in one pass, in which case item.length should contain the // length of the provided buffer. err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query); if (err) ... info = calloc(1, item.length); // Now that we allocated the required number of bytes, we call the ioctl // again, this time with the data_ptr pointing to our newly allocated // blob, which the kernel can then populate with info on all engines. item.data_ptr = (uintptr_t)&info; err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query); if (err) ... // We can now access each engine in the array for (i = 0; i < info->num_engines; i++) { struct drm_i915_engine_info einfo = info->engines[i]; u16 class = einfo.engine.class; u16 instance = einfo.engine.instance; .... } free(info);h]hXstruct drm_i915_query_engine_info *info; struct drm_i915_query_item item = { .query_id = DRM_I915_QUERY_ENGINE_INFO; }; struct drm_i915_query query = { .num_items = 1, .items_ptr = (uintptr_t)&item, }; int err, i; // First query the size of the blob we need, this needs to be large // enough to hold our array of engines. The kernel will fill out the // item.length for us, which is the number of bytes we need. // // Alternatively a large buffer can be allocated straightaway enabling // querying in one pass, in which case item.length should contain the // length of the provided buffer. err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query); if (err) ... info = calloc(1, item.length); // Now that we allocated the required number of bytes, we call the ioctl // again, this time with the data_ptr pointing to our newly allocated // blob, which the kernel can then populate with info on all engines. item.data_ptr = (uintptr_t)&info; err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query); if (err) ... // We can now access each engine in the array for (i = 0; i < info->num_engines; i++) { struct drm_i915_engine_info einfo = info->engines[i]; u16 class = einfo.engine.class; u16 instance = einfo.engine.instance; .... } free(info);}hj9sbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(hEach of the enumerated engines, apart from being defined by its class and instance (see `struct i915_engine_class_instance`), also can have flags and capabilities defined as documented in i915_drm.h.h](hXEach of the enumerated engines, apart from being defined by its class and instance (see }(hj9hhhNhNubj )}(h#`struct i915_engine_class_instance`h]h!struct i915_engine_class_instance}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj9ubhL), also can have flags and capabilities defined as documented in i915_drm.h.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(h{For instance video engines which support HEVC encoding will have the `I915_VIDEO_CLASS_CAPABILITY_HEVC` capability bit set.h](hEFor instance video engines which support HEVC encoding will have the }(hj:hhhNhNubj )}(h"`I915_VIDEO_CLASS_CAPABILITY_HEVC`h]h I915_VIDEO_CLASS_CAPABILITY_HEVC}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj:ubh capability bit set.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(hEngine discovery only fully comes to its own when combined with the new way of addressing engines when submitting batch buffers using contexts with engine maps configured.h]hEngine discovery only fully comes to its own when combined with the new way of addressing engines when submitting batch buffers using contexts with engine maps configured.}(hj":hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_i915_engine_info (C struct)c.drm_i915_engine_infohNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_engine_infoh]j)}(hstruct drm_i915_engine_infoh](j)}(hjh]hstruct}(hjJ:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjF:hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM ubj)}(h h]h }(hjX:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF:hhhjW:hM ubj!)}(hdrm_i915_engine_infoh]j')}(hjD:h]hdrm_i915_engine_info}(hjj:hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjf:ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjF:hhhjW:hM ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjB:hhhjW:hM ubah}(h]j=:ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjW:hM hj?:hhubjU)}(hhh]h}(h]h ]h"]h$]h&]uh1jThj?:hhhjW:hM ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj:jxj:jyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_engine_info { struct i915_engine_class_instance engine; __u32 rsvd0; __u64 flags; #define I915_ENGINE_INFO_HAS_LOGICAL_INSTANCE (1 << 0); __u64 capabilities; #define I915_VIDEO_CLASS_CAPABILITY_HEVC (1 << 0); #define I915_VIDEO_AND_ENHANCE_CLASS_CAPABILITY_SFC (1 << 1); __u16 logical_instance; __u16 rsvd1[3]; __u64 rsvd2[3]; }; **Members** ``engine`` Engine class and instance. ``rsvd0`` Reserved field. ``flags`` Engine flags. ``capabilities`` Capabilities of this engine. ``logical_instance`` Logical instance of engine ``rsvd1`` Reserved fields. ``rsvd2`` Reserved fields.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh:}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj:ubj)}(hXstruct drm_i915_engine_info { struct i915_engine_class_instance engine; __u32 rsvd0; __u64 flags; #define I915_ENGINE_INFO_HAS_LOGICAL_INSTANCE (1 << 0); __u64 capabilities; #define I915_VIDEO_CLASS_CAPABILITY_HEVC (1 << 0); #define I915_VIDEO_AND_ENHANCE_CLASS_CAPABILITY_SFC (1 << 1); __u16 logical_instance; __u16 rsvd1[3]; __u64 rsvd2[3]; };h]hXstruct drm_i915_engine_info { struct i915_engine_class_instance engine; __u32 rsvd0; __u64 flags; #define I915_ENGINE_INFO_HAS_LOGICAL_INSTANCE (1 << 0); __u64 capabilities; #define I915_VIDEO_CLASS_CAPABILITY_HEVC (1 << 0); #define I915_VIDEO_AND_ENHANCE_CLASS_CAPABILITY_SFC (1 << 1); __u16 logical_instance; __u16 rsvd1[3]; __u64 rsvd2[3]; };}hj:sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj:ubh)}(h **Members**h]j)}(hj:h]hMembers}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj:ubj8)}(hhh](j=)}(h&``engine`` Engine class and instance. h](jC)}(h ``engine``h]j)}(hj:h]hengine}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj:ubjT)}(hhh]h)}(hEngine class and instance.h]hEngine class and instance.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM hj;ubah}(h]h ]h"]h$]h&]uh1jShj:ubeh}(h]h ]h"]h$]h&]uh1j<hj:hM hj:ubj=)}(h``rsvd0`` Reserved field. h](jC)}(h ``rsvd0``h]j)}(hj#;h]hrsvd0}(hj%;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!;ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj;ubjT)}(hhh]h)}(hReserved field.h]hReserved field.}(hj<;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8;hM hj9;ubah}(h]h ]h"]h$]h&]uh1jShj;ubeh}(h]h ]h"]h$]h&]uh1j<hj8;hM hj:ubj=)}(h``flags`` Engine flags. h](jC)}(h ``flags``h]j)}(hj\;h]hflags}(hj^;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ;ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjV;ubjT)}(hhh]h)}(h Engine flags.h]h Engine flags.}(hju;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq;hM hjr;ubah}(h]h ]h"]h$]h&]uh1jShjV;ubeh}(h]h ]h"]h$]h&]uh1j<hjq;hM hj:ubj=)}(h.``capabilities`` Capabilities of this engine. h](jC)}(h``capabilities``h]j)}(hj;h]h capabilities}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj;ubjT)}(hhh]h)}(hCapabilities of this engine.h]hCapabilities of this engine.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM hj;ubah}(h]h ]h"]h$]h&]uh1jShj;ubeh}(h]h ]h"]h$]h&]uh1j<hj;hM hj:ubj=)}(h0``logical_instance`` Logical instance of engine h](jC)}(h``logical_instance``h]j)}(hj;h]hlogical_instance}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM" hj;ubjT)}(hhh]h)}(hLogical instance of engineh]hLogical instance of engine}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM" hj;ubah}(h]h ]h"]h$]h&]uh1jShj;ubeh}(h]h ]h"]h$]h&]uh1j<hj;hM" hj:ubj=)}(h``rsvd1`` Reserved fields. h](jC)}(h ``rsvd1``h]j)}(hj<h]hrsvd1}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM% hj<ubjT)}(hhh]h)}(hReserved fields.h]hReserved fields.}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hM% hj<ubah}(h]h ]h"]h$]h&]uh1jShj<ubeh}(h]h ]h"]h$]h&]uh1j<hj<hM% hj:ubj=)}(h``rsvd2`` Reserved fields.h](jC)}(h ``rsvd2``h]j)}(hj@<h]hrsvd2}(hjB<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj><ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM& hj:<ubjT)}(hhh]h)}(hReserved fields.h]hReserved fields.}(hjY<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM' hjV<ubah}(h]h ]h"]h$]h&]uh1jShj:<ubeh}(h]h ]h"]h$]h&]uh1j<hjU<hM& hj:ubeh}(h]h ]h"]h$]h&]uh1j7hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hj<h]h Description}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM* hjhhubh)}(hADescribes one engine and its capabilities as known to the driver.h]hADescribes one engine and its capabilities as known to the driver.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_i915_query_engine_info (C struct)c.drm_i915_query_engine_infohNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_query_engine_infoh]j)}(h!struct drm_i915_query_engine_infoh](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj<hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhj<hM ubj!)}(hdrm_i915_query_engine_infoh]j')}(hj<h]hdrm_i915_query_engine_info}(hj<hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj<ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj<hhhj<hM ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj<hhhj<hM ubah}(h]j<ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj<hM hj<hhubjU)}(hhh]h}(h]h ]h"]h$]h&]uh1jThj<hhhj<hM ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj =jxj =jyjzj{uh1jhhhjhNhNubj})}(hX;**Definition**:: struct drm_i915_query_engine_info { __u32 num_engines; __u32 rsvd[3]; struct drm_i915_engine_info engines[]; }; **Members** ``num_engines`` Number of struct drm_i915_engine_info structs following. ``rsvd`` MBZ ``engines`` Marker for drm_i915_engine_info structures.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh:}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM/ hj=ubj)}(h{struct drm_i915_query_engine_info { __u32 num_engines; __u32 rsvd[3]; struct drm_i915_engine_info engines[]; };h]h{struct drm_i915_query_engine_info { __u32 num_engines; __u32 rsvd[3]; struct drm_i915_engine_info engines[]; };}hj1=sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM1 hj=ubh)}(h **Members**h]j)}(hjB=h]hMembers}(hjD=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@=ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM7 hj=ubj8)}(hhh](j=)}(hI``num_engines`` Number of struct drm_i915_engine_info structs following. h](jC)}(h``num_engines``h]j)}(hja=h]h num_engines}(hjc=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_=ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM2 hj[=ubjT)}(hhh]h)}(h8Number of struct drm_i915_engine_info structs following.h]h8Number of struct drm_i915_engine_info structs following.}(hjz=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv=hM2 hjw=ubah}(h]h ]h"]h$]h&]uh1jShj[=ubeh}(h]h ]h"]h$]h&]uh1j<hjv=hM2 hjX=ubj=)}(h ``rsvd`` MBZ h](jC)}(h``rsvd``h]j)}(hj=h]hrsvd}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM5 hj=ubjT)}(hhh]h)}(hMBZh]hMBZ}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM5 hj=ubah}(h]h ]h"]h$]h&]uh1jShj=ubeh}(h]h ]h"]h$]h&]uh1j<hj=hM5 hjX=ubj=)}(h7``engines`` Marker for drm_i915_engine_info structures.h](jC)}(h ``engines``h]j)}(hj=h]hengines}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM7 hj=ubjT)}(hhh]h)}(h+Marker for drm_i915_engine_info structures.h]h+Marker for drm_i915_engine_info structures.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM8 hj=ubah}(h]h ]h"]h$]h&]uh1jShj=ubeh}(h]h ]h"]h$]h&]uh1j<hj=hM7 hjX=ubeh}(h]h ]h"]h$]h&]uh1j7hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hj>h]h Description}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM; hjhhubh)}(h~Engine info query enumerates all engines known to the driver by filling in an array of struct drm_i915_engine_info structures.h]h~Engine info query enumerates all engines known to the driver by filling in an array of struct drm_i915_engine_info structures.}(hj,>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM, hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_i915_query_perf_config (C struct)c.drm_i915_query_perf_confighNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_query_perf_configh]j)}(h!struct drm_i915_query_perf_configh](j)}(hjh]hstruct}(hjT>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjP>hhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM2 ubj)}(h h]h }(hjb>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP>hhhja>hM2 ubj!)}(hdrm_i915_query_perf_configh]j')}(hjN>h]hdrm_i915_query_perf_config}(hjt>hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjp>ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjP>hhhja>hM2 ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjL>hhhja>hM2 ubah}(h]jG>ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhja>hM2 hjI>hhubjU)}(hhh]h}(h]h ]h"]h$]h&]uh1jThjI>hhhja>hM2 ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj>jxj>jyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_query_perf_config { union { __u64 n_configs; __u64 config; char uuid[36]; }; __u32 flags; __u8 data[]; }; **Members** ``{unnamed_union}`` anonymous ``n_configs`` When :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_LIST``, i915 sets this fields to the number of configurations available. ``config`` When :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_ID``, i915 will use the value in this field as configuration identifier to decide what data to write into config_ptr. ``uuid`` When :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID``, i915 will use the value in this field as configuration identifier to decide what data to write into config_ptr. String formatted like "``08x-````04x-````04x-````04x-````012x``" ``flags`` Unused for now. Must be cleared to zero. ``data`` When :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_LIST``, i915 will write an array of __u64 of configuration identifiers. When :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_DATA``, i915 will write a struct drm_i915_perf_oa_config. If the following fields of struct drm_i915_perf_oa_config are not set to 0, i915 will write into the associated pointers the values of submitted when the configuration was created : - :c:type:`drm_i915_perf_oa_config.n_mux_regs ` - :c:type:`drm_i915_perf_oa_config.n_boolean_regs ` - :c:type:`drm_i915_perf_oa_config.n_flex_regs `h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh:}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM@ hj>ubj)}(hstruct drm_i915_query_perf_config { union { __u64 n_configs; __u64 config; char uuid[36]; }; __u32 flags; __u8 data[]; };h]hstruct drm_i915_query_perf_config { union { __u64 n_configs; __u64 config; char uuid[36]; }; __u32 flags; __u8 data[]; };}hj>sbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMB hj>ubh)}(h **Members**h]j)}(hj>h]hMembers}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhML hj>ubj8)}(hhh](j=)}(h``{unnamed_union}`` anonymous h](jC)}(h``{unnamed_union}``h]j)}(hj>h]h{unnamed_union}}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhj>ubjT)}(hhh]h)}(h anonymoush]h anonymous}(hj ?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ?hKhj ?ubah}(h]h ]h"]h$]h&]uh1jShj>ubeh}(h]h ]h"]h$]h&]uh1j<hj ?hKhj>ubj=)}(h``n_configs`` When :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_LIST``, i915 sets this fields to the number of configurations available. h](jC)}(h ``n_configs``h]j)}(hj-?h]h n_configs}(hj/?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+?ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMG hj'?ubjT)}(hhh]h)}(hWhen :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_LIST``, i915 sets this fields to the number of configurations available.h](hWhen }(hjF?hhhNhNubh)}(h9:c:type:`drm_i915_query_item.flags `h]j)}(hjP?h]hdrm_i915_query_item.flags}(hjR?hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjN?ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_query_itemuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhME hjF?ubh == }(hjF?hhhNhNubj)}(h#``DRM_I915_QUERY_PERF_CONFIG_LIST``h]hDRM_I915_QUERY_PERF_CONFIG_LIST}(hjr?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF?ubhB, i915 sets this fields to the number of configurations available.}(hjF?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjm?hME hjC?ubah}(h]h ]h"]h$]h&]uh1jShj'?ubeh}(h]h ]h"]h$]h&]uh1j<hjB?hMG hj>ubj=)}(h``config`` When :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_ID``, i915 will use the value in this field as configuration identifier to decide what data to write into config_ptr. h](jC)}(h ``config``h]j)}(hj?h]hconfig}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMQ hj?ubjT)}(hhh]h)}(hWhen :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_ID``, i915 will use the value in this field as configuration identifier to decide what data to write into config_ptr.h](hWhen }(hj?hhhNhNubh)}(h9:c:type:`drm_i915_query_item.flags `h]j)}(hj?h]hdrm_i915_query_item.flags}(hj?hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_query_itemuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMN hj?ubh == }(hj?hhhNhNubj)}(h*``DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_ID``h]h&DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_ID}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubhq, i915 will use the value in this field as configuration identifier to decide what data to write into config_ptr.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?hMN hj?ubah}(h]h ]h"]h$]h&]uh1jShj?ubeh}(h]h ]h"]h$]h&]uh1j<hj?hMQ hj>ubj=)}(hX+``uuid`` When :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID``, i915 will use the value in this field as configuration identifier to decide what data to write into config_ptr. String formatted like "``08x-````04x-````04x-````04x-````012x``" h](jC)}(h``uuid``h]j)}(hj @h]huuid}(hj @hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj @ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM] hj@ubjT)}(hhh](h)}(hWhen :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID``, i915 will use the value in this field as configuration identifier to decide what data to write into config_ptr.h](hWhen }(hj$@hhhNhNubh)}(h9:c:type:`drm_i915_query_item.flags `h]j)}(hj.@h]hdrm_i915_query_item.flags}(hj0@hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj,@ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_query_itemuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMX hj$@ubh == }(hj$@hhhNhNubj)}(h,``DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID``h]h(DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID}(hjP@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$@ubhq, i915 will use the value in this field as configuration identifier to decide what data to write into config_ptr.}(hj$@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjK@hMX hj!@ubh)}(h@String formatted like "``08x-````04x-````04x-````04x-````012x``"h](hString formatted like “}(hjh@hhhNhNubj)}(h(``08x-````04x-````04x-````04x-````012x``h]h$08x-````04x-````04x-````04x-````012x}(hjp@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh@ubh”}(hjh@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj @hM] hj!@ubeh}(h]h ]h"]h$]h&]uh1jShj@ubeh}(h]h ]h"]h$]h&]uh1j<hj @hM] hj>ubj=)}(h3``flags`` Unused for now. Must be cleared to zero. h](jC)}(h ``flags``h]j)}(hj@h]hflags}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMe hj@ubjT)}(hhh]h)}(h(Unused for now. Must be cleared to zero.h]h(Unused for now. Must be cleared to zero.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMe hj@ubah}(h]h ]h"]h$]h&]uh1jShj@ubeh}(h]h ]h"]h$]h&]uh1j<hj@hMe hj>ubj=)}(hX``data`` When :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_LIST``, i915 will write an array of __u64 of configuration identifiers. When :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_DATA``, i915 will write a struct drm_i915_perf_oa_config. If the following fields of struct drm_i915_perf_oa_config are not set to 0, i915 will write into the associated pointers the values of submitted when the configuration was created : - :c:type:`drm_i915_perf_oa_config.n_mux_regs ` - :c:type:`drm_i915_perf_oa_config.n_boolean_regs ` - :c:type:`drm_i915_perf_oa_config.n_flex_regs `h](jC)}(h``data``h]j)}(hj@h]hdata}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMv hj@ubjT)}(hhh](h)}(hWhen :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_LIST``, i915 will write an array of __u64 of configuration identifiers.h](hWhen }(hj@hhhNhNubh)}(h9:c:type:`drm_i915_query_item.flags `h]j)}(hj@h]hdrm_i915_query_item.flags}(hj@hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_query_itemuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMl hj@ubh == }(hj@hhhNhNubj)}(h#``DRM_I915_QUERY_PERF_CONFIG_LIST``h]hDRM_I915_QUERY_PERF_CONFIG_LIST}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubhA, i915 will write an array of __u64 of configuration identifiers.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjAhMl hj@ubh)}(hXNWhen :c:type:`drm_i915_query_item.flags ` == ``DRM_I915_QUERY_PERF_CONFIG_DATA``, i915 will write a struct drm_i915_perf_oa_config. If the following fields of struct drm_i915_perf_oa_config are not set to 0, i915 will write into the associated pointers the values of submitted when the configuration was created :h](hWhen }(hj0AhhhNhNubh)}(h9:c:type:`drm_i915_query_item.flags `h]j)}(hj:Ah]hdrm_i915_query_item.flags}(hj` - :c:type:`drm_i915_perf_oa_config.n_boolean_regs ` - :c:type:`drm_i915_perf_oa_config.n_flex_regs `h]h)}(hhh](h)}(hF:c:type:`drm_i915_perf_oa_config.n_mux_regs `h]h)}(hj}Ah]h)}(hj}Ah]j)}(hj}Ah]h"drm_i915_perf_oa_config.n_mux_regs}(hjAhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_perf_oa_configuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMu hjAubah}(h]h ]h"]h$]h&]uh1hhjAhMu hj{Aubah}(h]h ]h"]h$]h&]uh1hhjxAubh)}(hJ:c:type:`drm_i915_perf_oa_config.n_boolean_regs `h]h)}(hjAh]h)}(hjAh]j)}(hjAh]h&drm_i915_perf_oa_config.n_boolean_regs}(hjAhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_perf_oa_configuh1hhj@hMv hjAubah}(h]h ]h"]h$]h&]uh1hhj@hMv hjAubah}(h]h ]h"]h$]h&]uh1hhjxAubh)}(hG:c:type:`drm_i915_perf_oa_config.n_flex_regs `h]h)}(hjAh]h)}(hjAh]j)}(hjAh]h#drm_i915_perf_oa_config.n_flex_regs}(hjAhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_perf_oa_configuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMw hjAubah}(h]h ]h"]h$]h&]uh1hhjBhMw hjAubah}(h]h ]h"]h$]h&]uh1hhjxAubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjAhMu hjtAubah}(h]h ]h"]h$]h&]uh1jhjAhMu hj@ubeh}(h]h ]h"]h$]h&]uh1jShj@ubeh}(h]h ]h"]h$]h&]uh1j<hj@hMv hj>ubeh}(h]h ]h"]h$]h&]uh1j7hj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hj7Bh]h Description}(hj9BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Bubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMz hjhhubh)}(hoData written by the kernel with query ``DRM_I915_QUERY_PERF_CONFIG`` and ``DRM_I915_QUERY_GEOMETRY_SUBSLICES``.h](h&Data written by the kernel with query }(hjMBhhhNhNubj)}(h``DRM_I915_QUERY_PERF_CONFIG``h]hDRM_I915_QUERY_PERF_CONFIG}(hjUBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMBubh and }(hjMBhhhNhNubj)}(h%``DRM_I915_QUERY_GEOMETRY_SUBSLICES``h]h!DRM_I915_QUERY_GEOMETRY_SUBSLICES}(hjgBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMBubh.}(hjMBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM= hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_i915_gem_memory_class (C enum)c.drm_i915_gem_memory_classhNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_gem_memory_classh]j)}(henum drm_i915_gem_memory_classh](j)}(hjh]henum}(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjBhhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMC ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhjBhMC ubj!)}(hdrm_i915_gem_memory_classh]j')}(hjBh]hdrm_i915_gem_memory_class}(hjBhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjBubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjBhhhjBhMC ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjBhhhjBhMC ubah}(h]jBah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjBhMC hjBhhubjU)}(hhh]h)}(hSupported memory classesh]hSupported memory classes}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM~ hjBhhubah}(h]h ]h"]h$]h&]uh1jThjBhhhjBhMC ubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjBjxjBjyjzj{uh1jhhhjhNhNubj})}(ho**Constants** ``I915_MEMORY_CLASS_SYSTEM`` System memory ``I915_MEMORY_CLASS_DEVICE`` Device local-memoryh](h)}(h **Constants**h]j)}(hjBh]h Constants}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjBubj8)}(hhh](j=)}(h+``I915_MEMORY_CLASS_SYSTEM`` System memory h](jC)}(h``I915_MEMORY_CLASS_SYSTEM``h]j)}(hjCh]hI915_MEMORY_CLASS_SYSTEM}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjCubjT)}(hhh]h)}(h System memoryh]h System memory}(hj5ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ChM hj2Cubah}(h]h ]h"]h$]h&]uh1jShjCubeh}(h]h ]h"]h$]h&]uh1j<hj1ChM hjCubj=)}(h0``I915_MEMORY_CLASS_DEVICE`` Device local-memoryh](jC)}(h``I915_MEMORY_CLASS_DEVICE``h]j)}(hjUCh]hI915_MEMORY_CLASS_DEVICE}(hjWChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSCubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjOCubjT)}(hhh]h)}(hDevice local-memoryh]hDevice local-memory}(hjnChhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjkCubah}(h]h ]h"]h$]h&]uh1jShjOCubeh}(h]h ]h"]h$]h&]uh1j<hjjChM hjCubeh}(h]h ]h"]h$]h&]uh1j7hjBubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j-drm_i915_gem_memory_class_instance (C struct)$c.drm_i915_gem_memory_class_instancehNtauh1jhjhhhNhNubj)}(hhh](j)}(h"drm_i915_gem_memory_class_instanceh]j)}(h)struct drm_i915_gem_memory_class_instanceh](j)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjChhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM ubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjChM ubj!)}(h"drm_i915_gem_memory_class_instanceh]j')}(hjCh]h"drm_i915_gem_memory_class_instance}(hjChhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjCubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjChhhjChM ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjChhhjChM ubah}(h]jCah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjChM hjChhubjU)}(hhh]h)}(h!Identify particular memory regionh]h!Identify particular memory region}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjChhubah}(h]h ]h"]h$]h&]uh1jThjChhhjChM ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj Djxj Djyjzj{uh1jhhhjhNhNubj})}(h**Definition**:: struct drm_i915_gem_memory_class_instance { __u16 memory_class; __u16 memory_instance; }; **Members** ``memory_class`` See enum drm_i915_gem_memory_class ``memory_instance`` Which instanceh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh:}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj Dubj)}(hastruct drm_i915_gem_memory_class_instance { __u16 memory_class; __u16 memory_instance; };h]hastruct drm_i915_gem_memory_class_instance { __u16 memory_class; __u16 memory_instance; };}hj.Dsbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj Dubh)}(h **Members**h]j)}(hj?Dh]hMembers}(hjADhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=Dubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj Dubj8)}(hhh](j=)}(h4``memory_class`` See enum drm_i915_gem_memory_class h](jC)}(h``memory_class``h]j)}(hj^Dh]h memory_class}(hj`DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Dubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjXDubjT)}(hhh]h)}(h"See enum drm_i915_gem_memory_classh]h"See enum drm_i915_gem_memory_class}(hjwDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsDhM hjtDubah}(h]h ]h"]h$]h&]uh1jShjXDubeh}(h]h ]h"]h$]h&]uh1j<hjsDhM hjUDubj=)}(h"``memory_instance`` Which instanceh](jC)}(h``memory_instance``h]j)}(hjDh]hmemory_instance}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjDubjT)}(hhh]h)}(hWhich instanceh]hWhich instance}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjDubah}(h]h ]h"]h$]h&]uh1jShjDubeh}(h]h ]h"]h$]h&]uh1j<hjDhM hjUDubeh}(h]h ]h"]h$]h&]uh1j7hj Dubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_i915_memory_region_info (C struct)c.drm_i915_memory_region_infohNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_memory_region_infoh]j)}(h"struct drm_i915_memory_region_infoh](j)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjDhhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhjDhM ubj!)}(hdrm_i915_memory_region_infoh]j')}(hjDh]hdrm_i915_memory_region_info}(hjEhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj Eubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjDhhhjDhM ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjDhhhjDhM ubah}(h]jDah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjDhM hjDhhubjU)}(hhh]h)}(h,Describes one region as known to the driver.h]h,Describes one region as known to the driver.}(hj3EhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj0Ehhubah}(h]h ]h"]h$]h&]uh1jThjDhhhjDhM ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjKEjxjKEjyjzj{uh1jhhhjhNhNubj})}(hX **Definition**:: struct drm_i915_memory_region_info { struct drm_i915_gem_memory_class_instance region; __u32 rsvd0; __u64 probed_size; __u64 unallocated_size; union { __u64 rsvd1[8]; struct { __u64 probed_cpu_visible_size; __u64 unallocated_cpu_visible_size; }; }; }; **Members** ``region`` The class:instance pair encoding ``rsvd0`` MBZ ``probed_size`` Memory probed by the driver Note that it should not be possible to ever encounter a zero value here, also note that no current region type will ever return -1 here. Although for future region types, this might be a possibility. The same applies to the other size fields. ``unallocated_size`` Estimate of memory remaining Requires CAP_PERFMON or CAP_SYS_ADMIN to get reliable accounting. Without this (or if this is an older kernel) the value here will always equal the **probed_size**. Note this is only currently tracked for I915_MEMORY_CLASS_DEVICE regions (for other types the value here will always equal the **probed_size**). ``{unnamed_union}`` anonymous ``rsvd1`` MBZ ``{unnamed_struct}`` anonymous ``probed_cpu_visible_size`` Memory probed by the driver that is CPU accessible. This will be always be <= **probed_size**, and the remainder (if there is any) will not be CPU accessible. On systems without small BAR, the **probed_size** will always equal the **probed_cpu_visible_size**, since all of it will be CPU accessible. Note this is only tracked for I915_MEMORY_CLASS_DEVICE regions (for other types the value here will always equal the **probed_size**). Note that if the value returned here is zero, then this must be an old kernel which lacks the relevant small-bar uAPI support (including I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS), but on such systems we should never actually end up with a small BAR configuration, assuming we are able to load the kernel module. Hence it should be safe to treat this the same as when **probed_cpu_visible_size** == **probed_size**. ``unallocated_cpu_visible_size`` Estimate of CPU visible memory remaining. Note this is only tracked for I915_MEMORY_CLASS_DEVICE regions (for other types the value here will always equal the **probed_cpu_visible_size**). Requires CAP_PERFMON or CAP_SYS_ADMIN to get reliable accounting. Without this the value here will always equal the **probed_cpu_visible_size**. Note this is only currently tracked for I915_MEMORY_CLASS_DEVICE regions (for other types the value here will also always equal the **probed_cpu_visible_size**). If this is an older kernel the value here will be zero, see also **probed_cpu_visible_size**.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjWEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSEubh:}(hjSEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjOEubj)}(hXCstruct drm_i915_memory_region_info { struct drm_i915_gem_memory_class_instance region; __u32 rsvd0; __u64 probed_size; __u64 unallocated_size; union { __u64 rsvd1[8]; struct { __u64 probed_cpu_visible_size; __u64 unallocated_cpu_visible_size; }; }; };h]hXCstruct drm_i915_memory_region_info { struct drm_i915_gem_memory_class_instance region; __u32 rsvd0; __u64 probed_size; __u64 unallocated_size; union { __u64 rsvd1[8]; struct { __u64 probed_cpu_visible_size; __u64 unallocated_cpu_visible_size; }; }; };}hjpEsbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjOEubh)}(h **Members**h]j)}(hjEh]hMembers}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjOEubj8)}(hhh](j=)}(h,``region`` The class:instance pair encoding h](jC)}(h ``region``h]j)}(hjEh]hregion}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjEubjT)}(hhh]h)}(h The class:instance pair encodingh]h The class:instance pair encoding}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhM hjEubah}(h]h ]h"]h$]h&]uh1jShjEubeh}(h]h ]h"]h$]h&]uh1j<hjEhM hjEubj=)}(h``rsvd0`` MBZ h](jC)}(h ``rsvd0``h]j)}(hjEh]hrsvd0}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjEubjT)}(hhh]h)}(hMBZh]hMBZ}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhM hjEubah}(h]h ]h"]h$]h&]uh1jShjEubeh}(h]h ]h"]h$]h&]uh1j<hjEhM hjEubj=)}(hX ``probed_size`` Memory probed by the driver Note that it should not be possible to ever encounter a zero value here, also note that no current region type will ever return -1 here. Although for future region types, this might be a possibility. The same applies to the other size fields. h](jC)}(h``probed_size``h]j)}(hjFh]h probed_size}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj FubjT)}(hhh](h)}(hMemory probed by the driverh]hMemory probed by the driver}(hj+FhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj(Fubh)}(hNote that it should not be possible to ever encounter a zero value here, also note that no current region type will ever return -1 here. Although for future region types, this might be a possibility. The same applies to the other size fields.h]hNote that it should not be possible to ever encounter a zero value here, also note that no current region type will ever return -1 here. Although for future region types, this might be a possibility. The same applies to the other size fields.}(hj:FhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj(Fubeh}(h]h ]h"]h$]h&]uh1jShj Fubeh}(h]h ]h"]h$]h&]uh1j<hj'FhM hjEubj=)}(hXi``unallocated_size`` Estimate of memory remaining Requires CAP_PERFMON or CAP_SYS_ADMIN to get reliable accounting. Without this (or if this is an older kernel) the value here will always equal the **probed_size**. Note this is only currently tracked for I915_MEMORY_CLASS_DEVICE regions (for other types the value here will always equal the **probed_size**). h](jC)}(h``unallocated_size``h]j)}(hj[Fh]hunallocated_size}(hj]FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYFubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjUFubjT)}(hhh](h)}(hEstimate of memory remainingh]hEstimate of memory remaining}(hjtFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjqFubh)}(hX5Requires CAP_PERFMON or CAP_SYS_ADMIN to get reliable accounting. Without this (or if this is an older kernel) the value here will always equal the **probed_size**. Note this is only currently tracked for I915_MEMORY_CLASS_DEVICE regions (for other types the value here will always equal the **probed_size**).h](hRequires CAP_PERFMON or CAP_SYS_ADMIN to get reliable accounting. Without this (or if this is an older kernel) the value here will always equal the }(hjFhhhNhNubj)}(h**probed_size**h]h probed_size}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh. Note this is only currently tracked for I915_MEMORY_CLASS_DEVICE regions (for other types the value here will always equal the }(hjFhhhNhNubj)}(h**probed_size**h]h probed_size}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh).}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjqFubeh}(h]h ]h"]h$]h&]uh1jShjUFubeh}(h]h ]h"]h$]h&]uh1j<hjpFhM hjEubj=)}(h``{unnamed_union}`` anonymous h](jC)}(h``{unnamed_union}``h]j)}(hjFh]h{unnamed_union}}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhKhjFubjT)}(hhh]h)}(h anonymoush]h anonymous}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhKhjFubah}(h]h ]h"]h$]h&]uh1jShjFubeh}(h]h ]h"]h$]h&]uh1j<hjFhKhjEubj=)}(h``rsvd1`` MBZ h](jC)}(h ``rsvd1``h]j)}(hjGh]hrsvd1}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjFubjT)}(hhh]h)}(hMBZh]hMBZ}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhM hjGubah}(h]h ]h"]h$]h&]uh1jShjFubeh}(h]h ]h"]h$]h&]uh1j<hjGhM hjEubj=)}(h``{unnamed_struct}`` anonymous h](jC)}(h``{unnamed_struct}``h]j)}(hj:Gh]h{unnamed_struct}}(hj`.h](hNote this is using both struct drm_i915_query_item and struct drm_i915_query. For this new query we are adding the new query id DRM_I915_QUERY_MEMORY_REGIONS at }(hj"IhhhNhNubh)}(h<:c:type:`drm_i915_query_item.query_id `h]j)}(hj,Ih]hdrm_i915_query_item.query_id}(hj.IhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj*Iubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_query_itemuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hj"Iubh.}(hj"IhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjIIhM hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_i915_query_memory_regions (C struct)c.drm_i915_query_memory_regionshNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_query_memory_regionsh]j)}(h$struct drm_i915_query_memory_regionsh](j)}(hjh]hstruct}(hjmIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjiIhhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM ubj)}(h h]h }(hj{IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiIhhhjzIhM ubj!)}(hdrm_i915_query_memory_regionsh]j')}(hjgIh]hdrm_i915_query_memory_regions}(hjIhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjIubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjiIhhhjzIhM ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjeIhhhjzIhM ubah}(h]j`Iah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjzIhM hjbIhhubjU)}(hhh]h}(h]h ]h"]h$]h&]uh1jThjbIhhhjzIhM ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjIjxjIjyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_query_memory_regions { __u32 num_regions; __u32 rsvd[3]; struct drm_i915_memory_region_info regions[]; }; **Members** ``num_regions`` Number of supported regions ``rsvd`` MBZ ``regions`` Info about each supported regionh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh:}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjIubj)}(hstruct drm_i915_query_memory_regions { __u32 num_regions; __u32 rsvd[3]; struct drm_i915_memory_region_info regions[]; };h]hstruct drm_i915_query_memory_regions { __u32 num_regions; __u32 rsvd[3]; struct drm_i915_memory_region_info regions[]; };}hjIsbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjIubh)}(h **Members**h]j)}(hjIh]hMembers}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjIubj8)}(hhh](j=)}(h,``num_regions`` Number of supported regions h](jC)}(h``num_regions``h]j)}(hj Jh]h num_regions}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Jubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjJubjT)}(hhh]h)}(hNumber of supported regionsh]hNumber of supported regions}(hj&JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"JhMhj#Jubah}(h]h ]h"]h$]h&]uh1jShjJubeh}(h]h ]h"]h$]h&]uh1j<hj"JhMhjJubj=)}(h ``rsvd`` MBZ h](jC)}(h``rsvd``h]j)}(hjFJh]hrsvd}(hjHJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDJubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM!hj@JubjT)}(hhh]h)}(hMBZh]hMBZ}(hj_JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[JhM!hj\Jubah}(h]h ]h"]h$]h&]uh1jShj@Jubeh}(h]h ]h"]h$]h&]uh1j<hj[JhM!hjJubj=)}(h,``regions`` Info about each supported regionh](jC)}(h ``regions``h]j)}(hjJh]hregions}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Jubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM#hjyJubjT)}(hhh]h)}(h Info about each supported regionh]h Info about each supported region}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM$hjJubah}(h]h ]h"]h$]h&]uh1jShjyJubeh}(h]h ]h"]h$]h&]uh1j<hjJhM#hjJubeh}(h]h ]h"]h$]h&]uh1j7hjIubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM'hjhhubh)}(hThe region info query enumerates all regions known to the driver by filling in an array of struct drm_i915_memory_region_info structures.h]hThe region info query enumerates all regions known to the driver by filling in an array of struct drm_i915_memory_region_info structures.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubh)}(h2Example for getting the list of supported regions:h]h2Example for getting the list of supported regions:}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubj)}(hXVstruct drm_i915_query_memory_regions *info; struct drm_i915_query_item item = { .query_id = DRM_I915_QUERY_MEMORY_REGIONS; }; struct drm_i915_query query = { .num_items = 1, .items_ptr = (uintptr_t)&item, }; int err, i; // First query the size of the blob we need, this needs to be large // enough to hold our array of regions. The kernel will fill out the // item.length for us, which is the number of bytes we need. err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query); if (err) ... info = calloc(1, item.length); // Now that we allocated the required number of bytes, we call the ioctl // again, this time with the data_ptr pointing to our newly allocated // blob, which the kernel can then populate with the all the region info. item.data_ptr = (uintptr_t)&info, err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query); if (err) ... // We can now access each region in the array for (i = 0; i < info->num_regions; i++) { struct drm_i915_memory_region_info mr = info->regions[i]; u16 class = mr.region.class; u16 instance = mr.region.instance; .... } free(info);h]hXVstruct drm_i915_query_memory_regions *info; struct drm_i915_query_item item = { .query_id = DRM_I915_QUERY_MEMORY_REGIONS; }; struct drm_i915_query query = { .num_items = 1, .items_ptr = (uintptr_t)&item, }; int err, i; // First query the size of the blob we need, this needs to be large // enough to hold our array of regions. The kernel will fill out the // item.length for us, which is the number of bytes we need. err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query); if (err) ... info = calloc(1, item.length); // Now that we allocated the required number of bytes, we call the ioctl // again, this time with the data_ptr pointing to our newly allocated // blob, which the kernel can then populate with the all the region info. item.data_ptr = (uintptr_t)&info, err = ioctl(fd, DRM_IOCTL_I915_QUERY, &query); if (err) ... // We can now access each region in the array for (i = 0; i < info->num_regions; i++) { struct drm_i915_memory_region_info mr = info->regions[i]; u16 class = mr.region.class; u16 instance = mr.region.instance; .... } free(info);}hjJsbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j0drm_i915_query_guc_submission_version (C struct)'c.drm_i915_query_guc_submission_versionhNtauh1jhjhhhNhNubj)}(hhh](j)}(h%drm_i915_query_guc_submission_versionh]j)}(h,struct drm_i915_query_guc_submission_versionh](j)}(hjh]hstruct}(hjKhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjKhhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMubj)}(h h]h }(hj-KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhj,KhMubj!)}(h%drm_i915_query_guc_submission_versionh]j')}(hjKh]h%drm_i915_query_guc_submission_version}(hj?KhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj;Kubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjKhhhj,KhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjKhhhj,KhMubah}(h]jKah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj,KhMhjKhhubjU)}(hhh]h)}(h&query GuC submission interface versionh]h&query GuC submission interface version}(hjaKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM(hj^Khhubah}(h]h ]h"]h$]h&]uh1jThjKhhhj,KhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjyKjxjyKjyjzj{uh1jhhhjhNhNubj})}(hX7**Definition**:: struct drm_i915_query_guc_submission_version { __u32 branch; __u32 major; __u32 minor; __u32 patch; }; **Members** ``branch`` Firmware branch version. ``major`` Firmware major version. ``minor`` Firmware minor version. ``patch`` Firmware patch version.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh:}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM,hj}Kubj)}(hvstruct drm_i915_query_guc_submission_version { __u32 branch; __u32 major; __u32 minor; __u32 patch; };h]hvstruct drm_i915_query_guc_submission_version { __u32 branch; __u32 major; __u32 minor; __u32 patch; };}hjKsbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM.hj}Kubh)}(h **Members**h]j)}(hjKh]hMembers}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM5hj}Kubj8)}(hhh](j=)}(h$``branch`` Firmware branch version. h](jC)}(h ``branch``h]j)}(hjKh]hbranch}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM,hjKubjT)}(hhh]h)}(hFirmware branch version.h]hFirmware branch version.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM,hjKubah}(h]h ]h"]h$]h&]uh1jShjKubeh}(h]h ]h"]h$]h&]uh1j<hjKhM,hjKubj=)}(h"``major`` Firmware major version. h](jC)}(h ``major``h]j)}(hjLh]hmajor}(hj LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM.hjLubjT)}(hhh]h)}(hFirmware major version.h]hFirmware major version.}(hj LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM.hjLubah}(h]h ]h"]h$]h&]uh1jShjLubeh}(h]h ]h"]h$]h&]uh1j<hjLhM.hjKubj=)}(h"``minor`` Firmware minor version. h](jC)}(h ``minor``h]j)}(hj@Lh]hminor}(hjBLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>Lubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM0hj:LubjT)}(hhh]h)}(hFirmware minor version.h]hFirmware minor version.}(hjYLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjULhM0hjVLubah}(h]h ]h"]h$]h&]uh1jShj:Lubeh}(h]h ]h"]h$]h&]uh1j<hjULhM0hjKubj=)}(h!``patch`` Firmware patch version.h](jC)}(h ``patch``h]j)}(hjyLh]hpatch}(hj{LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwLubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM1hjsLubjT)}(hhh]h)}(hFirmware patch version.h]hFirmware patch version.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM2hjLubah}(h]h ]h"]h$]h&]uh1jShjsLubeh}(h]h ]h"]h$]h&]uh1j<hjLhM1hjKubeh}(h]h ]h"]h$]h&]uh1j7hj}Kubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubj )}(h.. _GuC HWCONFIG blob uAPI:h]h}(h]h ]h"]h$]h&]hʌguc-hwconfig-blob-uapiuh1j hMmhjhhhNubh)}(h**GuC HWCONFIG blob uAPI**h]j)}(hjLh]hGuC HWCONFIG blob uAPI}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]jLah ]h"]guc hwconfig blob uapiah$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM8hjhhj3}jLjLsj5}jLjLsubh)}(hThe GuC produces a blob with information about the current device. i915 reads this blob from GuC and makes it available via this uAPI.h]hThe GuC produces a blob with information about the current device. i915 reads this blob from GuC and makes it available via this uAPI.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM6hjhhubh)}(h_The format and meaning of the blob content are documented in the Programmer's Reference Manual.h]haThe format and meaning of the blob content are documented in the Programmer’s Reference Manual.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM9hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_i915_gem_create_ext (C struct)c.drm_i915_gem_create_exthNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_gem_create_exth]j)}(hstruct drm_i915_gem_create_exth](j)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjMhhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM?ubj)}(h h]h }(hj%MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhhj$MhM?ubj!)}(hdrm_i915_gem_create_exth]j')}(hjMh]hdrm_i915_gem_create_ext}(hj7MhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj3Mubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjMhhhj$MhM?ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjMhhhj$MhM?ubah}(h]j Mah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj$MhM?hj MhhubjU)}(hhh]h)}(h]Existing gem_create behaviour, with added extension support using struct i915_user_extension.h]h]Existing gem_create behaviour, with added extension support using struct i915_user_extension.}(hjYMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM@hjVMhhubah}(h]h ]h"]h$]h&]uh1jThj Mhhhj$MhM?ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjqMjxjqMjyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_gem_create_ext { __u64 size; __u32 handle; #define I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS (1 << 0); __u32 flags; #define I915_GEM_CREATE_EXT_MEMORY_REGIONS 0; #define I915_GEM_CREATE_EXT_PROTECTED_CONTENT 1; #define I915_GEM_CREATE_EXT_SET_PAT 2; __u64 extensions; }; **Members** ``size`` Requested size for the object. The (page-aligned) allocated size for the object will be returned. On platforms like DG2/ATS the kernel will always use 64K or larger pages for I915_MEMORY_CLASS_DEVICE. The kernel also requires a minimum of 64K GTT alignment for such objects. NOTE: Previously the ABI here required a minimum GTT alignment of 2M on DG2/ATS, due to how the hardware implemented 64K GTT page support, where we had the following complications: 1) The entire PDE (which covers a 2MB virtual address range), must contain only 64K PTEs, i.e mixing 4K and 64K PTEs in the same PDE is forbidden by the hardware. 2) We still need to support 4K PTEs for I915_MEMORY_CLASS_SYSTEM objects. However on actual production HW this was completely changed to now allow setting a TLB hint at the PTE level (see PS64), which is a lot more flexible than the above. With this the 2M restriction was dropped where we now only require 64K. ``handle`` Returned handle for the object. Object handles are nonzero. ``flags`` Optional flags. Supported values: I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS - Signal to the kernel that the object will need to be accessed via the CPU. Only valid when placing objects in I915_MEMORY_CLASS_DEVICE, and only strictly required on configurations where some subset of the device memory is directly visible/mappable through the CPU (which we also call small BAR), like on some DG2+ systems. Note that this is quite undesirable, but due to various factors like the client CPU, BIOS etc it's something we can expect to see in the wild. See :c:type:`drm_i915_memory_region_info.probed_cpu_visible_size ` for how to determine if this system applies. Note that one of the placements MUST be I915_MEMORY_CLASS_SYSTEM, to ensure the kernel can always spill the allocation to system memory, if the object can't be allocated in the mappable part of I915_MEMORY_CLASS_DEVICE. Also note that since the kernel only supports flat-CCS on objects that can *only* be placed in I915_MEMORY_CLASS_DEVICE, we therefore don't support I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS together with flat-CCS. Without this hint, the kernel will assume that non-mappable I915_MEMORY_CLASS_DEVICE is preferred for this object. Note that the kernel can still migrate the object to the mappable part, as a last resort, if userspace ever CPU faults this object, but this might be expensive, and so ideally should be avoided. On older kernels which lack the relevant small-bar uAPI support (see also :c:type:`drm_i915_memory_region_info.probed_cpu_visible_size `), usage of the flag will result in an error, but it should NEVER be possible to end up with a small BAR configuration, assuming we can also successfully load the i915 kernel module. In such cases the entire I915_MEMORY_CLASS_DEVICE region will be CPU accessible, and as such there are zero restrictions on where the object can be placed. ``extensions`` The chain of extensions to apply to this object. This will be useful in the future when we need to support several different extensions, and we need to apply more than one when creating the object. See struct i915_user_extension. If we don't supply any extensions then we get the same old gem_create behaviour. For I915_GEM_CREATE_EXT_MEMORY_REGIONS usage see struct drm_i915_gem_create_ext_memory_regions. For I915_GEM_CREATE_EXT_PROTECTED_CONTENT usage see struct drm_i915_gem_create_ext_protected_content. For I915_GEM_CREATE_EXT_SET_PAT usage see struct drm_i915_gem_create_ext_set_pat.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj}MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyMubh:}(hjyMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMDhjuMubj)}(hX.struct drm_i915_gem_create_ext { __u64 size; __u32 handle; #define I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS (1 << 0); __u32 flags; #define I915_GEM_CREATE_EXT_MEMORY_REGIONS 0; #define I915_GEM_CREATE_EXT_PROTECTED_CONTENT 1; #define I915_GEM_CREATE_EXT_SET_PAT 2; __u64 extensions; };h]hX.struct drm_i915_gem_create_ext { __u64 size; __u32 handle; #define I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS (1 << 0); __u32 flags; #define I915_GEM_CREATE_EXT_MEMORY_REGIONS 0; #define I915_GEM_CREATE_EXT_PROTECTED_CONTENT 1; #define I915_GEM_CREATE_EXT_SET_PAT 2; __u64 extensions; };}hjMsbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMFhjuMubh)}(h **Members**h]j)}(hjMh]hMembers}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMQhjuMubj8)}(hhh](j=)}(hX``size`` Requested size for the object. The (page-aligned) allocated size for the object will be returned. On platforms like DG2/ATS the kernel will always use 64K or larger pages for I915_MEMORY_CLASS_DEVICE. The kernel also requires a minimum of 64K GTT alignment for such objects. NOTE: Previously the ABI here required a minimum GTT alignment of 2M on DG2/ATS, due to how the hardware implemented 64K GTT page support, where we had the following complications: 1) The entire PDE (which covers a 2MB virtual address range), must contain only 64K PTEs, i.e mixing 4K and 64K PTEs in the same PDE is forbidden by the hardware. 2) We still need to support 4K PTEs for I915_MEMORY_CLASS_SYSTEM objects. However on actual production HW this was completely changed to now allow setting a TLB hint at the PTE level (see PS64), which is a lot more flexible than the above. With this the 2M restriction was dropped where we now only require 64K. h](jC)}(h``size``h]j)}(hjMh]hsize}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMbhjMubjT)}(hhh](h)}(hRequested size for the object.h]hRequested size for the object.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMLhjMubh)}(hBThe (page-aligned) allocated size for the object will be returned.h]hBThe (page-aligned) allocated size for the object will be returned.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMNhjMubh)}(hOn platforms like DG2/ATS the kernel will always use 64K or larger pages for I915_MEMORY_CLASS_DEVICE. The kernel also requires a minimum of 64K GTT alignment for such objects.h]hOn platforms like DG2/ATS the kernel will always use 64K or larger pages for I915_MEMORY_CLASS_DEVICE. The kernel also requires a minimum of 64K GTT alignment for such objects.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMPhjMubh)}(hNOTE: Previously the ABI here required a minimum GTT alignment of 2M on DG2/ATS, due to how the hardware implemented 64K GTT page support, where we had the following complications:h]hNOTE: Previously the ABI here required a minimum GTT alignment of 2M on DG2/ATS, due to how the hardware implemented 64K GTT page support, where we had the following complications:}(hj NhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMThjMubj)}(h1) The entire PDE (which covers a 2MB virtual address range), must contain only 64K PTEs, i.e mixing 4K and 64K PTEs in the same PDE is forbidden by the hardware. 2) We still need to support 4K PTEs for I915_MEMORY_CLASS_SYSTEM objects. h](h)}(h1) The entire PDE (which covers a 2MB virtual address range), must contain only 64K PTEs, i.e mixing 4K and 64K PTEs in the same PDE is forbidden by the hardware.h]h1) The entire PDE (which covers a 2MB virtual address range), must contain only 64K PTEs, i.e mixing 4K and 64K PTEs in the same PDE is forbidden by the hardware.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMXhjNubh)}(hI2) We still need to support 4K PTEs for I915_MEMORY_CLASS_SYSTEM objects.h]hI2) We still need to support 4K PTEs for I915_MEMORY_CLASS_SYSTEM objects.}(hj.NhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM\hjNubeh}(h]h ]h"]h$]h&]uh1jhj-NhMXhjMubh)}(hHowever on actual production HW this was completely changed to now allow setting a TLB hint at the PTE level (see PS64), which is a lot more flexible than the above. With this the 2M restriction was dropped where we now only require 64K.h]hHowever on actual production HW this was completely changed to now allow setting a TLB hint at the PTE level (see PS64), which is a lot more flexible than the above. With this the 2M restriction was dropped where we now only require 64K.}(hjCNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM_hjMubeh}(h]h ]h"]h$]h&]uh1jShjMubeh}(h]h ]h"]h$]h&]uh1j<hjMhMbhjMubj=)}(hH``handle`` Returned handle for the object. Object handles are nonzero. h](jC)}(h ``handle``h]j)}(hjdNh]hhandle}(hjfNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbNubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMihj^NubjT)}(hhh](h)}(hReturned handle for the object.h]hReturned handle for the object.}(hj}NhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMghjzNubh)}(hObject handles are nonzero.h]hObject handles are nonzero.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyNhMihjzNubeh}(h]h ]h"]h$]h&]uh1jShj^Nubeh}(h]h ]h"]h$]h&]uh1j<hjyNhMihjMubj=)}(hX``flags`` Optional flags. Supported values: I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS - Signal to the kernel that the object will need to be accessed via the CPU. Only valid when placing objects in I915_MEMORY_CLASS_DEVICE, and only strictly required on configurations where some subset of the device memory is directly visible/mappable through the CPU (which we also call small BAR), like on some DG2+ systems. Note that this is quite undesirable, but due to various factors like the client CPU, BIOS etc it's something we can expect to see in the wild. See :c:type:`drm_i915_memory_region_info.probed_cpu_visible_size ` for how to determine if this system applies. Note that one of the placements MUST be I915_MEMORY_CLASS_SYSTEM, to ensure the kernel can always spill the allocation to system memory, if the object can't be allocated in the mappable part of I915_MEMORY_CLASS_DEVICE. Also note that since the kernel only supports flat-CCS on objects that can *only* be placed in I915_MEMORY_CLASS_DEVICE, we therefore don't support I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS together with flat-CCS. Without this hint, the kernel will assume that non-mappable I915_MEMORY_CLASS_DEVICE is preferred for this object. Note that the kernel can still migrate the object to the mappable part, as a last resort, if userspace ever CPU faults this object, but this might be expensive, and so ideally should be avoided. On older kernels which lack the relevant small-bar uAPI support (see also :c:type:`drm_i915_memory_region_info.probed_cpu_visible_size `), usage of the flag will result in an error, but it should NEVER be possible to end up with a small BAR configuration, assuming we can also successfully load the i915 kernel module. In such cases the entire I915_MEMORY_CLASS_DEVICE region will be CPU accessible, and as such there are zero restrictions on where the object can be placed. h](jC)}(h ``flags``h]j)}(hjNh]hflags}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjNubjT)}(hhh](h)}(hOptional flags.h]hOptional flags.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMnhjNubh)}(hSupported values:h]hSupported values:}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMphjNubh)}(hvI915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS - Signal to the kernel that the object will need to be accessed via the CPU.h]hvI915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS - Signal to the kernel that the object will need to be accessed via the CPU.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMrhjNubh)}(hXOnly valid when placing objects in I915_MEMORY_CLASS_DEVICE, and only strictly required on configurations where some subset of the device memory is directly visible/mappable through the CPU (which we also call small BAR), like on some DG2+ systems. Note that this is quite undesirable, but due to various factors like the client CPU, BIOS etc it's something we can expect to see in the wild. See :c:type:`drm_i915_memory_region_info.probed_cpu_visible_size ` for how to determine if this system applies.h](hXOnly valid when placing objects in I915_MEMORY_CLASS_DEVICE, and only strictly required on configurations where some subset of the device memory is directly visible/mappable through the CPU (which we also call small BAR), like on some DG2+ systems. Note that this is quite undesirable, but due to various factors like the client CPU, BIOS etc it’s something we can expect to see in the wild. See }(hjNhhhNhNubh)}(h[:c:type:`drm_i915_memory_region_info.probed_cpu_visible_size `h]j)}(hjNh]h3drm_i915_memory_region_info.probed_cpu_visible_size}(hjNhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_memory_region_infouh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMuhjNubh- for how to determine if this system applies.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjOhMuhjNubh)}(hNote that one of the placements MUST be I915_MEMORY_CLASS_SYSTEM, to ensure the kernel can always spill the allocation to system memory, if the object can't be allocated in the mappable part of I915_MEMORY_CLASS_DEVICE.h]hNote that one of the placements MUST be I915_MEMORY_CLASS_SYSTEM, to ensure the kernel can always spill the allocation to system memory, if the object can’t be allocated in the mappable part of I915_MEMORY_CLASS_DEVICE.}(hj$OhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM~hjNubh)}(hAlso note that since the kernel only supports flat-CCS on objects that can *only* be placed in I915_MEMORY_CLASS_DEVICE, we therefore don't support I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS together with flat-CCS.h](hKAlso note that since the kernel only supports flat-CCS on objects that can }(hj3OhhhNhNubhemphasis)}(h*only*h]honly}(hj=OhhhNhNubah}(h]h ]h"]h$]h&]uh1j;Ohj3Oubh be placed in I915_MEMORY_CLASS_DEVICE, we therefore don’t support I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS together with flat-CCS.}(hj3OhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjNubh)}(hX5Without this hint, the kernel will assume that non-mappable I915_MEMORY_CLASS_DEVICE is preferred for this object. Note that the kernel can still migrate the object to the mappable part, as a last resort, if userspace ever CPU faults this object, but this might be expensive, and so ideally should be avoided.h]hX5Without this hint, the kernel will assume that non-mappable I915_MEMORY_CLASS_DEVICE is preferred for this object. Note that the kernel can still migrate the object to the mappable part, as a last resort, if userspace ever CPU faults this object, but this might be expensive, and so ideally should be avoided.}(hjVOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjNubh)}(hXOn older kernels which lack the relevant small-bar uAPI support (see also :c:type:`drm_i915_memory_region_info.probed_cpu_visible_size `), usage of the flag will result in an error, but it should NEVER be possible to end up with a small BAR configuration, assuming we can also successfully load the i915 kernel module. In such cases the entire I915_MEMORY_CLASS_DEVICE region will be CPU accessible, and as such there are zero restrictions on where the object can be placed.h](hJOn older kernels which lack the relevant small-bar uAPI support (see also }(hjeOhhhNhNubh)}(h[:c:type:`drm_i915_memory_region_info.probed_cpu_visible_size `h]j)}(hjoOh]h3drm_i915_memory_region_info.probed_cpu_visible_size}(hjqOhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjmOubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_memory_region_infouh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjeOubhXR), usage of the flag will result in an error, but it should NEVER be possible to end up with a small BAR configuration, assuming we can also successfully load the i915 kernel module. In such cases the entire I915_MEMORY_CLASS_DEVICE region will be CPU accessible, and as such there are zero restrictions on where the object can be placed.}(hjeOhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjOhMhjNubeh}(h]h ]h"]h$]h&]uh1jShjNubeh}(h]h ]h"]h$]h&]uh1j<hjNhMhjMubj=)}(hXb``extensions`` The chain of extensions to apply to this object. This will be useful in the future when we need to support several different extensions, and we need to apply more than one when creating the object. See struct i915_user_extension. If we don't supply any extensions then we get the same old gem_create behaviour. For I915_GEM_CREATE_EXT_MEMORY_REGIONS usage see struct drm_i915_gem_create_ext_memory_regions. For I915_GEM_CREATE_EXT_PROTECTED_CONTENT usage see struct drm_i915_gem_create_ext_protected_content. For I915_GEM_CREATE_EXT_SET_PAT usage see struct drm_i915_gem_create_ext_set_pat.h](jC)}(h``extensions``h]j)}(hjOh]h extensions}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjOubjT)}(hhh](h)}(h0The chain of extensions to apply to this object.h]h0The chain of extensions to apply to this object.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjOubh)}(hThis will be useful in the future when we need to support several different extensions, and we need to apply more than one when creating the object. See struct i915_user_extension.h]hThis will be useful in the future when we need to support several different extensions, and we need to apply more than one when creating the object. See struct i915_user_extension.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjOubh)}(hPIf we don't supply any extensions then we get the same old gem_create behaviour.h]hRIf we don’t supply any extensions then we get the same old gem_create behaviour.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjOubh)}(h_For I915_GEM_CREATE_EXT_MEMORY_REGIONS usage see struct drm_i915_gem_create_ext_memory_regions.h]h_For I915_GEM_CREATE_EXT_MEMORY_REGIONS usage see struct drm_i915_gem_create_ext_memory_regions.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjOubh)}(heFor I915_GEM_CREATE_EXT_PROTECTED_CONTENT usage see struct drm_i915_gem_create_ext_protected_content.h]heFor I915_GEM_CREATE_EXT_PROTECTED_CONTENT usage see struct drm_i915_gem_create_ext_protected_content.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjOubh)}(hQFor I915_GEM_CREATE_EXT_SET_PAT usage see struct drm_i915_gem_create_ext_set_pat.h]hQFor I915_GEM_CREATE_EXT_SET_PAT usage see struct drm_i915_gem_create_ext_set_pat.}(hj PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjOubeh}(h]h ]h"]h$]h&]uh1jShjOubeh}(h]h ]h"]h$]h&]uh1j<hjOhMhjMubeh}(h]h ]h"]h$]h&]uh1j7hjuMubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hj6Ph]h Description}(hj8PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4Pubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubh)}(hXcNote that new buffer flags should be added here, at least for the stuff that is immutable. Previously we would have two ioctls, one to create the object with gem_create, and another to apply various parameters, however this creates some ambiguity for the params which are considered immutable. Also in general we're phasing out the various SET/GET ioctls.h]hXeNote that new buffer flags should be added here, at least for the stuff that is immutable. Previously we would have two ioctls, one to create the object with gem_create, and another to apply various parameters, however this creates some ambiguity for the params which are considered immutable. Also in general we’re phasing out the various SET/GET ioctls.}(hjLPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMAhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j1drm_i915_gem_create_ext_memory_regions (C struct)(c.drm_i915_gem_create_ext_memory_regionshNtauh1jhjhhhNhNubj)}(hhh](j)}(h&drm_i915_gem_create_ext_memory_regionsh]j)}(h-struct drm_i915_gem_create_ext_memory_regionsh](j)}(hjh]hstruct}(hjtPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjpPhhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMJubj)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpPhhhjPhMJubj!)}(h&drm_i915_gem_create_ext_memory_regionsh]j')}(hjnPh]h&drm_i915_gem_create_ext_memory_regions}(hjPhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjPubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjpPhhhjPhMJubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjlPhhhjPhMJubah}(h]jgPah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjPhMJhjiPhhubjU)}(hhh]h)}(h1The I915_GEM_CREATE_EXT_MEMORY_REGIONS extension.h]h1The I915_GEM_CREATE_EXT_MEMORY_REGIONS extension.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjPhhubah}(h]h ]h"]h$]h&]uh1jThjiPhhhjPhMJubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjPjxjPjyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_gem_create_ext_memory_regions { struct i915_user_extension base; __u32 pad; __u32 num_regions; __u64 regions; }; **Members** ``base`` Extension link. See struct i915_user_extension. ``pad`` MBZ ``num_regions`` Number of elements in the **regions** array. ``regions`` The regions/placements array. An array of struct drm_i915_gem_memory_class_instance.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh:}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjPubj)}(hstruct drm_i915_gem_create_ext_memory_regions { struct i915_user_extension base; __u32 pad; __u32 num_regions; __u64 regions; };h]hstruct drm_i915_gem_create_ext_memory_regions { struct i915_user_extension base; __u32 pad; __u32 num_regions; __u64 regions; };}hjPsbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjPubh)}(h **Members**h]j)}(hjQh]hMembers}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjPubj8)}(hhh](j=)}(h9``base`` Extension link. See struct i915_user_extension. h](jC)}(h``base``h]j)}(hj#Qh]hbase}(hj%QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!Qubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjQubjT)}(hhh]h)}(h/Extension link. See struct i915_user_extension.h]h/Extension link. See struct i915_user_extension.}(hjj?jOjPjQjR}uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubh)}(hX At which point we get the object handle in :c:type:`drm_i915_gem_create_ext.handle `, along with the final object size in :c:type:`drm_i915_gem_create_ext.size `, which should account for any rounding up, if required.h](h+At which point we get the object handle in }(hjRhhhNhNubh)}(hB:c:type:`drm_i915_gem_create_ext.handle `h]j)}(hjRh]hdrm_i915_gem_create_ext.handle}(hjRhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_gem_create_extuh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjRubh&, along with the final object size in }(hjRhhhNhNubh)}(h@:c:type:`drm_i915_gem_create_ext.size `h]j)}(hjRh]hdrm_i915_gem_create_ext.size}(hjRhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_i915_gem_create_extuh1hhjRhMhjRubh8, which should account for any rounding up, if required.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjRhMhjhhubh)}(hX4Note that userspace has no means of knowing the current backing region for objects where **num_regions** is larger than one. The kernel will only ensure that the priority order of the **regions** array is honoured, either when initially placing the object, or when moving memory around due to memory pressureh](hYNote that userspace has no means of knowing the current backing region for objects where }(hjRhhhNhNubj)}(h**num_regions**h]h num_regions}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubhP is larger than one. The kernel will only ensure that the priority order of the }(hjRhhhNhNubj)}(h **regions**h]hregions}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubhq array is honoured, either when initially placing the object, or when moving memory around due to memory pressure}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubh)}(hXOn Flat-CCS capable HW, compression is supported for the objects residing in I915_MEMORY_CLASS_DEVICE. When such objects (compressed) have other memory class in **regions** and migrated (by i915, due to memory constraints) to the non I915_MEMORY_CLASS_DEVICE region, then i915 needs to decompress the content. But i915 doesn't have the required information to decompress the userspace compressed objects.h](hOn Flat-CCS capable HW, compression is supported for the objects residing in I915_MEMORY_CLASS_DEVICE. When such objects (compressed) have other memory class in }(hj ShhhNhNubj)}(h **regions**h]hregions}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Subh and migrated (by i915, due to memory constraints) to the non I915_MEMORY_CLASS_DEVICE region, then i915 needs to decompress the content. But i915 doesn’t have the required information to decompress the userspace compressed objects.}(hj ShhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubh)}(hdSo i915 supports Flat-CCS, on the objects which can reside only on I915_MEMORY_CLASS_DEVICE regions.h]hdSo i915 supports Flat-CCS, on the objects which can reside only on I915_MEMORY_CLASS_DEVICE regions.}(hj.ShhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j4drm_i915_gem_create_ext_protected_content (C struct)+c.drm_i915_gem_create_ext_protected_contenthNtauh1jhjhhhNhNubj)}(hhh](j)}(h)drm_i915_gem_create_ext_protected_contenth]j)}(h0struct drm_i915_gem_create_ext_protected_contenth](j)}(hjh]hstruct}(hjVShhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjRShhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMubj)}(h h]h }(hjdShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRShhhjcShMubj!)}(h)drm_i915_gem_create_ext_protected_contenth]j')}(hjPSh]h)drm_i915_gem_create_ext_protected_content}(hjvShhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjrSubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjRShhhjcShMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjNShhhjcShMubah}(h]jISah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjcShMhjKShhubjU)}(hhh]h)}(h2The I915_OBJECT_PARAM_PROTECTED_CONTENT extension.h]h2The I915_OBJECT_PARAM_PROTECTED_CONTENT extension.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjShhubah}(h]h ]h"]h$]h&]uh1jThjKShhhjcShMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjSjxjSjyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_gem_create_ext_protected_content { struct i915_user_extension base; __u32 flags; }; **Members** ``base`` Extension link. See struct i915_user_extension. ``flags`` reserved for future usage, currently MBZh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh:}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjSubj)}(hkstruct drm_i915_gem_create_ext_protected_content { struct i915_user_extension base; __u32 flags; };h]hkstruct drm_i915_gem_create_ext_protected_content { struct i915_user_extension base; __u32 flags; };}hjSsbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjSubh)}(h **Members**h]j)}(hjSh]hMembers}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjSubj8)}(hhh](j=)}(h9``base`` Extension link. See struct i915_user_extension. h](jC)}(h``base``h]j)}(hjTh]hbase}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMhjSubjT)}(hhh]h)}(h/Extension link. See struct i915_user_extension.h]h/Extension link. See struct i915_user_extension.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjTubah}(h]h ]h"]h$]h&]uh1jShjSubeh}(h]h ]h"]h$]h&]uh1j<hjThMhjSubj=)}(h2``flags`` reserved for future usage, currently MBZh](jC)}(h ``flags``h]j)}(hj>Th]hflags}(hj@ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj?jOjPjQjR}uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*drm_i915_gem_create_ext_set_pat (C struct)!c.drm_i915_gem_create_ext_set_pathNtauh1jhjhhhNhNubj)}(hhh](j)}(hdrm_i915_gem_create_ext_set_path]j)}(h&struct drm_i915_gem_create_ext_set_path](j)}(hjh]hstruct}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjThhh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMubj)}(h h]h }(hj UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhj UhMubj!)}(hdrm_i915_gem_create_ext_set_path]j')}(hjTh]hdrm_i915_gem_create_ext_set_pat}(hjUhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjUubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjThhhj UhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjThhhj UhMubah}(h]jTah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj UhMhjThhubjU)}(hhh]h)}(h*The I915_GEM_CREATE_EXT_SET_PAT extension.h]h*The I915_GEM_CREATE_EXT_SET_PAT extension.}(hj>UhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM!hj;Uhhubah}(h]h ]h"]h$]h&]uh1jThjThhhj UhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjVUjxjVUjyjzj{uh1jhhhjhNhNubj})}(hX**Definition**:: struct drm_i915_gem_create_ext_set_pat { struct i915_user_extension base; __u32 pat_index; __u32 rsvd; }; **Members** ``base`` Extension link. See struct i915_user_extension. ``pat_index`` PAT index to be set PAT index is a bit field in Page Table Entry to control caching behaviors for GPU accesses. The definition of PAT index is platform dependent and can be found in hardware specifications, ``rsvd`` reserved for future useh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjbUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Uubh:}(hj^UhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM%hjZUubj)}(hustruct drm_i915_gem_create_ext_set_pat { struct i915_user_extension base; __u32 pat_index; __u32 rsvd; };h]hustruct drm_i915_gem_create_ext_set_pat { struct i915_user_extension base; __u32 pat_index; __u32 rsvd; };}hj{Usbah}(h]h ]h"]h$]h&]j>j?uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM'hjZUubh)}(h **Members**h]j)}(hjUh]hMembers}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM-hjZUubj8)}(hhh](j=)}(h9``base`` Extension link. See struct i915_user_extension. h](jC)}(h``base``h]j)}(hjUh]hbase}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM9hjUubjT)}(hhh]h)}(h/Extension link. See struct i915_user_extension.h]h/Extension link. See struct i915_user_extension.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhM9hjUubah}(h]h ]h"]h$]h&]uh1jShjUubeh}(h]h ]h"]h$]h&]uh1j<hjUhM9hjUubj=)}(h``pat_index`` PAT index to be set PAT index is a bit field in Page Table Entry to control caching behaviors for GPU accesses. The definition of PAT index is platform dependent and can be found in hardware specifications, h](jC)}(h ``pat_index``h]j)}(hjUh]h pat_index}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM?hjUubjT)}(hhh]h)}(hPAT index to be set PAT index is a bit field in Page Table Entry to control caching behaviors for GPU accesses. The definition of PAT index is platform dependent and can be found in hardware specifications,h]hPAT index to be set PAT index is a bit field in Page Table Entry to control caching behaviors for GPU accesses. The definition of PAT index is platform dependent and can be found in hardware specifications,}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM<hjUubah}(h]h ]h"]h$]h&]uh1jShjUubeh}(h]h ]h"]h$]h&]uh1j<hjUhM?hjUubj=)}(h ``rsvd`` reserved for future useh](jC)}(h``rsvd``h]j)}(hjVh]hrsvd}(hj VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jBh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMAhjVubjT)}(hhh]h)}(hreserved for future useh]hreserved for future use}(hj7VhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMBhj4Vubah}(h]h ]h"]h$]h&]uh1jShjVubeh}(h]h ]h"]h$]h&]uh1j<hj3VhMAhjUubeh}(h]h ]h"]h$]h&]uh1j7hjZUubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhNhNubh)}(h**Description**h]j)}(hjaVh]h Description}(hjcVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_Vubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhMEhjhhubh)}(hhIf this extension is provided, the specified caching policy (PAT index) is applied to the buffer object.h]hhIf this extension is provided, the specified caching policy (PAT index) is applied to the buffer object.}(hjwVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM"hjhhubh)}(hLBelow is an example on how to create an object with specific caching policy:h]hLBelow is an example on how to create an object with specific caching policy:}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM%hjhhubj)}(hXTstruct drm_i915_gem_create_ext_set_pat set_pat_ext = { .base = { .name = I915_GEM_CREATE_EXT_SET_PAT }, .pat_index = 0, }; struct drm_i915_gem_create_ext create_ext = { .size = PAGE_SIZE, .extensions = (uintptr_t)&set_pat_ext, }; int err = ioctl(fd, DRM_IOCTL_I915_GEM_CREATE_EXT, &create_ext); if (err) ...h]hXTstruct drm_i915_gem_create_ext_set_pat set_pat_ext = { .base = { .name = I915_GEM_CREATE_EXT_SET_PAT }, .pat_index = 0, }; struct drm_i915_gem_create_ext create_ext = { .size = PAGE_SIZE, .extensions = (uintptr_t)&set_pat_ext, }; int err = ioctl(fd, DRM_IOCTL_I915_GEM_CREATE_EXT, &create_ext); if (err) ...}hjVsbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jh[/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:10: ./include/uapi/drm/i915_drm.hhM'hjhhubeh}(h]jah ]h"] drm/i915 uapiah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hdrm/nouveau uAPIh]hdrm/nouveau uAPI}(hjVhhhNhNubah}(h]h ]h"]h$]h&]hj;uh1hhjVhhhhhK ubh)}(hhh](h)}(hVM_BIND / EXEC uAPIh]hVM_BIND / EXEC uAPI}(hjVhhhNhNubah}(h]h ]h"]h$]h&]hjZuh1hhjVhhhhhKubh)}(hvNouveau's VM_BIND / EXEC UAPI consists of three ioctls: DRM_NOUVEAU_VM_INIT, DRM_NOUVEAU_VM_BIND and DRM_NOUVEAU_EXEC.h]hxNouveau’s VM_BIND / EXEC UAPI consists of three ioctls: DRM_NOUVEAU_VM_INIT, DRM_NOUVEAU_VM_BIND and DRM_NOUVEAU_EXEC.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chKhjVhhubh)}(hIn order to use the UAPI firstly a user client must initialize the VA space using the DRM_NOUVEAU_VM_INIT ioctl specifying which region of the VA space should be managed by the kernel and which by the UMD.h]hIn order to use the UAPI firstly a user client must initialize the VA space using the DRM_NOUVEAU_VM_INIT ioctl specifying which region of the VA space should be managed by the kernel and which by the UMD.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chKhjVhhubh)}(hXDThe DRM_NOUVEAU_VM_BIND ioctl provides clients an interface to manage the userspace-managable portion of the VA space. It provides operations to map and unmap memory. Mappings may be flagged as sparse. Sparse mappings are not backed by a GEM object and the kernel will ignore GEM handles provided alongside a sparse mapping.h]hXDThe DRM_NOUVEAU_VM_BIND ioctl provides clients an interface to manage the userspace-managable portion of the VA space. It provides operations to map and unmap memory. Mappings may be flagged as sparse. Sparse mappings are not backed by a GEM object and the kernel will ignore GEM handles provided alongside a sparse mapping.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chKhjVhhubh)}(hXBUserspace may request memory backed mappings either within or outside of the bounds (but not crossing those bounds) of a previously mapped sparse mapping. Subsequently requested memory backed mappings within a sparse mapping will take precedence over the corresponding range of the sparse mapping. If such memory backed mappings are unmapped the kernel will make sure that the corresponding sparse mapping will take their place again. Requests to unmap a sparse mapping that still contains memory backed mappings will result in those memory backed mappings being unmapped first.h]hXBUserspace may request memory backed mappings either within or outside of the bounds (but not crossing those bounds) of a previously mapped sparse mapping. Subsequently requested memory backed mappings within a sparse mapping will take precedence over the corresponding range of the sparse mapping. If such memory backed mappings are unmapped the kernel will make sure that the corresponding sparse mapping will take their place again. Requests to unmap a sparse mapping that still contains memory backed mappings will result in those memory backed mappings being unmapped first.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chKhjVhhubh)}(hXUnmap requests are not bound to the range of existing mappings and can even overlap the bounds of sparse mappings. For such a request the kernel will make sure to unmap all memory backed mappings within the given range, splitting up memory backed mappings which are only partially contained within the given range. Unmap requests with the sparse flag set must match the range of a previously mapped sparse mapping exactly though.h]hXUnmap requests are not bound to the range of existing mappings and can even overlap the bounds of sparse mappings. For such a request the kernel will make sure to unmap all memory backed mappings within the given range, splitting up memory backed mappings which are only partially contained within the given range. Unmap requests with the sparse flag set must match the range of a previously mapped sparse mapping exactly though.}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chK&hjVhhubh)}(hWhile the kernel generally permits arbitrary sequences and ranges of memory backed mappings being mapped and unmapped, either within a single or multiple VM_BIND ioctl calls, there are some restrictions for sparse mappings.h]hWhile the kernel generally permits arbitrary sequences and ranges of memory backed mappings being mapped and unmapped, either within a single or multiple VM_BIND ioctl calls, there are some restrictions for sparse mappings.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chK-hjVhhubj8)}(hhh]j=)}(hXxThe kernel does not permit to: - unmap non-existent sparse mappings - unmap a sparse mapping and map a new sparse mapping overlapping the range of the previously unmapped sparse mapping within the same VM_BIND ioctl - unmap a sparse mapping and map new memory backed mappings overlapping the range of the previously unmapped sparse mapping within the same VM_BIND ioctl h](jC)}(hThe kernel does not permit to:h]hThe kernel does not permit to:}(hj/WhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chK7hj+WubjT)}(hhh]h)}(hhh](h)}(h"unmap non-existent sparse mappingsh]h)}(hjFWh]h"unmap non-existent sparse mappings}(hjHWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chK2hjDWubah}(h]h ]h"]h$]h&]uh1hhjAWubh)}(hunmap a sparse mapping and map a new sparse mapping overlapping the range of the previously unmapped sparse mapping within the same VM_BIND ioctlh]h)}(hunmap a sparse mapping and map a new sparse mapping overlapping the range of the previously unmapped sparse mapping within the same VM_BIND ioctlh]hunmap a sparse mapping and map a new sparse mapping overlapping the range of the previously unmapped sparse mapping within the same VM_BIND ioctl}(hj`WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chK3hj\Wubah}(h]h ]h"]h$]h&]uh1hhjAWubh)}(hunmap a sparse mapping and map new memory backed mappings overlapping the range of the previously unmapped sparse mapping within the same VM_BIND ioctl h]h)}(hunmap a sparse mapping and map new memory backed mappings overlapping the range of the previously unmapped sparse mapping within the same VM_BIND ioctlh]hunmap a sparse mapping and map new memory backed mappings overlapping the range of the previously unmapped sparse mapping within the same VM_BIND ioctl}(hjyWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chK5hjuWubah}(h]h ]h"]h$]h&]uh1hhjAWubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjUWhK2hj>Wubah}(h]h ]h"]h$]h&]uh1jShj+Wubeh}(h]h ]h"]h$]h&]uh1j<hj=WhK7hj(Wubah}(h]h ]h"]h$]h&]uh1j7hjVhhhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chNubh)}(hXWhen using the VM_BIND ioctl to request the kernel to map memory to a given virtual address in the GPU's VA space there is no guarantee that the actual mappings are created in the GPU's MMU. If the given memory is swapped out at the time the bind operation is executed the kernel will stash the mapping details into it's internal allocator and create the actual MMU mappings once the memory is swapped back in. While this is transparent for userspace, it is guaranteed that all the backing memory is swapped back in and all the memory mappings, as requested by userspace previously, are actually mapped once the DRM_NOUVEAU_EXEC ioctl is called to submit an exec job.h]hXWhen using the VM_BIND ioctl to request the kernel to map memory to a given virtual address in the GPU’s VA space there is no guarantee that the actual mappings are created in the GPU’s MMU. If the given memory is swapped out at the time the bind operation is executed the kernel will stash the mapping details into it’s internal allocator and create the actual MMU mappings once the memory is swapped back in. While this is transparent for userspace, it is guaranteed that all the backing memory is swapped back in and all the memory mappings, as requested by userspace previously, are actually mapped once the DRM_NOUVEAU_EXEC ioctl is called to submit an exec job.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chK9hjVhhubh)}(hXA VM_BIND job can be executed either synchronously or asynchronously. If executed asynchronously, userspace may provide a list of syncobjs this job will wait for and/or a list of syncobj the kernel will signal once the VM_BIND job finished execution. If executed synchronously the ioctl will block until the bind job is finished. For synchronous jobs the kernel will not permit any syncobjs submitted to the kernel.h]hXA VM_BIND job can be executed either synchronously or asynchronously. If executed asynchronously, userspace may provide a list of syncobjs this job will wait for and/or a list of syncobj the kernel will signal once the VM_BIND job finished execution. If executed synchronously the ioctl will block until the bind job is finished. For synchronous jobs the kernel will not permit any syncobjs submitted to the kernel.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chKChjVhhubh)}(hTo execute a push buffer the UAPI provides the DRM_NOUVEAU_EXEC ioctl. EXEC jobs are always executed asynchronously, and, equal to VM_BIND jobs, provide the option to synchronize them with syncobjs.h]hTo execute a push buffer the UAPI provides the DRM_NOUVEAU_EXEC ioctl. EXEC jobs are always executed asynchronously, and, equal to VM_BIND jobs, provide the option to synchronize them with syncobjs.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chKJhjVhhubh)}(hOBesides that, EXEC jobs can be scheduled for a specified channel to execute on.h]hOBesides that, EXEC jobs can be scheduled for a specified channel to execute on.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chKNhjVhhubh)}(hX$Since VM_BIND jobs update the GPU's VA space on job submit, EXEC jobs do have an up to date view of the VA space. However, the actual mappings might still be pending. Hence, EXEC jobs require to have the particular fences - of the corresponding VM_BIND jobs they depend on - attached to them.h]hX&Since VM_BIND jobs update the GPU’s VA space on job submit, EXEC jobs do have an up to date view of the VA space. However, the actual mappings might still be pending. Hence, EXEC jobs require to have the particular fences - of the corresponding VM_BIND jobs they depend on - attached to them.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:18: ./drivers/gpu/drm/nouveau/nouveau_exec.chKPhjVhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_nouveau_sync (C struct)c.drm_nouveau_synchNtauh1jhjVhhhNhNubj)}(hhh](j)}(hdrm_nouveau_synch]j)}(hstruct drm_nouveau_synch](j)}(hjh]hstruct}(hj XhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjXhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXhhhjXhKubj!)}(hdrm_nouveau_synch]j')}(hjXh]hdrm_nouveau_sync}(hj+XhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj'Xubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjXhhhjXhKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjXhhhjXhKubah}(h]jWah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjXhKhjXhhubjU)}(hhh]h)}(h sync objecth]h sync object}(hjMXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKhjJXhhubah}(h]h ]h"]h$]h&]uh1jThjXhhhjXhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjeXjxjeXjyjzj{uh1jhhhjVhNhNubj})}(hX!**Definition**:: struct drm_nouveau_sync { __u32 flags; #define DRM_NOUVEAU_SYNC_SYNCOBJ 0x0; #define DRM_NOUVEAU_SYNC_TIMELINE_SYNCOBJ 0x1; #define DRM_NOUVEAU_SYNC_TYPE_MASK 0xf; __u32 handle; __u64 timeline_value; }; **Members** ``flags`` the flags for a sync object The first 8 bits are used to determine the type of the sync object. ``handle`` the handle of the sync object ``timeline_value`` The timeline point of the sync object in case the syncobj is of type DRM_NOUVEAU_SYNC_TIMELINE_SYNCOBJ.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjqXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmXubh:}(hjmXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKhjiXubj)}(hstruct drm_nouveau_sync { __u32 flags; #define DRM_NOUVEAU_SYNC_SYNCOBJ 0x0; #define DRM_NOUVEAU_SYNC_TIMELINE_SYNCOBJ 0x1; #define DRM_NOUVEAU_SYNC_TYPE_MASK 0xf; __u32 handle; __u64 timeline_value; };h]hstruct drm_nouveau_sync { __u32 flags; #define DRM_NOUVEAU_SYNC_SYNCOBJ 0x0; #define DRM_NOUVEAU_SYNC_TIMELINE_SYNCOBJ 0x1; #define DRM_NOUVEAU_SYNC_TYPE_MASK 0xf; __u32 handle; __u64 timeline_value; };}hjXsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKhjiXubh)}(h **Members**h]j)}(hjXh]hMembers}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKhjiXubj8)}(hhh](j=)}(hk``flags`` the flags for a sync object The first 8 bits are used to determine the type of the sync object. h](jC)}(h ``flags``h]j)}(hjXh]hflags}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKhjXubjT)}(hhh](h)}(hthe flags for a sync objecth]hthe flags for a sync object}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKhjXubh)}(hCThe first 8 bits are used to determine the type of the sync object.h]hCThe first 8 bits are used to determine the type of the sync object.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhKhjXubeh}(h]h ]h"]h$]h&]uh1jShjXubeh}(h]h ]h"]h$]h&]uh1j<hjXhKhjXubj=)}(h)``handle`` the handle of the sync object h](jC)}(h ``handle``h]j)}(hjYh]hhandle}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKhjXubjT)}(hhh]h)}(hthe handle of the sync objecth]hthe handle of the sync object}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhKhjYubah}(h]h ]h"]h$]h&]uh1jShjXubeh}(h]h ]h"]h$]h&]uh1j<hjYhKhjXubj=)}(hz``timeline_value`` The timeline point of the sync object in case the syncobj is of type DRM_NOUVEAU_SYNC_TIMELINE_SYNCOBJ.h](jC)}(h``timeline_value``h]j)}(hj;Yh]htimeline_value}(hj=YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Yubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKhj5YubjT)}(hhh]h)}(hgThe timeline point of the sync object in case the syncobj is of type DRM_NOUVEAU_SYNC_TIMELINE_SYNCOBJ.h]hgThe timeline point of the sync object in case the syncobj is of type DRM_NOUVEAU_SYNC_TIMELINE_SYNCOBJ.}(hjTYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPYhKhjQYubah}(h]h ]h"]h$]h&]uh1jShj5Yubeh}(h]h ]h"]h$]h&]uh1j<hjPYhKhjXubeh}(h]h ]h"]h$]h&]uh1j7hjiXubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjVhhhNhNubh)}(h**Description**h]j)}(hj}Yh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Yubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKhjVhhubh)}(huThis structure serves as synchronization mechanism for (potentially) asynchronous operations such as EXEC or VM_BIND.h]huThis structure serves as synchronization mechanism for (potentially) asynchronous operations such as EXEC or VM_BIND.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKhjVhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_nouveau_vm_init (C struct)c.drm_nouveau_vm_inithNtauh1jhjVhhhNhNubj)}(hhh](j)}(hdrm_nouveau_vm_inith]j)}(hstruct drm_nouveau_vm_inith](j)}(hjh]hstruct}(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjYhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhjYhKubj!)}(hdrm_nouveau_vm_inith]j')}(hjYh]hdrm_nouveau_vm_init}(hjYhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjYubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjYhhhjYhKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjYhhhjYhKubah}(h]jYah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjYhKhjYhhubjU)}(hhh]h)}(hGPU VA space init structureh]hGPU VA space init structure}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKhjYhhubah}(h]h ]h"]h$]h&]uh1jThjYhhhjYhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjZjxjZjyjzj{uh1jhhhjVhNhNubj})}(hX&**Definition**:: struct drm_nouveau_vm_init { __u64 kernel_managed_addr; __u64 kernel_managed_size; }; **Members** ``kernel_managed_addr`` start address of the kernel managed VA space region ``kernel_managed_size`` size of the kernel managed VA space region in bytesh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj!ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh:}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjZubj)}(h]struct drm_nouveau_vm_init { __u64 kernel_managed_addr; __u64 kernel_managed_size; };h]h]struct drm_nouveau_vm_init { __u64 kernel_managed_addr; __u64 kernel_managed_size; };}hj:Zsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjZubh)}(h **Members**h]j)}(hjKZh]hMembers}(hjMZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIZubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjZubj8)}(hhh](j=)}(hL``kernel_managed_addr`` start address of the kernel managed VA space region h](jC)}(h``kernel_managed_addr``h]j)}(hjjZh]hkernel_managed_addr}(hjlZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhZubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM hjdZubjT)}(hhh]h)}(h3start address of the kernel managed VA space regionh]h3start address of the kernel managed VA space region}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM hjZubah}(h]h ]h"]h$]h&]uh1jShjdZubeh}(h]h ]h"]h$]h&]uh1j<hjZhM hjaZubj=)}(hK``kernel_managed_size`` size of the kernel managed VA space region in bytesh](jC)}(h``kernel_managed_size``h]j)}(hjZh]hkernel_managed_size}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjZubjT)}(hhh]h)}(h3size of the kernel managed VA space region in bytesh]h3size of the kernel managed VA space region in bytes}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhjZubah}(h]h ]h"]h$]h&]uh1jShjZubeh}(h]h ]h"]h$]h&]uh1j<hjZhMhjaZubeh}(h]h ]h"]h$]h&]uh1j7hjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjVhhhNhNubh)}(h**Description**h]j)}(hjZh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjVhhubh)}(hUsed to initialize the GPU's VA space for a user client, telling the kernel which portion of the VA space is managed by the UMD and kernel respectively.h]hUsed to initialize the GPU’s VA space for a user client, telling the kernel which portion of the VA space is managed by the UMD and kernel respectively.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhKhjVhhubh)}(hFor the UMD to use the VM_BIND uAPI, this must be called before any BOs or channels are created; if called afterwards DRM_IOCTL_NOUVEAU_VM_INIT fails with -ENOSYS.h]hFor the UMD to use the VM_BIND uAPI, this must be called before any BOs or channels are created; if called afterwards DRM_IOCTL_NOUVEAU_VM_INIT fails with -ENOSYS.}(hj [hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjVhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_nouveau_vm_bind_op (C struct)c.drm_nouveau_vm_bind_ophNtauh1jhjVhhhNhNubj)}(hhh](j)}(hdrm_nouveau_vm_bind_oph]j)}(hstruct drm_nouveau_vm_bind_oph](j)}(hjh]hstruct}(hj3[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj/[hhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMubj)}(h h]h }(hjA[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/[hhhj@[hMubj!)}(hdrm_nouveau_vm_bind_oph]j')}(hj-[h]hdrm_nouveau_vm_bind_op}(hjS[hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjO[ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj/[hhhj@[hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj+[hhhj@[hMubah}(h]j&[ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj@[hMhj([hhubjU)}(hhh]h)}(hVM_BIND operationh]hVM_BIND operation}(hju[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjr[hhubah}(h]h ]h"]h$]h&]uh1jThj([hhhj@[hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj[jxj[jyjzj{uh1jhhhjVhNhNubj})}(hX**Definition**:: struct drm_nouveau_vm_bind_op { __u32 op; #define DRM_NOUVEAU_VM_BIND_OP_MAP 0x0; #define DRM_NOUVEAU_VM_BIND_OP_UNMAP 0x1; __u32 flags; #define DRM_NOUVEAU_VM_BIND_SPARSE (1 << 8); __u32 handle; __u32 pad; __u64 addr; __u64 bo_offset; __u64 range; }; **Members** ``op`` the operation type Supported values: ``DRM_NOUVEAU_VM_BIND_OP_MAP`` - Map a GEM object to the GPU's VA space. Optionally, the :c:type:`DRM_NOUVEAU_VM_BIND_SPARSE` flag can be passed to instruct the kernel to create sparse mappings for the given range. ``DRM_NOUVEAU_VM_BIND_OP_UNMAP`` - Unmap an existing mapping in the GPU's VA space. If the region the mapping is located in is a sparse region, new sparse mappings are created where the unmapped (memory backed) mapping was mapped previously. To remove a sparse region the :c:type:`DRM_NOUVEAU_VM_BIND_SPARSE` must be set. ``flags`` the flags for a :c:type:`drm_nouveau_vm_bind_op` Supported values: ``DRM_NOUVEAU_VM_BIND_SPARSE`` - Indicates that an allocated VA space region should be sparse. ``handle`` the handle of the DRM GEM object to map ``pad`` 32 bit padding, should be 0 ``addr`` the address the VA space region or (memory backed) mapping should be mapped to ``bo_offset`` the offset within the BO backing the mapping ``range`` the size of the requested mapping in bytesh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubh:}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhj[ubj)}(hXstruct drm_nouveau_vm_bind_op { __u32 op; #define DRM_NOUVEAU_VM_BIND_OP_MAP 0x0; #define DRM_NOUVEAU_VM_BIND_OP_UNMAP 0x1; __u32 flags; #define DRM_NOUVEAU_VM_BIND_SPARSE (1 << 8); __u32 handle; __u32 pad; __u64 addr; __u64 bo_offset; __u64 range; };h]hXstruct drm_nouveau_vm_bind_op { __u32 op; #define DRM_NOUVEAU_VM_BIND_OP_MAP 0x0; #define DRM_NOUVEAU_VM_BIND_OP_UNMAP 0x1; __u32 flags; #define DRM_NOUVEAU_VM_BIND_SPARSE (1 << 8); __u32 handle; __u32 pad; __u64 addr; __u64 bo_offset; __u64 range; };}hj[sbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhj[ubh)}(h **Members**h]j)}(hj[h]hMembers}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM'hj[ubj8)}(hhh](j=)}(hXH``op`` the operation type Supported values: ``DRM_NOUVEAU_VM_BIND_OP_MAP`` - Map a GEM object to the GPU's VA space. Optionally, the :c:type:`DRM_NOUVEAU_VM_BIND_SPARSE` flag can be passed to instruct the kernel to create sparse mappings for the given range. ``DRM_NOUVEAU_VM_BIND_OP_UNMAP`` - Unmap an existing mapping in the GPU's VA space. If the region the mapping is located in is a sparse region, new sparse mappings are created where the unmapped (memory backed) mapping was mapped previously. To remove a sparse region the :c:type:`DRM_NOUVEAU_VM_BIND_SPARSE` must be set. h](jC)}(h``op``h]j)}(hj[h]hop}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM)hj[ubjT)}(hhh](h)}(hthe operation typeh]hthe operation type}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhj[ubh)}(hSupported values:h]hSupported values:}(hj \hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhj[ubh)}(h``DRM_NOUVEAU_VM_BIND_OP_MAP`` - Map a GEM object to the GPU's VA space. Optionally, the :c:type:`DRM_NOUVEAU_VM_BIND_SPARSE` flag can be passed to instruct the kernel to create sparse mappings for the given range.h](j)}(h``DRM_NOUVEAU_VM_BIND_OP_MAP``h]hDRM_NOUVEAU_VM_BIND_OP_MAP}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh= - Map a GEM object to the GPU’s VA space. Optionally, the }(hj\hhhNhNubh)}(h$:c:type:`DRM_NOUVEAU_VM_BIND_SPARSE`h]j)}(hj1\h]hDRM_NOUVEAU_VM_BIND_SPARSE}(hj3\hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj/\ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_NOUVEAU_VM_BIND_SPARSEuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM hj\ubhY flag can be passed to instruct the kernel to create sparse mappings for the given range.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjN\hM hj[ubh)}(hXA``DRM_NOUVEAU_VM_BIND_OP_UNMAP`` - Unmap an existing mapping in the GPU's VA space. If the region the mapping is located in is a sparse region, new sparse mappings are created where the unmapped (memory backed) mapping was mapped previously. To remove a sparse region the :c:type:`DRM_NOUVEAU_VM_BIND_SPARSE` must be set.h](j)}(h ``DRM_NOUVEAU_VM_BIND_OP_UNMAP``h]hDRM_NOUVEAU_VM_BIND_OP_UNMAP}(hj]\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY\ubh - Unmap an existing mapping in the GPU’s VA space. If the region the mapping is located in is a sparse region, new sparse mappings are created where the unmapped (memory backed) mapping was mapped previously. To remove a sparse region the }(hjY\hhhNhNubh)}(h$:c:type:`DRM_NOUVEAU_VM_BIND_SPARSE`h]j)}(hjq\h]hDRM_NOUVEAU_VM_BIND_SPARSE}(hjs\hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjo\ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_NOUVEAU_VM_BIND_SPARSEuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM%hjY\ubh must be set.}(hjY\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj\hM%hj[ubeh}(h]h ]h"]h$]h&]uh1jShj[ubeh}(h]h ]h"]h$]h&]uh1j<hj[hM)hj[ubj=)}(h``flags`` the flags for a :c:type:`drm_nouveau_vm_bind_op` Supported values: ``DRM_NOUVEAU_VM_BIND_SPARSE`` - Indicates that an allocated VA space region should be sparse. h](jC)}(h ``flags``h]j)}(hj\h]hflags}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM4hj\ubjT)}(hhh](h)}(h0the flags for a :c:type:`drm_nouveau_vm_bind_op`h](hthe flags for a }(hj\hhhNhNubh)}(h :c:type:`drm_nouveau_vm_bind_op`h]j)}(hj\h]hdrm_nouveau_vm_bind_op}(hj\hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_vm_bind_opuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM/hj\ubeh}(h]h ]h"]h$]h&]uh1hhj\hM/hj\ubh)}(hSupported values:h]hSupported values:}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM1hj\ubh)}(h^``DRM_NOUVEAU_VM_BIND_SPARSE`` - Indicates that an allocated VA space region should be sparse.h](j)}(h``DRM_NOUVEAU_VM_BIND_SPARSE``h]hDRM_NOUVEAU_VM_BIND_SPARSE}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh@ - Indicates that an allocated VA space region should be sparse.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM3hj\ubeh}(h]h ]h"]h$]h&]uh1jShj\ubeh}(h]h ]h"]h$]h&]uh1j<hj\hM4hj[ubj=)}(h3``handle`` the handle of the DRM GEM object to map h](jC)}(h ``handle``h]j)}(hj0]h]hhandle}(hj2]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.]ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM9hj*]ubjT)}(hhh]h)}(h'the handle of the DRM GEM object to maph]h'the handle of the DRM GEM object to map}(hjI]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE]hM9hjF]ubah}(h]h ]h"]h$]h&]uh1jShj*]ubeh}(h]h ]h"]h$]h&]uh1j<hjE]hM9hj[ubj=)}(h$``pad`` 32 bit padding, should be 0 h](jC)}(h``pad``h]j)}(hji]h]hpad}(hjk]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg]ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM=hjc]ubjT)}(hhh]h)}(h32 bit padding, should be 0h]h32 bit padding, should be 0}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~]hM=hj]ubah}(h]h ]h"]h$]h&]uh1jShjc]ubeh}(h]h ]h"]h$]h&]uh1j<hj~]hM=hj[ubj=)}(hX``addr`` the address the VA space region or (memory backed) mapping should be mapped to h](jC)}(h``addr``h]j)}(hj]h]haddr}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMAhj]ubjT)}(hhh]h)}(hNthe address the VA space region or (memory backed) mapping should be mapped toh]hNthe address the VA space region or (memory backed) mapping should be mapped to}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMAhj]ubah}(h]h ]h"]h$]h&]uh1jShj]ubeh}(h]h ]h"]h$]h&]uh1j<hj]hMAhj[ubj=)}(h;``bo_offset`` the offset within the BO backing the mapping h](jC)}(h ``bo_offset``h]j)}(hj]h]h bo_offset}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMGhj]ubjT)}(hhh]h)}(h,the offset within the BO backing the mappingh]h,the offset within the BO backing the mapping}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMGhj]ubah}(h]h ]h"]h$]h&]uh1jShj]ubeh}(h]h ]h"]h$]h&]uh1j<hj]hMGhj[ubj=)}(h4``range`` the size of the requested mapping in bytesh](jC)}(h ``range``h]j)}(hj^h]hrange}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMJhj^ubjT)}(hhh]h)}(h*the size of the requested mapping in bytesh]h*the size of the requested mapping in bytes}(hj-^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMKhj*^ubah}(h]h ]h"]h$]h&]uh1jShj^ubeh}(h]h ]h"]h$]h&]uh1j<hj)^hMJhj[ubeh}(h]h ]h"]h$]h&]uh1j7hj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjVhhhNhNubh)}(h**Description**h]j)}(hjW^h]h Description}(hjY^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU^ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMNhjVhhubh)}(hThis structure represents a single VM_BIND operation. UMDs should pass an array of this structure via struct drm_nouveau_vm_bind's :c:type:`op_ptr` field.h](hThis structure represents a single VM_BIND operation. UMDs should pass an array of this structure via struct drm_nouveau_vm_bind’s }(hjm^hhhNhNubh)}(h:c:type:`op_ptr`h]j)}(hjw^h]hop_ptr}(hjy^hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhju^ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQop_ptruh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjm^ubh field.}(hjm^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^hMhjVhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_nouveau_vm_bind (C struct)c.drm_nouveau_vm_bindhNtauh1jhjVhhhNhNubj)}(hhh](j)}(hdrm_nouveau_vm_bindh]j)}(hstruct drm_nouveau_vm_bindh](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^hhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj^hMubj!)}(hdrm_nouveau_vm_bindh]j')}(hj^h]hdrm_nouveau_vm_bind}(hj^hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj^ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj^hhhj^hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj^hhhj^hMubah}(h]j^ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj^hMhj^hhubjU)}(hhh]h)}(h'structure for DRM_IOCTL_NOUVEAU_VM_BINDh]h'structure for DRM_IOCTL_NOUVEAU_VM_BIND}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMPhj^hhubah}(h]h ]h"]h$]h&]uh1jThj^hhhj^hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj_jxj_jyjzj{uh1jhhhjVhNhNubj})}(hX***Definition**:: struct drm_nouveau_vm_bind { __u32 op_count; __u32 flags; #define DRM_NOUVEAU_VM_BIND_RUN_ASYNC 0x1; __u32 wait_count; __u32 sig_count; __u64 wait_ptr; __u64 sig_ptr; __u64 op_ptr; }; **Members** ``op_count`` the number of :c:type:`drm_nouveau_vm_bind_op` ``flags`` the flags for a :c:type:`drm_nouveau_vm_bind` ioctl Supported values: ``DRM_NOUVEAU_VM_BIND_RUN_ASYNC`` - Indicates that the given VM_BIND operation should be executed asynchronously by the kernel. If this flag is not supplied the kernel executes the associated operations synchronously and doesn't accept any :c:type:`drm_nouveau_sync` objects. ``wait_count`` the number of wait :c:type:`drm_nouveau_syncs` ``sig_count`` the number of :c:type:`drm_nouveau_syncs` to signal when finished ``wait_ptr`` pointer to :c:type:`drm_nouveau_syncs` to wait for ``sig_ptr`` pointer to :c:type:`drm_nouveau_syncs` to signal when finished ``op_ptr`` pointer to the :c:type:`drm_nouveau_vm_bind_ops` to executeh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh:}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMThj_ubj)}(hstruct drm_nouveau_vm_bind { __u32 op_count; __u32 flags; #define DRM_NOUVEAU_VM_BIND_RUN_ASYNC 0x1; __u32 wait_count; __u32 sig_count; __u64 wait_ptr; __u64 sig_ptr; __u64 op_ptr; };h]hstruct drm_nouveau_vm_bind { __u32 op_count; __u32 flags; #define DRM_NOUVEAU_VM_BIND_RUN_ASYNC 0x1; __u32 wait_count; __u32 sig_count; __u64 wait_ptr; __u64 sig_ptr; __u64 op_ptr; };}hj7_sbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMVhj_ubh)}(h **Members**h]j)}(hjH_h]hMembers}(hjJ_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF_ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMahj_ubj8)}(hhh](j=)}(h<``op_count`` the number of :c:type:`drm_nouveau_vm_bind_op` h](jC)}(h ``op_count``h]j)}(hjg_h]hop_count}(hji_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje_ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMUhja_ubjT)}(hhh]h)}(h.the number of :c:type:`drm_nouveau_vm_bind_op`h](hthe number of }(hj_hhhNhNubh)}(h :c:type:`drm_nouveau_vm_bind_op`h]j)}(hj_h]hdrm_nouveau_vm_bind_op}(hj_hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_vm_bind_opuh1hhj|_hMUhj_ubeh}(h]h ]h"]h$]h&]uh1hhj|_hMUhj}_ubah}(h]h ]h"]h$]h&]uh1jShja_ubeh}(h]h ]h"]h$]h&]uh1j<hj|_hMUhj^_ubj=)}(hXg``flags`` the flags for a :c:type:`drm_nouveau_vm_bind` ioctl Supported values: ``DRM_NOUVEAU_VM_BIND_RUN_ASYNC`` - Indicates that the given VM_BIND operation should be executed asynchronously by the kernel. If this flag is not supplied the kernel executes the associated operations synchronously and doesn't accept any :c:type:`drm_nouveau_sync` objects. h](jC)}(h ``flags``h]j)}(hj_h]hflags}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMbhj_ubjT)}(hhh](h)}(h3the flags for a :c:type:`drm_nouveau_vm_bind` ioctlh](hthe flags for a }(hj_hhhNhNubh)}(h:c:type:`drm_nouveau_vm_bind`h]j)}(hj_h]hdrm_nouveau_vm_bind}(hj_hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_vm_binduh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMYhj_ubh ioctl}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj_hMYhj_ubh)}(hSupported values:h]hSupported values:}(hj `hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM[hj_ubh)}(h``DRM_NOUVEAU_VM_BIND_RUN_ASYNC`` - Indicates that the given VM_BIND operation should be executed asynchronously by the kernel.h](j)}(h!``DRM_NOUVEAU_VM_BIND_RUN_ASYNC``h]hDRM_NOUVEAU_VM_BIND_RUN_ASYNC}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh^ - Indicates that the given VM_BIND operation should be executed asynchronously by the kernel.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM]hj_ubh)}(hIf this flag is not supplied the kernel executes the associated operations synchronously and doesn't accept any :c:type:`drm_nouveau_sync` objects.h](hrIf this flag is not supplied the kernel executes the associated operations synchronously and doesn’t accept any }(hj6`hhhNhNubh)}(h:c:type:`drm_nouveau_sync`h]j)}(hj@`h]hdrm_nouveau_sync}(hjB`hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj>`ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_syncuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM`hj6`ubh objects.}(hj6`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]`hM`hj_ubeh}(h]h ]h"]h$]h&]uh1jShj_ubeh}(h]h ]h"]h$]h&]uh1j<hj_hMbhj^_ubj=)}(h>``wait_count`` the number of wait :c:type:`drm_nouveau_syncs` h](jC)}(h``wait_count``h]j)}(hjz`h]h wait_count}(hj|`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx`ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMghjt`ubjT)}(hhh]h)}(h.the number of wait :c:type:`drm_nouveau_syncs`h](hthe number of wait }(hj`hhhNhNubh)}(h:c:type:`drm_nouveau_syncs`h]j)}(hj`h]hdrm_nouveau_syncs}(hj`hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_syncsuh1hhj`hMghj`ubeh}(h]h ]h"]h$]h&]uh1hhj`hMghj`ubah}(h]h ]h"]h$]h&]uh1jShjt`ubeh}(h]h ]h"]h$]h&]uh1j<hj`hMghj^_ubj=)}(hP``sig_count`` the number of :c:type:`drm_nouveau_syncs` to signal when finished h](jC)}(h ``sig_count``h]j)}(hj`h]h sig_count}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMkhj`ubjT)}(hhh]h)}(hAthe number of :c:type:`drm_nouveau_syncs` to signal when finishedh](hthe number of }(hj`hhhNhNubh)}(h:c:type:`drm_nouveau_syncs`h]j)}(hj`h]hdrm_nouveau_syncs}(hj`hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_syncsuh1hhj`hMkhj`ubh to signal when finished}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`hMkhj`ubah}(h]h ]h"]h$]h&]uh1jShj`ubeh}(h]h ]h"]h$]h&]uh1j<hj`hMkhj^_ubj=)}(h@``wait_ptr`` pointer to :c:type:`drm_nouveau_syncs` to wait for h](jC)}(h ``wait_ptr``h]j)}(hj.ah]hwait_ptr}(hj0ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,aubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMohj(aubjT)}(hhh]h)}(h2pointer to :c:type:`drm_nouveau_syncs` to wait forh](h pointer to }(hjGahhhNhNubh)}(h:c:type:`drm_nouveau_syncs`h]j)}(hjQah]hdrm_nouveau_syncs}(hjSahhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjOaubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_syncsuh1hhjCahMohjGaubh to wait for}(hjGahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjCahMohjDaubah}(h]h ]h"]h$]h&]uh1jShj(aubeh}(h]h ]h"]h$]h&]uh1j<hjCahMohj^_ubj=)}(hK``sig_ptr`` pointer to :c:type:`drm_nouveau_syncs` to signal when finished h](jC)}(h ``sig_ptr``h]j)}(hjah]hsig_ptr}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMshjaubjT)}(hhh]h)}(h>pointer to :c:type:`drm_nouveau_syncs` to signal when finishedh](h pointer to }(hjahhhNhNubh)}(h:c:type:`drm_nouveau_syncs`h]j)}(hjah]hdrm_nouveau_syncs}(hjahhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_syncsuh1hhjahMshjaubh to signal when finished}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjahMshjaubah}(h]h ]h"]h$]h&]uh1jShjaubeh}(h]h ]h"]h$]h&]uh1j<hjahMshj^_ubj=)}(hF``op_ptr`` pointer to the :c:type:`drm_nouveau_vm_bind_ops` to executeh](jC)}(h ``op_ptr``h]j)}(hjah]hop_ptr}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMvhjaubjT)}(hhh]h)}(h;pointer to the :c:type:`drm_nouveau_vm_bind_ops` to executeh](hpointer to the }(hjahhhNhNubh)}(h!:c:type:`drm_nouveau_vm_bind_ops`h]j)}(hj bh]hdrm_nouveau_vm_bind_ops}(hj bhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_vm_bind_opsuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMwhjaubh to execute}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&bhMwhjaubah}(h]h ]h"]h$]h&]uh1jShjaubeh}(h]h ]h"]h$]h&]uh1j<hjahMvhj^_ubeh}(h]h ]h"]h$]h&]uh1j7hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjVhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_nouveau_exec_push (C struct)c.drm_nouveau_exec_pushhNtauh1jhjVhhhNhNubj)}(hhh](j)}(hdrm_nouveau_exec_pushh]j)}(hstruct drm_nouveau_exec_pushh](j)}(hjh]hstruct}(hjcbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj_bhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM}ubj)}(h h]h }(hjqbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_bhhhjpbhM}ubj!)}(hdrm_nouveau_exec_pushh]j')}(hj]bh]hdrm_nouveau_exec_push}(hjbhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjbubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj_bhhhjpbhM}ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj[bhhhjpbhM}ubah}(h]jVbah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjpbhM}hjXbhhubjU)}(hhh]h)}(hEXEC push operationh]hEXEC push operation}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM|hjbhhubah}(h]h ]h"]h$]h&]uh1jThjXbhhhjpbhM}ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjbjxjbjyjzj{uh1jhhhjVhNhNubj})}(hXM**Definition**:: struct drm_nouveau_exec_push { __u64 va; __u32 va_len; __u32 flags; #define DRM_NOUVEAU_EXEC_PUSH_NO_PREFETCH 0x1; }; **Members** ``va`` the virtual address of the push buffer mapping ``va_len`` the length of the push buffer mapping ``flags`` the flags for this push buffer mappingh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubh:}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjbubj)}(hstruct drm_nouveau_exec_push { __u64 va; __u32 va_len; __u32 flags; #define DRM_NOUVEAU_EXEC_PUSH_NO_PREFETCH 0x1; };h]hstruct drm_nouveau_exec_push { __u64 va; __u32 va_len; __u32 flags; #define DRM_NOUVEAU_EXEC_PUSH_NO_PREFETCH 0x1; };}hjbsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjbubh)}(h **Members**h]j)}(hjbh]hMembers}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjbubj8)}(hhh](j=)}(h6``va`` the virtual address of the push buffer mapping h](jC)}(h``va``h]j)}(hjch]hva}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhj cubjT)}(hhh]h)}(h.the virtual address of the push buffer mappingh]h.the virtual address of the push buffer mapping}(hj+chhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'chMhj(cubah}(h]h ]h"]h$]h&]uh1jShj cubeh}(h]h ]h"]h$]h&]uh1j<hj'chMhj cubj=)}(h1``va_len`` the length of the push buffer mapping h](jC)}(h ``va_len``h]j)}(hjKch]hva_len}(hjMchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIcubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjEcubjT)}(hhh]h)}(h%the length of the push buffer mappingh]h%the length of the push buffer mapping}(hjdchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`chMhjacubah}(h]h ]h"]h$]h&]uh1jShjEcubeh}(h]h ]h"]h$]h&]uh1j<hj`chMhj cubj=)}(h0``flags`` the flags for this push buffer mappingh](jC)}(h ``flags``h]j)}(hjch]hflags}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhj~cubjT)}(hhh]h)}(h&the flags for this push buffer mappingh]h&the flags for this push buffer mapping}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjcubah}(h]h ]h"]h$]h&]uh1jShj~cubeh}(h]h ]h"]h$]h&]uh1j<hjchMhj cubeh}(h]h ]h"]h$]h&]uh1j7hjbubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjVhhhNhNubh)}(h**Description**h]j)}(hjch]h Description}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjVhhubh)}(hThis structure represents a single EXEC push operation. UMDs should pass an array of this structure via struct drm_nouveau_exec's :c:type:`push_ptr` field.h](hThis structure represents a single EXEC push operation. UMDs should pass an array of this structure via struct drm_nouveau_exec’s }(hjchhhNhNubh)}(h:c:type:`push_ptr`h]j)}(hjch]hpush_ptr}(hjchhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQpush_ptruh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhM}hjcubh field.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjdhM}hjVhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_nouveau_exec (C struct)c.drm_nouveau_exechNtauh1jhjVhhhNhNubj)}(hhh](j)}(hdrm_nouveau_exech]j)}(hstruct drm_nouveau_exech](j)}(hjh]hstruct}(hj(dhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$dhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMubj)}(h h]h }(hj6dhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$dhhhj5dhMubj!)}(hdrm_nouveau_exech]j')}(hj"dh]hdrm_nouveau_exec}(hjHdhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjDdubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj$dhhhj5dhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj dhhhj5dhMubah}(h]jdah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj5dhMhjdhhubjU)}(hhh]h)}(h$structure for DRM_IOCTL_NOUVEAU_EXECh]h$structure for DRM_IOCTL_NOUVEAU_EXEC}(hjjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjgdhhubah}(h]h ]h"]h$]h&]uh1jThjdhhhj5dhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjdjxjdjyjzj{uh1jhhhjVhNhNubj})}(hX**Definition**:: struct drm_nouveau_exec { __u32 channel; __u32 push_count; __u32 wait_count; __u32 sig_count; __u64 wait_ptr; __u64 sig_ptr; __u64 push_ptr; }; **Members** ``channel`` the channel to execute the push buffer in ``push_count`` the number of :c:type:`drm_nouveau_exec_push` ops ``wait_count`` the number of wait :c:type:`drm_nouveau_syncs` ``sig_count`` the number of :c:type:`drm_nouveau_syncs` to signal when finished ``wait_ptr`` pointer to :c:type:`drm_nouveau_syncs` to wait for ``sig_ptr`` pointer to :c:type:`drm_nouveau_syncs` to signal when finished ``push_ptr`` pointer to :c:type:`drm_nouveau_exec_push` opsh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh:}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjdubj)}(hstruct drm_nouveau_exec { __u32 channel; __u32 push_count; __u32 wait_count; __u32 sig_count; __u64 wait_ptr; __u64 sig_ptr; __u64 push_ptr; };h]hstruct drm_nouveau_exec { __u32 channel; __u32 push_count; __u32 wait_count; __u32 sig_count; __u64 wait_ptr; __u64 sig_ptr; __u64 push_ptr; };}hjdsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjdubh)}(h **Members**h]j)}(hjdh]hMembers}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjdubj8)}(hhh](j=)}(h6``channel`` the channel to execute the push buffer in h](jC)}(h ``channel``h]j)}(hjdh]hchannel}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjdubjT)}(hhh]h)}(h)the channel to execute the push buffer inh]h)the channel to execute the push buffer in}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jShjdubeh}(h]h ]h"]h$]h&]uh1j<hjdhMhjdubj=)}(hA``push_count`` the number of :c:type:`drm_nouveau_exec_push` ops h](jC)}(h``push_count``h]j)}(hjeh]h push_count}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhj eubjT)}(hhh]h)}(h1the number of :c:type:`drm_nouveau_exec_push` opsh](hthe number of }(hj)ehhhNhNubh)}(h:c:type:`drm_nouveau_exec_push`h]j)}(hj3eh]hdrm_nouveau_exec_push}(hj5ehhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj1eubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_exec_pushuh1hhj%ehMhj)eubh ops}(hj)ehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%ehMhj&eubah}(h]h ]h"]h$]h&]uh1jShj eubeh}(h]h ]h"]h$]h&]uh1j<hj%ehMhjdubj=)}(h>``wait_count`` the number of wait :c:type:`drm_nouveau_syncs` h](jC)}(h``wait_count``h]j)}(hjleh]h wait_count}(hjnehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjeubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjfeubjT)}(hhh]h)}(h.the number of wait :c:type:`drm_nouveau_syncs`h](hthe number of wait }(hjehhhNhNubh)}(h:c:type:`drm_nouveau_syncs`h]j)}(hjeh]hdrm_nouveau_syncs}(hjehhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_syncsuh1hhjehMhjeubeh}(h]h ]h"]h$]h&]uh1hhjehMhjeubah}(h]h ]h"]h$]h&]uh1jShjfeubeh}(h]h ]h"]h$]h&]uh1j<hjehMhjdubj=)}(hP``sig_count`` the number of :c:type:`drm_nouveau_syncs` to signal when finished h](jC)}(h ``sig_count``h]j)}(hjeh]h sig_count}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjeubjT)}(hhh]h)}(hAthe number of :c:type:`drm_nouveau_syncs` to signal when finishedh](hthe number of }(hjehhhNhNubh)}(h:c:type:`drm_nouveau_syncs`h]j)}(hjeh]hdrm_nouveau_syncs}(hjehhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_syncsuh1hhjehMhjeubh to signal when finished}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjehMhjeubah}(h]h ]h"]h$]h&]uh1jShjeubeh}(h]h ]h"]h$]h&]uh1j<hjehMhjdubj=)}(h@``wait_ptr`` pointer to :c:type:`drm_nouveau_syncs` to wait for h](jC)}(h ``wait_ptr``h]j)}(hj fh]hwait_ptr}(hj"fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjfubjT)}(hhh]h)}(h2pointer to :c:type:`drm_nouveau_syncs` to wait forh](h pointer to }(hj9fhhhNhNubh)}(h:c:type:`drm_nouveau_syncs`h]j)}(hjCfh]hdrm_nouveau_syncs}(hjEfhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjAfubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_syncsuh1hhj5fhMhj9fubh to wait for}(hj9fhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj5fhMhj6fubah}(h]h ]h"]h$]h&]uh1jShjfubeh}(h]h ]h"]h$]h&]uh1j<hj5fhMhjdubj=)}(hK``sig_ptr`` pointer to :c:type:`drm_nouveau_syncs` to signal when finished h](jC)}(h ``sig_ptr``h]j)}(hj|fh]hsig_ptr}(hj~fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzfubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjvfubjT)}(hhh]h)}(h>pointer to :c:type:`drm_nouveau_syncs` to signal when finishedh](h pointer to }(hjfhhhNhNubh)}(h:c:type:`drm_nouveau_syncs`h]j)}(hjfh]hdrm_nouveau_syncs}(hjfhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_syncsuh1hhjfhMhjfubh to signal when finished}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jShjvfubeh}(h]h ]h"]h$]h&]uh1j<hjfhMhjdubj=)}(h;``push_ptr`` pointer to :c:type:`drm_nouveau_exec_push` opsh](jC)}(h ``push_ptr``h]j)}(hjfh]hpush_ptr}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjfubjT)}(hhh]h)}(h.pointer to :c:type:`drm_nouveau_exec_push` opsh](h pointer to }(hjfhhhNhNubh)}(h:c:type:`drm_nouveau_exec_push`h]j)}(hjfh]hdrm_nouveau_exec_push}(hjfhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_nouveau_exec_pushuh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:21: ./include/uapi/drm/nouveau_drm.hhMhjfubh ops}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjghMhjfubah}(h]h ]h"]h$]h&]uh1jShjfubeh}(h]h ]h"]h$]h&]uh1j<hjfhMhjdubeh}(h]h ]h"]h$]h&]uh1j7hjdubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjVhhhNhNubeh}(h]j`ah ]h"]vm_bind / exec uapiah$]h&]uh1hhjVhhhhhKubeh}(h]jAah ]h"]drm/nouveau uapiah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hdrm/panthor uAPIh]hdrm/panthor uAPI}(hjMghhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjJghhhhhKubj )}(h.. _Introduction:h]h}(h]h ]h"]h$]h&]hʌ introductionuh1j hKhjJghhhNubh)}(h**Introduction**h]j)}(hjhgh]h Introduction}(hjjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfgubah}(h]jegah ]h"] introductionah$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjJghhj3}j{gj[gsj5}jegj[gsubh)}(h0This documentation describes the Panthor IOCTLs.h]h0This documentation describes the Panthor IOCTLs.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhK hjJghhubh)}(hEJust a few generic rules about the data passed to the Panthor IOCTLs:h]hEJust a few generic rules about the data passed to the Panthor IOCTLs:}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjJghhubh)}(hhh](h)}(hsStructures must be aligned on 64-bit/8-byte. If the object is not naturally aligned, a padding field must be added.h]h)}(hsStructures must be aligned on 64-bit/8-byte. If the object is not naturally aligned, a padding field must be added.h]hsStructures must be aligned on 64-bit/8-byte. If the object is not naturally aligned, a padding field must be added.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjgubah}(h]h ]h"]h$]h&]uh1hhjgubh)}(hXFields must be explicitly aligned to their natural type alignment with pad[0..N] fields.h]h)}(hXFields must be explicitly aligned to their natural type alignment with pad[0..N] fields.h]hXFields must be explicitly aligned to their natural type alignment with pad[0..N] fields.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjgubah}(h]h ]h"]h$]h&]uh1hhjgubh)}(hNAll padding fields will be checked by the driver to make sure they are zeroed.h]h)}(hNAll padding fields will be checked by the driver to make sure they are zeroed.h]hNAll padding fields will be checked by the driver to make sure they are zeroed.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjgubah}(h]h ]h"]h$]h&]uh1hhjgubh)}(h-Flags can be added, but not removed/replaced.h]h)}(hjgh]h-Flags can be added, but not removed/replaced.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjgubah}(h]h ]h"]h$]h&]uh1hhjgubh)}(hX9New fields can be added to the main structures (the structures directly passed to the ioctl). Those fields can be added at the end of the structure, or replace existing padding fields. Any new field being added must preserve the behavior that existed before those fields were added when a value of zero is passed.h]h)}(hX9New fields can be added to the main structures (the structures directly passed to the ioctl). Those fields can be added at the end of the structure, or replace existing padding fields. Any new field being added must preserve the behavior that existed before those fields were added when a value of zero is passed.h]hX9New fields can be added to the main structures (the structures directly passed to the ioctl). Those fields can be added at the end of the structure, or replace existing padding fields. Any new field being added must preserve the behavior that existed before those fields were added when a value of zero is passed.}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjhubah}(h]h ]h"]h$]h&]uh1hhjgubh)}(hNew fields can be added to indirect objects (objects pointed by the main structure), iff those objects are passed a size to reflect the size known by the userspace driver (see drm_panthor_obj_array::stride or drm_panthor_dev_query::size).h]h)}(hNew fields can be added to indirect objects (objects pointed by the main structure), iff those objects are passed a size to reflect the size known by the userspace driver (see drm_panthor_obj_array::stride or drm_panthor_dev_query::size).h]hNew fields can be added to indirect objects (objects pointed by the main structure), iff those objects are passed a size to reflect the size known by the userspace driver (see drm_panthor_obj_array::stride or drm_panthor_dev_query::size).}(hj"hhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjhubah}(h]h ]h"]h$]h&]uh1hhjgubh)}(hIf the kernel driver is too old to know some fields, those will be ignored if zero, and otherwise rejected (and so will be zero on output).h]h)}(hIf the kernel driver is too old to know some fields, those will be ignored if zero, and otherwise rejected (and so will be zero on output).h]hIf the kernel driver is too old to know some fields, those will be ignored if zero, and otherwise rejected (and so will be zero on output).}(hj;hhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhK!hj7hubah}(h]h ]h"]h$]h&]uh1hhjgubh)}(h~If userspace is too old to know some fields, those will be zeroed (input) before the structure is parsed by the kernel driver.h]h)}(h~If userspace is too old to know some fields, those will be zeroed (input) before the structure is parsed by the kernel driver.h]h~If userspace is too old to know some fields, those will be zeroed (input) before the structure is parsed by the kernel driver.}(hjThhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhK#hjPhubah}(h]h ]h"]h$]h&]uh1hhjgubh)}(hEach new flag/field addition must come with a driver version update so the userspace driver doesn't have to trial and error to know which flags are supported.h]h)}(hEach new flag/field addition must come with a driver version update so the userspace driver doesn't have to trial and error to know which flags are supported.h]hEach new flag/field addition must come with a driver version update so the userspace driver doesn’t have to trial and error to know which flags are supported.}(hjmhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhK%hjihubah}(h]h ]h"]h$]h&]uh1hhjgubh)}(h`Structures should not contain unions, as this would defeat the extensibility of such structures.h]h)}(h`Structures should not contain unions, as this would defeat the extensibility of such structures.h]h`Structures should not contain unions, as this would defeat the extensibility of such structures.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhK(hjhubah}(h]h ]h"]h$]h&]uh1hhjgubh)}(hrIOCTLs can't be removed or replaced. New IOCTL IDs should be placed at the end of the drm_panthor_ioctl_id enum. h]h)}(hpIOCTLs can't be removed or replaced. New IOCTL IDs should be placed at the end of the drm_panthor_ioctl_id enum.h]hrIOCTLs can’t be removed or replaced. New IOCTL IDs should be placed at the end of the drm_panthor_ioctl_id enum.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhK*hjhubah}(h]h ]h"]h$]h&]uh1hhjgubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjghKhjJghhubj )}(h'.. _MMIO regions exposed to userspace.:h]h}(h]h ]h"]h$]h&]hʌ!mmio-regions-exposed-to-userspaceuh1j hK&hjJghhhNubh)}(h&**MMIO regions exposed to userspace.**h]j)}(hjhh]h"MMIO regions exposed to userspace.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]jhah ]h"]"mmio regions exposed to userspace.ah$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhK0hjJghhj3}jhjhsj5}jhjhsubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&DRM_PANTHOR_USER_MMIO_OFFSET (C macro)c.DRM_PANTHOR_USER_MMIO_OFFSEThNtauh1jhjJghhhNhNubj)}(hhh](j)}(hDRM_PANTHOR_USER_MMIO_OFFSETh]j)}(hDRM_PANTHOR_USER_MMIO_OFFSETh]j!)}(hDRM_PANTHOR_USER_MMIO_OFFSETh]j')}(hjhh]hDRM_PANTHOR_USER_MMIO_OFFSET}(hjhhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjhubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhK1ubah}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhhjihK1ubah}(h]jhah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjihK1hjhhhubjU)}(hhh]h}(h]h ]h"]h$]h&]uh1jThjhhhhjihK1ubeh}(h]h ](jqmacroeh"]h$]h&]jvjqjwj)ijxj)ijyjzj{uh1jhhhjJghNhNubh)}(hXFile offset for all MMIO regions being exposed to userspace. Don't use this value directly, use DRM_PANTHOR_USER__OFFSET values instead. pgoffset passed to mmap2() is an unsigned long, which forces us to use a different offset on 32-bit and 64-bit systems.h]hXFile offset for all MMIO regions being exposed to userspace. Don’t use this value directly, use DRM_PANTHOR_USER__OFFSET values instead. pgoffset passed to mmap2() is an unsigned long, which forces us to use a different offset on 32-bit and 64-bit systems.}(hj-ihhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhK3hjJghhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j/DRM_PANTHOR_USER_FLUSH_ID_MMIO_OFFSET (C macro)'c.DRM_PANTHOR_USER_FLUSH_ID_MMIO_OFFSEThNtauh1jhjJghhhNhNubj)}(hhh](j)}(h%DRM_PANTHOR_USER_FLUSH_ID_MMIO_OFFSETh]j)}(h%DRM_PANTHOR_USER_FLUSH_ID_MMIO_OFFSETh]j!)}(h%DRM_PANTHOR_USER_FLUSH_ID_MMIO_OFFSETh]j')}(hjOih]h%DRM_PANTHOR_USER_FLUSH_ID_MMIO_OFFSET}(hjYihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjUiubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjQihhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhK8ubah}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjMihhhjlihK8ubah}(h]jHiah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjlihK8hjJihhubjU)}(hhh]h}(h]h ]h"]h$]h&]uh1jThjJihhhjlihK8ubeh}(h]h ](jqmacroeh"]h$]h&]jvjqjwjijxjijyjzj{uh1jhhhjJghNhNubh)}(hXFile offset for the LATEST_FLUSH_ID register. The Userspace driver controls GPU cache flushing through CS instructions, but the flush reduction mechanism requires a flush_id. This flush_id could be queried with an ioctl, but Arm provides a well-isolated register page containing only this read-only register, so let's expose this page through a static mmap offset and allow direct mapping of this MMIO region so we can avoid the user <-> kernel round-trip.h]hXFile offset for the LATEST_FLUSH_ID register. The Userspace driver controls GPU cache flushing through CS instructions, but the flush reduction mechanism requires a flush_id. This flush_id could be queried with an ioctl, but Arm provides a well-isolated register page containing only this read-only register, so let’s expose this page through a static mmap offset and allow direct mapping of this MMIO region so we can avoid the user <-> kernel round-trip.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhK:hjJghhubj )}(h.. _IOCTL IDs:h]h}(h]h ]h"]h$]h&]hʌ ioctl-idsuh1j hKj?uh1j hj&jhhhj7jhKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj"jhhhj7jhKubah}(h]jjah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj7jhKhjjhhubjU)}(hhh]h)}(h Object array.h]h Object array.}(hjljhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjijhhubah}(h]h ]h"]h$]h&]uh1jThjjhhhj7jhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjjxjjjyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_obj_array { __u32 stride; __u32 count; __u64 array; }; **Members** ``stride`` Stride of object struct. Used for versioning. ``count`` Number of objects in the array. ``array`` User pointer to an array of objects.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh:}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjjubj)}(hUstruct drm_panthor_obj_array { __u32 stride; __u32 count; __u64 array; };h]hUstruct drm_panthor_obj_array { __u32 stride; __u32 count; __u64 array; };}hjjsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjjubh)}(h **Members**h]j)}(hjjh]hMembers}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjjubj8)}(hhh](j=)}(h9``stride`` Stride of object struct. Used for versioning. h](jC)}(h ``stride``h]j)}(hjjh]hstride}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjjubjT)}(hhh]h)}(h-Stride of object struct. Used for versioning.h]h-Stride of object struct. Used for versioning.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhKhjjubah}(h]h ]h"]h$]h&]uh1jShjjubeh}(h]h ]h"]h$]h&]uh1j<hjjhKhjjubj=)}(h*``count`` Number of objects in the array. h](jC)}(h ``count``h]j)}(hjkh]hcount}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhj kubjT)}(hhh]h)}(hNumber of objects in the array.h]hNumber of objects in the array.}(hj+khhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'khKhj(kubah}(h]h ]h"]h$]h&]uh1jShj kubeh}(h]h ]h"]h$]h&]uh1j<hj'khKhjjubj=)}(h.``array`` User pointer to an array of objects.h](jC)}(h ``array``h]j)}(hjKkh]harray}(hjMkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIkubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjEkubjT)}(hhh]h)}(h$User pointer to an array of objects.h]h$User pointer to an array of objects.}(hjdkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjakubah}(h]h ]h"]h$]h&]uh1jShjEkubeh}(h]h ]h"]h$]h&]uh1j<hj`khKhjjubeh}(h]h ]h"]h$]h&]uh1j7hjjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubh)}(h**Description**h]j)}(hjkh]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjJghhubh)}(hThis object is used to pass an array of objects whose size is subject to changes in future versions of the driver. In order to support this mutability, we pass a stride describing the size of the object as known by userspace.h]hThis object is used to pass an array of objects whose size is subject to changes in future versions of the driver. In order to support this mutability, we pass a stride describing the size of the object as known by userspace.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjJghhubh)}(hYou shouldn't fill drm_panthor_obj_array fields directly. You should instead use the DRM_PANTHOR_OBJ_ARRAY() macro that takes care of initializing the stride to the object size.h]hYou shouldn’t fill drm_panthor_obj_array fields directly. You should instead use the DRM_PANTHOR_OBJ_ARRAY() macro that takes care of initializing the stride to the object size.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjJghhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jDRM_PANTHOR_OBJ_ARRAY (C macro)c.DRM_PANTHOR_OBJ_ARRAYhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hDRM_PANTHOR_OBJ_ARRAYh]j)}(hDRM_PANTHOR_OBJ_ARRAYh]j!)}(hDRM_PANTHOR_OBJ_ARRAYh]j')}(hjkh]hDRM_PANTHOR_OBJ_ARRAY}(hjkhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjkubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjkhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKubah}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjkhhhjkhKubah}(h]jkah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjkhKhjkhhubjU)}(hhh]h}(h]h ]h"]h$]h&]uh1jThjkhhhjkhKubeh}(h]h ](jqmacroeh"]h$]h&]jvjqjwj ljxj ljyjzj{uh1jhhhjJghNhNubh)}(h$``DRM_PANTHOR_OBJ_ARRAY (cnt, ptr)``h]j)}(hjlh]h DRM_PANTHOR_OBJ_ARRAY (cnt, ptr)}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjJghhubj)}(h*Initialize a drm_panthor_obj_array field. h]h)}(h)Initialize a drm_panthor_obj_array field.h]h)Initialize a drm_panthor_obj_array field.}(hj+lhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhj'lubah}(h]h ]h"]h$]h&]uh1jhj9lhKhjJghhubj})}(h**Parameters** ``cnt`` Number of elements in the array. ``ptr`` Pointer to the array to pass to the kernel. **Description** Macro initializing a drm_panthor_obj_array based on the object size as known by userspace.h](h)}(h**Parameters**h]j)}(hjFlh]h Parameters}(hjHlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDlubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhj@lubj8)}(hhh](j=)}(h)``cnt`` Number of elements in the array. h](jC)}(h``cnt``h]j)}(hjelh]hcnt}(hjglhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjclubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhj_lubjT)}(hhh]h)}(h Number of elements in the array.h]h Number of elements in the array.}(hj~lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzlhKhj{lubah}(h]h ]h"]h$]h&]uh1jShj_lubeh}(h]h ]h"]h$]h&]uh1j<hjzlhKhj\lubj=)}(h4``ptr`` Pointer to the array to pass to the kernel. h](jC)}(h``ptr``h]j)}(hjlh]hptr}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjlubjT)}(hhh]h)}(h+Pointer to the array to pass to the kernel.h]h+Pointer to the array to pass to the kernel.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhKhjlubah}(h]h ]h"]h$]h&]uh1jShjlubeh}(h]h ]h"]h$]h&]uh1j<hjlhKhj\lubeh}(h]h ]h"]h$]h&]uh1j7hj@lubh)}(h**Description**h]j)}(hjlh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhj@lubh)}(hZMacro initializing a drm_panthor_obj_array based on the object size as known by userspace.h]hZMacro initializing a drm_panthor_obj_array based on the object size as known by userspace.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhj@lubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_panthor_sync_op_flags (C enum)c.drm_panthor_sync_op_flagshNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_sync_op_flagsh]j)}(henum drm_panthor_sync_op_flagsh](j)}(hjh]henum}(hjmhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjmhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKubj)}(h h]h }(hj,mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhj+mhKubj!)}(hdrm_panthor_sync_op_flagsh]j')}(hjmh]hdrm_panthor_sync_op_flags}(hj>mhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj:mubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjmhhhj+mhKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjmhhhj+mhKubah}(h]jmah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj+mhKhjmhhubjU)}(hhh]h)}(h Synchronization operation flags.h]h Synchronization operation flags.}(hj`mhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhj]mhhubah}(h]h ]h"]h$]h&]uh1jThjmhhhj+mhKubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjxmjxjxmjyjzj{uh1jhhhjJghNhNubj})}(hXk**Constants** ``DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_MASK`` Synchronization handle type mask. ``DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_SYNCOBJ`` Synchronization object type. ``DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_TIMELINE_SYNCOBJ`` Timeline synchronization object type. ``DRM_PANTHOR_SYNC_OP_WAIT`` Wait operation. ``DRM_PANTHOR_SYNC_OP_SIGNAL`` Signal operation.h](h)}(h **Constants**h]j)}(hjmh]h Constants}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhj|mubj8)}(hhh](j=)}(hK``DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_MASK`` Synchronization handle type mask. h](jC)}(h(``DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_MASK``h]j)}(hjmh]h$DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_MASK}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjmubjT)}(hhh]h)}(h!Synchronization handle type mask.h]h!Synchronization handle type mask.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhKhjmubah}(h]h ]h"]h$]h&]uh1jShjmubeh}(h]h ]h"]h$]h&]uh1j<hjmhKhjmubj=)}(hI``DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_SYNCOBJ`` Synchronization object type. h](jC)}(h+``DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_SYNCOBJ``h]j)}(hjmh]h'DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_SYNCOBJ}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjmubjT)}(hhh]h)}(hSynchronization object type.h]hSynchronization object type.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhKhjmubah}(h]h ]h"]h$]h&]uh1jShjmubeh}(h]h ]h"]h$]h&]uh1j<hjmhKhjmubj=)}(h[``DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_TIMELINE_SYNCOBJ`` Timeline synchronization object type. h](jC)}(h4``DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_TIMELINE_SYNCOBJ``h]j)}(hjnh]h0DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_TIMELINE_SYNCOBJ}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhj nubjT)}(hhh]h)}(h%Timeline synchronization object type.h]h%Timeline synchronization object type.}(hj,nhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhj)nubah}(h]h ]h"]h$]h&]uh1jShj nubeh}(h]h ]h"]h$]h&]uh1j<hj(nhKhjmubj=)}(h-``DRM_PANTHOR_SYNC_OP_WAIT`` Wait operation. h](jC)}(h``DRM_PANTHOR_SYNC_OP_WAIT``h]j)}(hjMnh]hDRM_PANTHOR_SYNC_OP_WAIT}(hjOnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKnubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjGnubjT)}(hhh]h)}(hWait operation.h]hWait operation.}(hjfnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbnhKhjcnubah}(h]h ]h"]h$]h&]uh1jShjGnubeh}(h]h ]h"]h$]h&]uh1j<hjbnhKhjmubj=)}(h0``DRM_PANTHOR_SYNC_OP_SIGNAL`` Signal operation.h](jC)}(h``DRM_PANTHOR_SYNC_OP_SIGNAL``h]j)}(hjnh]hDRM_PANTHOR_SYNC_OP_SIGNAL}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjnubjT)}(hhh]h)}(hSignal operation.h]hSignal operation.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjnubah}(h]h ]h"]h$]h&]uh1jShjnubeh}(h]h ]h"]h$]h&]uh1j<hjnhKhjmubeh}(h]h ]h"]h$]h&]uh1j7hj|mubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panthor_sync_op (C struct)c.drm_panthor_sync_ophNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_sync_oph]j)}(hstruct drm_panthor_sync_oph](j)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjnhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhjnhKubj!)}(hdrm_panthor_sync_oph]j')}(hjnh]hdrm_panthor_sync_op}(hjohhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjnubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjnhhhjnhKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjnhhhjnhKubah}(h]jnah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjnhKhjnhhubjU)}(hhh]h)}(hSynchronization operation.h]hSynchronization operation.}(hj"ohhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjohhubah}(h]h ]h"]h$]h&]uh1jThjnhhhjnhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj:ojxj:ojyjzj{uh1jhhhjJghNhNubj})}(hX~**Definition**:: struct drm_panthor_sync_op { __u32 flags; __u32 handle; __u64 timeline_value; }; **Members** ``flags`` Synchronization operation flags. Combination of DRM_PANTHOR_SYNC_OP values. ``handle`` Sync handle. ``timeline_value`` MBZ if (flags & DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_MASK) != DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_TIMELINE_SYNCOBJ.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjFohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBoubh:}(hjBohhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhj>oubj)}(h\struct drm_panthor_sync_op { __u32 flags; __u32 handle; __u64 timeline_value; };h]h\struct drm_panthor_sync_op { __u32 flags; __u32 handle; __u64 timeline_value; };}hj_osbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhj>oubh)}(h **Members**h]j)}(hjpoh]hMembers}(hjrohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnoubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhj>oubj8)}(hhh](j=)}(hV``flags`` Synchronization operation flags. Combination of DRM_PANTHOR_SYNC_OP values. h](jC)}(h ``flags``h]j)}(hjoh]hflags}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjoubjT)}(hhh]h)}(hKSynchronization operation flags. Combination of DRM_PANTHOR_SYNC_OP values.h]hKSynchronization operation flags. Combination of DRM_PANTHOR_SYNC_OP values.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohKhjoubah}(h]h ]h"]h$]h&]uh1jShjoubeh}(h]h ]h"]h$]h&]uh1j<hjohKhjoubj=)}(h``handle`` Sync handle. h](jC)}(h ``handle``h]j)}(hjoh]hhandle}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjoubjT)}(hhh]h)}(h Sync handle.h]h Sync handle.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohKhjoubah}(h]h ]h"]h$]h&]uh1jShjoubeh}(h]h ]h"]h$]h&]uh1j<hjohKhjoubj=)}(h}``timeline_value`` MBZ if (flags & DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_MASK) != DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_TIMELINE_SYNCOBJ.h](jC)}(h``timeline_value``h]j)}(hjph]htimeline_value}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjoubjT)}(hhh]h)}(hjMBZ if (flags & DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_MASK) != DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_TIMELINE_SYNCOBJ.h]hjMBZ if (flags & DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_MASK) != DRM_PANTHOR_SYNC_OP_HANDLE_TYPE_TIMELINE_SYNCOBJ.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjpubah}(h]h ]h"]h$]h&]uh1jShjoubeh}(h]h ]h"]h$]h&]uh1j<hjphKhjoubeh}(h]h ]h"]h$]h&]uh1j7hj>oubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_panthor_dev_query_type (C enum)c.drm_panthor_dev_query_typehNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_dev_query_typeh]j)}(henum drm_panthor_dev_query_typeh](j)}(hjh]henum}(hj[phhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjWphhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKubj)}(h h]h }(hjiphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWphhhjhphKubj!)}(hdrm_panthor_dev_query_typeh]j')}(hjUph]hdrm_panthor_dev_query_type}(hj{phhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjwpubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjWphhhjhphKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjSphhhjhphKubah}(h]jNpah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhphKhjPphhubjU)}(hhh]h)}(h Query typeh]h Query type}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjphhubah}(h]h ]h"]h$]h&]uh1jThjPphhhjhphKubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjpjxjpjyjzj{uh1jhhhjJghNhNubj})}(hXE**Constants** ``DRM_PANTHOR_DEV_QUERY_GPU_INFO`` Query GPU information. ``DRM_PANTHOR_DEV_QUERY_CSIF_INFO`` Query command-stream interface information. ``DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO`` Query timestamp information. ``DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO`` Query allowed group priorities information.h](h)}(h **Constants**h]j)}(hjph]h Constants}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjpubj8)}(hhh](j=)}(h:``DRM_PANTHOR_DEV_QUERY_GPU_INFO`` Query GPU information. h](jC)}(h"``DRM_PANTHOR_DEV_QUERY_GPU_INFO``h]j)}(hjph]hDRM_PANTHOR_DEV_QUERY_GPU_INFO}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjpubjT)}(hhh]h)}(hQuery GPU information.h]hQuery GPU information.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphKhjpubah}(h]h ]h"]h$]h&]uh1jShjpubeh}(h]h ]h"]h$]h&]uh1j<hjphKhjpubj=)}(hP``DRM_PANTHOR_DEV_QUERY_CSIF_INFO`` Query command-stream interface information. h](jC)}(h#``DRM_PANTHOR_DEV_QUERY_CSIF_INFO``h]j)}(hjqh]hDRM_PANTHOR_DEV_QUERY_CSIF_INFO}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjqubjT)}(hhh]h)}(h+Query command-stream interface information.h]h+Query command-stream interface information.}(hj0qhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,qhKhj-qubah}(h]h ]h"]h$]h&]uh1jShjqubeh}(h]h ]h"]h$]h&]uh1j<hj,qhKhjpubj=)}(hF``DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO`` Query timestamp information. h](jC)}(h(``DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO``h]j)}(hjPqh]h$DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO}(hjRqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNqubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjJqubjT)}(hhh]h)}(hQuery timestamp information.h]hQuery timestamp information.}(hjiqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeqhKhjfqubah}(h]h ]h"]h$]h&]uh1jShjJqubeh}(h]h ]h"]h$]h&]uh1j<hjeqhKhjpubj=)}(h[``DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO`` Query allowed group priorities information.h](jC)}(h/``DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO``h]j)}(hjqh]h+DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjqubjT)}(hhh]h)}(h+Query allowed group priorities information.h]h+Query allowed group priorities information.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjqubah}(h]h ]h"]h$]h&]uh1jShjqubeh}(h]h ]h"]h$]h&]uh1j<hjqhKhjpubeh}(h]h ]h"]h$]h&]uh1j7hjpubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubh)}(h**Description**h]j)}(hjqh]h Description}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubh)}(hDPlace new types at the end, don't re-order, don't remove or replace.h]hHPlace new types at the end, don’t re-order, don’t remove or replace.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKhjJghhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_panthor_gpu_coherency (C enum)c.drm_panthor_gpu_coherencyhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_gpu_coherencyh]j)}(henum drm_panthor_gpu_coherencyh](j)}(hjh]henum}(hj rhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjrhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhKubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhjrhKubj!)}(hdrm_panthor_gpu_coherencyh]j')}(hjrh]hdrm_panthor_gpu_coherency}(hj*rhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj&rubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjrhhhjrhKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjrhhhjrhKubah}(h]jqah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjrhKhjqhhubjU)}(hhh]h)}(hType of GPU coherencyh]hType of GPU coherency}(hjLrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjIrhhubah}(h]h ]h"]h$]h&]uh1jThjqhhhjrhKubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjdrjxjdrjyjzj{uh1jhhhjJghNhNubj})}(h**Constants** ``DRM_PANTHOR_GPU_COHERENCY_ACE_LITE`` ACE Lite coherency. ``DRM_PANTHOR_GPU_COHERENCY_ACE`` ACE coherency. ``DRM_PANTHOR_GPU_COHERENCY_NONE`` No coherency.h](h)}(h **Constants**h]j)}(hjnrh]h Constants}(hjprhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlrubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhrubj8)}(hhh](j=)}(h;``DRM_PANTHOR_GPU_COHERENCY_ACE_LITE`` ACE Lite coherency. h](jC)}(h&``DRM_PANTHOR_GPU_COHERENCY_ACE_LITE``h]j)}(hjrh]h"DRM_PANTHOR_GPU_COHERENCY_ACE_LITE}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM hjrubjT)}(hhh]h)}(hACE Lite coherency.h]hACE Lite coherency.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhM hjrubah}(h]h ]h"]h$]h&]uh1jShjrubeh}(h]h ]h"]h$]h&]uh1j<hjrhM hjrubj=)}(h1``DRM_PANTHOR_GPU_COHERENCY_ACE`` ACE coherency. h](jC)}(h!``DRM_PANTHOR_GPU_COHERENCY_ACE``h]j)}(hjrh]hDRM_PANTHOR_GPU_COHERENCY_ACE}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM hjrubjT)}(hhh]h)}(hACE coherency.h]hACE coherency.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhM hjrubah}(h]h ]h"]h$]h&]uh1jShjrubeh}(h]h ]h"]h$]h&]uh1j<hjrhM hjrubj=)}(h0``DRM_PANTHOR_GPU_COHERENCY_NONE`` No coherency.h](jC)}(h"``DRM_PANTHOR_GPU_COHERENCY_NONE``h]j)}(hjrh]hDRM_PANTHOR_GPU_COHERENCY_NONE}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjrubjT)}(hhh]h)}(h No coherency.h]h No coherency.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjsubah}(h]h ]h"]h$]h&]uh1jShjrubeh}(h]h ]h"]h$]h&]uh1j<hjshMhjrubeh}(h]h ]h"]h$]h&]uh1j7hjhrubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panthor_gpu_info (C struct)c.drm_panthor_gpu_infohNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_gpu_infoh]j)}(hstruct drm_panthor_gpu_infoh](j)}(hjh]hstruct}(hjYshhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjUshhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjgshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUshhhjfshMubj!)}(hdrm_panthor_gpu_infoh]j')}(hjSsh]hdrm_panthor_gpu_info}(hjyshhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjusubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjUshhhjfshMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjQshhhjfshMubah}(h]jLsah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjfshMhjNshhubjU)}(hhh]h)}(hGPU informationh]hGPU information}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjshhubah}(h]h ]h"]h$]h&]uh1jThjNshhhjfshMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjsjxjsjyjzj{uh1jhhhjJghNhNubj})}(hX **Definition**:: struct drm_panthor_gpu_info { __u32 gpu_id; #define DRM_PANTHOR_ARCH_MAJOR(x) ((x) >> 28); #define DRM_PANTHOR_ARCH_MINOR(x) (((x) >> 24) & 0xf); #define DRM_PANTHOR_ARCH_REV(x) (((x) >> 20) & 0xf); #define DRM_PANTHOR_PRODUCT_MAJOR(x) (((x) >> 16) & 0xf); #define DRM_PANTHOR_VERSION_MAJOR(x) (((x) >> 12) & 0xf); #define DRM_PANTHOR_VERSION_MINOR(x) (((x) >> 4) & 0xff); #define DRM_PANTHOR_VERSION_STATUS(x) ((x) & 0xf); __u32 gpu_rev; __u32 csf_id; #define DRM_PANTHOR_CSHW_MAJOR(x) (((x) >> 26) & 0x3f); #define DRM_PANTHOR_CSHW_MINOR(x) (((x) >> 20) & 0x3f); #define DRM_PANTHOR_CSHW_REV(x) (((x) >> 16) & 0xf); #define DRM_PANTHOR_MCU_MAJOR(x) (((x) >> 10) & 0x3f); #define DRM_PANTHOR_MCU_MINOR(x) (((x) >> 4) & 0x3f); #define DRM_PANTHOR_MCU_REV(x) ((x) & 0xf); __u32 l2_features; __u32 tiler_features; __u32 mem_features; __u32 mmu_features; #define DRM_PANTHOR_MMU_VA_BITS(x) ((x) & 0xff); __u32 thread_features; __u32 max_threads; __u32 thread_max_workgroup_size; __u32 thread_max_barrier_size; __u32 coherency_features; __u32 texture_features[4]; __u32 as_present; __u32 selected_coherency; __u64 shader_present; __u64 l2_present; __u64 tiler_present; __u32 core_features; __u32 pad; __u64 gpu_features; }; **Members** ``gpu_id`` GPU ID. ``gpu_rev`` GPU revision. ``csf_id`` Command stream frontend ID. ``l2_features`` L2-cache features. ``tiler_features`` Tiler features. ``mem_features`` Memory features. ``mmu_features`` MMU features. ``thread_features`` Thread features. ``max_threads`` Maximum number of threads. ``thread_max_workgroup_size`` Maximum workgroup size. ``thread_max_barrier_size`` Maximum number of threads that can wait simultaneously on a barrier. ``coherency_features`` Coherency features. Combination of drm_panthor_gpu_coherency flags. Note that this is just what the coherency protocols supported by the GPU, but the actual coherency in place depends on the SoC integration and is reflected by drm_panthor_gpu_info::selected_coherency. ``texture_features`` Texture features. ``as_present`` Bitmask encoding the number of address-space exposed by the MMU. ``selected_coherency`` Coherency selected for this device. One of drm_panthor_gpu_coherency. ``shader_present`` Bitmask encoding the shader cores exposed by the GPU. ``l2_present`` Bitmask encoding the L2 caches exposed by the GPU. ``tiler_present`` Bitmask encoding the tiler units exposed by the GPU. ``core_features`` Used to discriminate core variants when they exist. ``pad`` MBZ. ``gpu_features`` Bitmask describing supported GPU-wide featuresh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubh:}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjsubj)}(hXstruct drm_panthor_gpu_info { __u32 gpu_id; #define DRM_PANTHOR_ARCH_MAJOR(x) ((x) >> 28); #define DRM_PANTHOR_ARCH_MINOR(x) (((x) >> 24) & 0xf); #define DRM_PANTHOR_ARCH_REV(x) (((x) >> 20) & 0xf); #define DRM_PANTHOR_PRODUCT_MAJOR(x) (((x) >> 16) & 0xf); #define DRM_PANTHOR_VERSION_MAJOR(x) (((x) >> 12) & 0xf); #define DRM_PANTHOR_VERSION_MINOR(x) (((x) >> 4) & 0xff); #define DRM_PANTHOR_VERSION_STATUS(x) ((x) & 0xf); __u32 gpu_rev; __u32 csf_id; #define DRM_PANTHOR_CSHW_MAJOR(x) (((x) >> 26) & 0x3f); #define DRM_PANTHOR_CSHW_MINOR(x) (((x) >> 20) & 0x3f); #define DRM_PANTHOR_CSHW_REV(x) (((x) >> 16) & 0xf); #define DRM_PANTHOR_MCU_MAJOR(x) (((x) >> 10) & 0x3f); #define DRM_PANTHOR_MCU_MINOR(x) (((x) >> 4) & 0x3f); #define DRM_PANTHOR_MCU_REV(x) ((x) & 0xf); __u32 l2_features; __u32 tiler_features; __u32 mem_features; __u32 mmu_features; #define DRM_PANTHOR_MMU_VA_BITS(x) ((x) & 0xff); __u32 thread_features; __u32 max_threads; __u32 thread_max_workgroup_size; __u32 thread_max_barrier_size; __u32 coherency_features; __u32 texture_features[4]; __u32 as_present; __u32 selected_coherency; __u64 shader_present; __u64 l2_present; __u64 tiler_present; __u32 core_features; __u32 pad; __u64 gpu_features; };Ch]hXstruct drm_panthor_gpu_info { __u32 gpu_id; #define DRM_PANTHOR_ARCH_MAJOR(x) ((x) >> 28); #define DRM_PANTHOR_ARCH_MINOR(x) (((x) >> 24) & 0xf); #define DRM_PANTHOR_ARCH_REV(x) (((x) >> 20) & 0xf); #define DRM_PANTHOR_PRODUCT_MAJOR(x) (((x) >> 16) & 0xf); #define DRM_PANTHOR_VERSION_MAJOR(x) (((x) >> 12) & 0xf); #define DRM_PANTHOR_VERSION_MINOR(x) (((x) >> 4) & 0xff); #define DRM_PANTHOR_VERSION_STATUS(x) ((x) & 0xf); __u32 gpu_rev; __u32 csf_id; #define DRM_PANTHOR_CSHW_MAJOR(x) (((x) >> 26) & 0x3f); #define DRM_PANTHOR_CSHW_MINOR(x) (((x) >> 20) & 0x3f); #define DRM_PANTHOR_CSHW_REV(x) (((x) >> 16) & 0xf); #define DRM_PANTHOR_MCU_MAJOR(x) (((x) >> 10) & 0x3f); #define DRM_PANTHOR_MCU_MINOR(x) (((x) >> 4) & 0x3f); #define DRM_PANTHOR_MCU_REV(x) ((x) & 0xf); __u32 l2_features; __u32 tiler_features; __u32 mem_features; __u32 mmu_features; #define DRM_PANTHOR_MMU_VA_BITS(x) ((x) & 0xff); __u32 thread_features; __u32 max_threads; __u32 thread_max_workgroup_size; __u32 thread_max_barrier_size; __u32 coherency_features; __u32 texture_features[4]; __u32 as_present; __u32 selected_coherency; __u64 shader_present; __u64 l2_present; __u64 tiler_present; __u32 core_features; __u32 pad; __u64 gpu_features; };}hjssbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjsubh)}(h **Members**h]j)}(hjsh]hMembers}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMChjsubj8)}(hhh](j=)}(h``gpu_id`` GPU ID. h](jC)}(h ``gpu_id``h]j)}(hjth]hgpu_id}(hj thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjtubjT)}(hhh]h)}(hGPU ID.h]hGPU ID.}(hj!thhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjtubah}(h]h ]h"]h$]h&]uh1jShjtubeh}(h]h ]h"]h$]h&]uh1j<hjthMhjsubj=)}(h``gpu_rev`` GPU revision. h](jC)}(h ``gpu_rev``h]j)}(hjAth]hgpu_rev}(hjCthhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?tubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM'hj;tubjT)}(hhh]h)}(h GPU revision.h]h GPU revision.}(hjZthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVthM'hjWtubah}(h]h ]h"]h$]h&]uh1jShj;tubeh}(h]h ]h"]h$]h&]uh1j<hjVthM'hjsubj=)}(h'``csf_id`` Command stream frontend ID. h](jC)}(h ``csf_id``h]j)}(hjzth]hcsf_id}(hj|thhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxtubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM*hjttubjT)}(hhh]h)}(hCommand stream frontend ID.h]hCommand stream frontend ID.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthM*hjtubah}(h]h ]h"]h$]h&]uh1jShjttubeh}(h]h ]h"]h$]h&]uh1j<hjthM*hjsubj=)}(h#``l2_features`` L2-cache features. h](jC)}(h``l2_features``h]j)}(hjth]h l2_features}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM3hjtubjT)}(hhh]h)}(hL2-cache features.h]hL2-cache features.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthM3hjtubah}(h]h ]h"]h$]h&]uh1jShjtubeh}(h]h ]h"]h$]h&]uh1j<hjthM3hjsubj=)}(h#``tiler_features`` Tiler features. h](jC)}(h``tiler_features``h]j)}(hjth]htiler_features}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM6hjtubjT)}(hhh]h)}(hTiler features.h]hTiler features.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhM6hjuubah}(h]h ]h"]h$]h&]uh1jShjtubeh}(h]h ]h"]h$]h&]uh1j<hjuhM6hjsubj=)}(h"``mem_features`` Memory features. h](jC)}(h``mem_features``h]j)}(hj%uh]h mem_features}(hj'uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#uubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM9hjuubjT)}(hhh]h)}(hMemory features.h]hMemory features.}(hj>uhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:uhM9hj;uubah}(h]h ]h"]h$]h&]uh1jShjuubeh}(h]h ]h"]h$]h&]uh1j<hj:uhM9hjsubj=)}(h``mmu_features`` MMU features. h](jC)}(h``mmu_features``h]j)}(hj^uh]h mmu_features}(hj`uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\uubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM<hjXuubjT)}(hhh]h)}(h MMU features.h]h MMU features.}(hjwuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsuhM<hjtuubah}(h]h ]h"]h$]h&]uh1jShjXuubeh}(h]h ]h"]h$]h&]uh1j<hjsuhM<hjsubj=)}(h%``thread_features`` Thread features. h](jC)}(h``thread_features``h]j)}(hjuh]hthread_features}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM@hjuubjT)}(hhh]h)}(hThread features.h]hThread features.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhM@hjuubah}(h]h ]h"]h$]h&]uh1jShjuubeh}(h]h ]h"]h$]h&]uh1j<hjuhM@hjsubj=)}(h+``max_threads`` Maximum number of threads. h](jC)}(h``max_threads``h]j)}(hjuh]h max_threads}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMChjuubjT)}(hhh]h)}(hMaximum number of threads.h]hMaximum number of threads.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMChjuubah}(h]h ]h"]h$]h&]uh1jShjuubeh}(h]h ]h"]h$]h&]uh1j<hjuhMChjsubj=)}(h6``thread_max_workgroup_size`` Maximum workgroup size. h](jC)}(h``thread_max_workgroup_size``h]j)}(hj vh]hthread_max_workgroup_size}(hj vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMFhjvubjT)}(hhh]h)}(hMaximum workgroup size.h]hMaximum workgroup size.}(hj"vhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMFhjvubah}(h]h ]h"]h$]h&]uh1jShjvubeh}(h]h ]h"]h$]h&]uh1j<hjvhMFhjsubj=)}(ha``thread_max_barrier_size`` Maximum number of threads that can wait simultaneously on a barrier. h](jC)}(h``thread_max_barrier_size``h]j)}(hjBvh]hthread_max_barrier_size}(hjDvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@vubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMKhjj?uh1j hj(yhhhj9yhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj$yhhhj9yhMubah}(h]jyah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj9yhMhj!yhhubjU)}(hhh]h)}(h$Command stream interface informationh]h$Command stream interface information}(hjnyhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM{hjkyhhubah}(h]h ]h"]h$]h&]uh1jThj!yhhhj9yhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjyjxjyjyjzj{uh1jhhhjJghNhNubj})}(hXu**Definition**:: struct drm_panthor_csif_info { __u32 csg_slot_count; __u32 cs_slot_count; __u32 cs_reg_count; __u32 scoreboard_slot_count; __u32 unpreserved_cs_reg_count; __u32 pad; }; **Members** ``csg_slot_count`` Number of command stream group slots exposed by the firmware. ``cs_slot_count`` Number of command stream slots per group. ``cs_reg_count`` Number of command stream registers. ``scoreboard_slot_count`` Number of scoreboard slots. ``unpreserved_cs_reg_count`` Number of command stream registers reserved by the kernel driver to call a userspace command stream. All registers can be used by a userspace command stream, but the [cs_slot_count - unpreserved_cs_reg_count .. cs_slot_count] registers are used by the kernel when DRM_PANTHOR_IOCTL_GROUP_SUBMIT is called. ``pad`` Padding field, set to zero.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh:}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjyubj)}(hstruct drm_panthor_csif_info { __u32 csg_slot_count; __u32 cs_slot_count; __u32 cs_reg_count; __u32 scoreboard_slot_count; __u32 unpreserved_cs_reg_count; __u32 pad; };h]hstruct drm_panthor_csif_info { __u32 csg_slot_count; __u32 cs_slot_count; __u32 cs_reg_count; __u32 scoreboard_slot_count; __u32 unpreserved_cs_reg_count; __u32 pad; };}hjysbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjyubh)}(h **Members**h]j)}(hjyh]hMembers}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjyubj8)}(hhh](j=)}(hQ``csg_slot_count`` Number of command stream group slots exposed by the firmware. h](jC)}(h``csg_slot_count``h]j)}(hjyh]hcsg_slot_count}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjyubjT)}(hhh]h)}(h=Number of command stream group slots exposed by the firmware.h]h=Number of command stream group slots exposed by the firmware.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jShjyubeh}(h]h ]h"]h$]h&]uh1j<hjyhMhjyubj=)}(h<``cs_slot_count`` Number of command stream slots per group. h](jC)}(h``cs_slot_count``h]j)}(hjzh]h cs_slot_count}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjzubjT)}(hhh]h)}(h)Number of command stream slots per group.h]h)Number of command stream slots per group.}(hj-zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)zhMhj*zubah}(h]h ]h"]h$]h&]uh1jShjzubeh}(h]h ]h"]h$]h&]uh1j<hj)zhMhjyubj=)}(h5``cs_reg_count`` Number of command stream registers. h](jC)}(h``cs_reg_count``h]j)}(hjMzh]h cs_reg_count}(hjOzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKzubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjGzubjT)}(hhh]h)}(h#Number of command stream registers.h]h#Number of command stream registers.}(hjfzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbzhMhjczubah}(h]h ]h"]h$]h&]uh1jShjGzubeh}(h]h ]h"]h$]h&]uh1j<hjbzhMhjyubj=)}(h6``scoreboard_slot_count`` Number of scoreboard slots. h](jC)}(h``scoreboard_slot_count``h]j)}(hjzh]hscoreboard_slot_count}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjzubjT)}(hhh]h)}(hNumber of scoreboard slots.h]hNumber of scoreboard slots.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jShjzubeh}(h]h ]h"]h$]h&]uh1j<hjzhMhjyubj=)}(hXP``unpreserved_cs_reg_count`` Number of command stream registers reserved by the kernel driver to call a userspace command stream. All registers can be used by a userspace command stream, but the [cs_slot_count - unpreserved_cs_reg_count .. cs_slot_count] registers are used by the kernel when DRM_PANTHOR_IOCTL_GROUP_SUBMIT is called. h](jC)}(h``unpreserved_cs_reg_count``h]j)}(hjzh]hunpreserved_cs_reg_count}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjzubjT)}(hhh](h)}(hdNumber of command stream registers reserved by the kernel driver to call a userspace command stream.h]hdNumber of command stream registers reserved by the kernel driver to call a userspace command stream.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjzubh)}(hAll registers can be used by a userspace command stream, but the [cs_slot_count - unpreserved_cs_reg_count .. cs_slot_count] registers are used by the kernel when DRM_PANTHOR_IOCTL_GROUP_SUBMIT is called.h]hAll registers can be used by a userspace command stream, but the [cs_slot_count - unpreserved_cs_reg_count .. cs_slot_count] registers are used by the kernel when DRM_PANTHOR_IOCTL_GROUP_SUBMIT is called.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjzubeh}(h]h ]h"]h$]h&]uh1jShjzubeh}(h]h ]h"]h$]h&]uh1j<hjzhMhjyubj=)}(h#``pad`` Padding field, set to zero.h](jC)}(h``pad``h]j)}(hj{h]hpad}(hj {hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj{ubjT)}(hhh]h)}(hPadding field, set to zero.h]hPadding field, set to zero.}(hj!{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj{ubah}(h]h ]h"]h$]h&]uh1jShj{ubeh}(h]h ]h"]h$]h&]uh1j<hj{hMhjyubeh}(h]h ]h"]h$]h&]uh1j7hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubh)}(h**Description**h]j)}(hjK{h]h Description}(hjM{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI{ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubh)}(hVStructure grouping all queryable information relating to the command stream interface.h]hVStructure grouping all queryable information relating to the command stream interface.}(hja{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM|hjJghhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_panthor_timestamp_info_flags (C enum)"c.drm_panthor_timestamp_info_flagshNtauh1jhjJghhhNhNubj)}(hhh](j)}(h drm_panthor_timestamp_info_flagsh]j)}(h%enum drm_panthor_timestamp_info_flagsh](j)}(hjh]henum}(hj{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj{hhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{hhhj{hMubj!)}(h drm_panthor_timestamp_info_flagsh]j')}(hj{h]h drm_panthor_timestamp_info_flags}(hj{hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj{ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj{hhhj{hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj{hhhj{hMubah}(h]j|{ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj{hMhj~{hhubjU)}(hhh]h)}(h drm_panthor_timestamp_info.flagsh]h drm_panthor_timestamp_info.flags}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj{hhubah}(h]h ]h"]h$]h&]uh1jThj~{hhhj{hMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwj{jxj{jyjzj{uh1jhhhjJghNhNubj})}(hXr**Constants** ``DRM_PANTHOR_TIMESTAMP_GPU`` Query GPU time. ``DRM_PANTHOR_TIMESTAMP_CPU_NONE`` Don't query CPU time. ``DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC`` Query CPU time using CLOCK_MONOTONIC. ``DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC_RAW`` Query CPU time using CLOCK_MONOTONIC_RAW. ``DRM_PANTHOR_TIMESTAMP_CPU_TYPE_MASK`` Space reserved for CPU clock type. ``DRM_PANTHOR_TIMESTAMP_GPU_OFFSET`` Query GPU offset. ``DRM_PANTHOR_TIMESTAMP_GPU_CYCLE_COUNT`` Query GPU cycle count. ``DRM_PANTHOR_TIMESTAMP_FREQ`` Query timestamp frequency. ``DRM_PANTHOR_TIMESTAMP_DURATION`` Return duration of time query.h](h)}(h **Constants**h]j)}(hj{h]h Constants}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj{ubj8)}(hhh](j=)}(h.``DRM_PANTHOR_TIMESTAMP_GPU`` Query GPU time. h](jC)}(h``DRM_PANTHOR_TIMESTAMP_GPU``h]j)}(hj |h]hDRM_PANTHOR_TIMESTAMP_GPU}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj |ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj|ubjT)}(hhh]h)}(hQuery GPU time.h]hQuery GPU time.}(hj%|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!|hMhj"|ubah}(h]h ]h"]h$]h&]uh1jShj|ubeh}(h]h ]h"]h$]h&]uh1j<hj!|hMhj|ubj=)}(h9``DRM_PANTHOR_TIMESTAMP_CPU_NONE`` Don't query CPU time. h](jC)}(h"``DRM_PANTHOR_TIMESTAMP_CPU_NONE``h]j)}(hjE|h]hDRM_PANTHOR_TIMESTAMP_CPU_NONE}(hjG|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC|ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj?|ubjT)}(hhh]h)}(hDon't query CPU time.h]hDon’t query CPU time.}(hj^|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ|hMhj[|ubah}(h]h ]h"]h$]h&]uh1jShj?|ubeh}(h]h ]h"]h$]h&]uh1j<hjZ|hMhj|ubj=)}(hN``DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC`` Query CPU time using CLOCK_MONOTONIC. h](jC)}(h'``DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC``h]j)}(hj~|h]h#DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj||ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjx|ubjT)}(hhh]h)}(h%Query CPU time using CLOCK_MONOTONIC.h]h%Query CPU time using CLOCK_MONOTONIC.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jShjx|ubeh}(h]h ]h"]h$]h&]uh1j<hj|hMhj|ubj=)}(hV``DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC_RAW`` Query CPU time using CLOCK_MONOTONIC_RAW. h](jC)}(h+``DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC_RAW``h]j)}(hj|h]h'DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC_RAW}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj|ubjT)}(hhh]h)}(h)Query CPU time using CLOCK_MONOTONIC_RAW.h]h)Query CPU time using CLOCK_MONOTONIC_RAW.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jShj|ubeh}(h]h ]h"]h$]h&]uh1j<hj|hMhj|ubj=)}(hK``DRM_PANTHOR_TIMESTAMP_CPU_TYPE_MASK`` Space reserved for CPU clock type. h](jC)}(h'``DRM_PANTHOR_TIMESTAMP_CPU_TYPE_MASK``h]j)}(hj|h]h#DRM_PANTHOR_TIMESTAMP_CPU_TYPE_MASK}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj|ubjT)}(hhh]h)}(h"Space reserved for CPU clock type.h]h"Space reserved for CPU clock type.}(hj }hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jShj|ubeh}(h]h ]h"]h$]h&]uh1j<hj}hMhj|ubj=)}(h7``DRM_PANTHOR_TIMESTAMP_GPU_OFFSET`` Query GPU offset. h](jC)}(h$``DRM_PANTHOR_TIMESTAMP_GPU_OFFSET``h]j)}(hj)}h]h DRM_PANTHOR_TIMESTAMP_GPU_OFFSET}(hj+}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'}ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj#}ubjT)}(hhh]h)}(hQuery GPU offset.h]hQuery GPU offset.}(hjB}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>}hMhj?}ubah}(h]h ]h"]h$]h&]uh1jShj#}ubeh}(h]h ]h"]h$]h&]uh1j<hj>}hMhj|ubj=)}(hA``DRM_PANTHOR_TIMESTAMP_GPU_CYCLE_COUNT`` Query GPU cycle count. h](jC)}(h)``DRM_PANTHOR_TIMESTAMP_GPU_CYCLE_COUNT``h]j)}(hjb}h]h%DRM_PANTHOR_TIMESTAMP_GPU_CYCLE_COUNT}(hjd}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`}ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj\}ubjT)}(hhh]h)}(hQuery GPU cycle count.h]hQuery GPU cycle count.}(hj{}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw}hMhjx}ubah}(h]h ]h"]h$]h&]uh1jShj\}ubeh}(h]h ]h"]h$]h&]uh1j<hjw}hMhj|ubj=)}(h:``DRM_PANTHOR_TIMESTAMP_FREQ`` Query timestamp frequency. h](jC)}(h``DRM_PANTHOR_TIMESTAMP_FREQ``h]j)}(hj}h]hDRM_PANTHOR_TIMESTAMP_FREQ}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj}ubjT)}(hhh]h)}(hQuery timestamp frequency.h]hQuery timestamp frequency.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jShj}ubeh}(h]h ]h"]h$]h&]uh1j<hj}hMhj|ubj=)}(hA``DRM_PANTHOR_TIMESTAMP_DURATION`` Return duration of time query.h](jC)}(h"``DRM_PANTHOR_TIMESTAMP_DURATION``h]j)}(hj}h]hDRM_PANTHOR_TIMESTAMP_DURATION}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj}ubjT)}(hhh]h)}(hReturn duration of time query.h]hReturn duration of time query.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj}ubah}(h]h ]h"]h$]h&]uh1jShj}ubeh}(h]h ]h"]h$]h&]uh1j<hj}hMhj|ubeh}(h]h ]h"]h$]h&]uh1j7hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_panthor_timestamp_info (C struct)c.drm_panthor_timestamp_infohNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_timestamp_infoh]j)}(h!struct drm_panthor_timestamp_infoh](j)}(hjh]hstruct}(hj.~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj*~hhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hj<~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*~hhhj;~hMubj!)}(hdrm_panthor_timestamp_infoh]j')}(hj(~h]hdrm_panthor_timestamp_info}(hjN~hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjJ~ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj*~hhhj;~hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj&~hhhj;~hMubah}(h]j!~ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj;~hMhj#~hhubjU)}(hhh]h)}(hTimestamp informationh]hTimestamp information}(hjp~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjm~hhubah}(h]h ]h"]h$]h&]uh1jThj#~hhhj;~hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj~jxj~jyjzj{uh1jhhhjJghNhNubj})}(hXI**Definition**:: struct drm_panthor_timestamp_info { __u64 timestamp_frequency; __u64 current_timestamp; __u64 timestamp_offset; __u32 flags; __u32 duration_nsec; __u64 cycle_count; __u64 cpu_timestamp_sec; __u64 cpu_timestamp_nsec; }; **Members** ``timestamp_frequency`` The frequency of the timestamp timer or 0 if unknown. ``current_timestamp`` The current GPU timestamp. ``timestamp_offset`` The offset of the GPU timestamp timer. ``flags`` Bitmask of drm_panthor_timestamp_info_flags. If set to 0, then it is interpreted as: DRM_PANTHOR_TIMESTAMP_GPU | DRM_PANTHOR_TIMESTAMP_GPU_OFFSET | DRM_PANTHOR_TIMESTAMP_FREQ Note: these flags are exclusive to each other (only one can be used): - DRM_PANTHOR_TIMESTAMP_CPU_NONE - DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC - DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC_RAW ``duration_nsec`` Duration of time query. ``cycle_count`` Value of GPU_CYCLE_COUNT. ``cpu_timestamp_sec`` Seconds part of CPU timestamp. ``cpu_timestamp_nsec`` Nanseconds part of CPU timestamp.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubh:}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj~ubj)}(hstruct drm_panthor_timestamp_info { __u64 timestamp_frequency; __u64 current_timestamp; __u64 timestamp_offset; __u32 flags; __u32 duration_nsec; __u64 cycle_count; __u64 cpu_timestamp_sec; __u64 cpu_timestamp_nsec; };h]hstruct drm_panthor_timestamp_info { __u64 timestamp_frequency; __u64 current_timestamp; __u64 timestamp_offset; __u32 flags; __u32 duration_nsec; __u64 cycle_count; __u64 cpu_timestamp_sec; __u64 cpu_timestamp_nsec; };}hj~sbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj~ubh)}(h **Members**h]j)}(hj~h]hMembers}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj~ubj8)}(hhh](j=)}(hN``timestamp_frequency`` The frequency of the timestamp timer or 0 if unknown. h](jC)}(h``timestamp_frequency``h]j)}(hj~h]htimestamp_frequency}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj~ubjT)}(hhh]h)}(h5The frequency of the timestamp timer or 0 if unknown.h]h5The frequency of the timestamp timer or 0 if unknown.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj~ubah}(h]h ]h"]h$]h&]uh1jShj~ubeh}(h]h ]h"]h$]h&]uh1j<hj~hMhj~ubj=)}(h1``current_timestamp`` The current GPU timestamp. h](jC)}(h``current_timestamp``h]j)}(hjh]hcurrent_timestamp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(hThe current GPU timestamp.h]hThe current GPU timestamp.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj,hMhj~ubj=)}(h<``timestamp_offset`` The offset of the GPU timestamp timer. h](jC)}(h``timestamp_offset``h]j)}(hjPh]htimestamp_offset}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJubjT)}(hhh]h)}(h&The offset of the GPU timestamp timer.h]h&The offset of the GPU timestamp timer.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1jShjJubeh}(h]h ]h"]h$]h&]uh1j<hjehMhj~ubj=)}(hXu``flags`` Bitmask of drm_panthor_timestamp_info_flags. If set to 0, then it is interpreted as: DRM_PANTHOR_TIMESTAMP_GPU | DRM_PANTHOR_TIMESTAMP_GPU_OFFSET | DRM_PANTHOR_TIMESTAMP_FREQ Note: these flags are exclusive to each other (only one can be used): - DRM_PANTHOR_TIMESTAMP_CPU_NONE - DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC - DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC_RAW h](jC)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(h,Bitmask of drm_panthor_timestamp_info_flags.h]h,Bitmask of drm_panthor_timestamp_info_flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh]j=)}(hIf set to 0, then it is interpreted as: DRM_PANTHOR_TIMESTAMP_GPU | DRM_PANTHOR_TIMESTAMP_GPU_OFFSET | DRM_PANTHOR_TIMESTAMP_FREQ h](jC)}(h'If set to 0, then it is interpreted as:h]h'If set to 0, then it is interpreted as:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(hYDRM_PANTHOR_TIMESTAMP_GPU | DRM_PANTHOR_TIMESTAMP_GPU_OFFSET | DRM_PANTHOR_TIMESTAMP_FREQh]hYDRM_PANTHOR_TIMESTAMP_GPU | DRM_PANTHOR_TIMESTAMP_GPU_OFFSET | DRM_PANTHOR_TIMESTAMP_FREQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubah}(h]h ]h"]h$]h&]uh1j7hjubh)}(hNote: these flags are exclusive to each other (only one can be used): - DRM_PANTHOR_TIMESTAMP_CPU_NONE - DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC - DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC_RAWh]hNote: these flags are exclusive to each other (only one can be used): - DRM_PANTHOR_TIMESTAMP_CPU_NONE - DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC - DRM_PANTHOR_TIMESTAMP_CPU_MONOTONIC_RAW}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhj~ubj=)}(h*``duration_nsec`` Duration of time query. h](jC)}(h``duration_nsec``h]j)}(hj h]h duration_nsec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(hDuration of time query.h]hDuration of time query.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj!hMhj~ubj=)}(h*``cycle_count`` Value of GPU_CYCLE_COUNT. h](jC)}(h``cycle_count``h]j)}(hjEh]h cycle_count}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj?ubjT)}(hhh]h)}(hValue of GPU_CYCLE_COUNT.h]hValue of GPU_CYCLE_COUNT.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jShj?ubeh}(h]h ]h"]h$]h&]uh1j<hjZhMhj~ubj=)}(h5``cpu_timestamp_sec`` Seconds part of CPU timestamp. h](jC)}(h``cpu_timestamp_sec``h]j)}(hj~h]hcpu_timestamp_sec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjxubjT)}(hhh]h)}(hSeconds part of CPU timestamp.h]hSeconds part of CPU timestamp.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjxubeh}(h]h ]h"]h$]h&]uh1j<hjhMhj~ubj=)}(h8``cpu_timestamp_nsec`` Nanseconds part of CPU timestamp.h](jC)}(h``cpu_timestamp_nsec``h]j)}(hjh]hcpu_timestamp_nsec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(h!Nanseconds part of CPU timestamp.h]h!Nanseconds part of CPU timestamp.}(hjЀhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj̀ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj̀hMhj~ubeh}(h]h ]h"]h$]h&]uh1j7hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubh)}(hKStructure grouping all queryable information relating to the GPU timestamp.h]hKStructure grouping all queryable information relating to the GPU timestamp.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j,drm_panthor_group_priorities_info (C struct)#c.drm_panthor_group_priorities_infohNtauh1jhjJghhhNhNubj)}(hhh](j)}(h!drm_panthor_group_priorities_infoh]j)}(h(struct drm_panthor_group_priorities_infoh](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj4hhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhjEhMubj!)}(h!drm_panthor_group_priorities_infoh]j')}(hj2h]h!drm_panthor_group_priorities_info}(hjXhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjTubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj4hhhjEhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj0hhhjEhMubah}(h]j+ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjEhMhj-hhubjU)}(hhh]h)}(hGroup priorities informationh]hGroup priorities information}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjwhhubah}(h]h ]h"]h$]h&]uh1jThj-hhhjEhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hX"**Definition**:: struct drm_panthor_group_priorities_info { __u8 allowed_mask; __u8 pad[3]; }; **Members** ``allowed_mask`` Bitmask of the allowed group priorities. Each bit represents a variant of the enum drm_panthor_group_priority. ``pad`` Padding fields, MBZ.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj)}(hUstruct drm_panthor_group_priorities_info { __u8 allowed_mask; __u8 pad[3]; };h]hUstruct drm_panthor_group_priorities_info { __u8 allowed_mask; __u8 pad[3]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(h **Members**h]j)}(hjȁh]hMembers}(hjʁhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƁubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh](j=)}(h``allowed_mask`` Bitmask of the allowed group priorities. Each bit represents a variant of the enum drm_panthor_group_priority. h](jC)}(h``allowed_mask``h]j)}(hjh]h allowed_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(h(Bitmask of the allowed group priorities.h]h(Bitmask of the allowed group priorities.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(hEEach bit represents a variant of the enum drm_panthor_group_priority.h]hEEach bit represents a variant of the enum drm_panthor_group_priority.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjށubj=)}(h``pad`` Padding fields, MBZ.h](jC)}(h``pad``h]j)}(hj/h]hpad}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj)ubjT)}(hhh]h)}(hPadding fields, MBZ.h]hPadding fields, MBZ.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjEubah}(h]h ]h"]h$]h&]uh1jShj)ubeh}(h]h ]h"]h$]h&]uh1j<hjDhMhjށubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubh)}(h**Description**h]j)}(hjrh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubh)}(hVStructure grouping all queryable information relating to the allowed group priorities.h]hVStructure grouping all queryable information relating to the allowed group priorities.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_panthor_dev_query (C struct)c.drm_panthor_dev_queryhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_dev_queryh]j)}(hstruct drm_panthor_dev_queryh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_panthor_dev_queryh]j')}(hjh]hdrm_panthor_dev_query}(hjЂhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hĵubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(h/Arguments passed to DRM_PANTHOR_IOCTL_DEV_QUERYh]h/Arguments passed to DRM_PANTHOR_IOCTL_DEV_QUERY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj jxj jyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_dev_query { __u32 type; __u32 size; __u64 pointer; }; **Members** ``type`` the query type (see drm_panthor_dev_query_type). ``size`` size of the type being queried. If pointer is NULL, size is updated by the driver to provide the output structure size. If pointer is not NULL, the driver will only copy min(size, actual_structure_size) bytes to the pointer, and update the size accordingly. This allows us to extend query types without breaking userspace. ``pointer`` user pointer to a query type struct. Pointer can be NULL, in which case, nothing is copied, but the actual structure size is returned. If not NULL, it must point to a location that's large enough to hold size bytes.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj)}(hTstruct drm_panthor_dev_query { __u32 type; __u32 size; __u64 pointer; };h]hTstruct drm_panthor_dev_query { __u32 type; __u32 size; __u64 pointer; };}hj/sbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(h **Members**h]j)}(hj@h]hMembers}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh](j=)}(h:``type`` the query type (see drm_panthor_dev_query_type). h](jC)}(h``type``h]j)}(hj_h]htype}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjYubjT)}(hhh]h)}(h0the query type (see drm_panthor_dev_query_type).h]h0the query type (see drm_panthor_dev_query_type).}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1jShjYubeh}(h]h ]h"]h$]h&]uh1j<hjthMhjVubj=)}(hXM``size`` size of the type being queried. If pointer is NULL, size is updated by the driver to provide the output structure size. If pointer is not NULL, the driver will only copy min(size, actual_structure_size) bytes to the pointer, and update the size accordingly. This allows us to extend query types without breaking userspace. h](jC)}(h``size``h]j)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM hjubjT)}(hhh](h)}(hsize of the type being queried.h]hsize of the type being queried.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(hX"If pointer is NULL, size is updated by the driver to provide the output structure size. If pointer is not NULL, the driver will only copy min(size, actual_structure_size) bytes to the pointer, and update the size accordingly. This allows us to extend query types without breaking userspace.h]hX"If pointer is NULL, size is updated by the driver to provide the output structure size. If pointer is not NULL, the driver will only copy min(size, actual_structure_size) bytes to the pointer, and update the size accordingly. This allows us to extend query types without breaking userspace.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM hjVubj=)}(h``pointer`` user pointer to a query type struct. Pointer can be NULL, in which case, nothing is copied, but the actual structure size is returned. If not NULL, it must point to a location that's large enough to hold size bytes.h](jC)}(h ``pointer``h]j)}(hjh]hpointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj߃ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjۃubjT)}(hhh](h)}(h$user pointer to a query type struct.h]h$user pointer to a query type struct.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(hPointer can be NULL, in which case, nothing is copied, but the actual structure size is returned. If not NULL, it must point to a location that's large enough to hold size bytes.h]hPointer can be NULL, in which case, nothing is copied, but the actual structure size is returned. If not NULL, it must point to a location that’s large enough to hold size bytes.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubeh}(h]h ]h"]h$]h&]uh1jShjۃubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjVubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_panthor_vm_create (C struct)c.drm_panthor_vm_createhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_vm_createh]j)}(hstruct drm_panthor_vm_createh](j)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjFhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjWhMubj!)}(hdrm_panthor_vm_createh]j')}(hjDh]hdrm_panthor_vm_create}(hjjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjfubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjFhhhjWhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjBhhhjWhMubah}(h]j=ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjWhMhj?hhubjU)}(hhh]h)}(h/Arguments passed to DRM_PANTHOR_IOCTL_VM_CREATEh]h/Arguments passed to DRM_PANTHOR_IOCTL_VM_CREATE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThj?hhhjWhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_vm_create { __u32 flags; __u32 id; __u64 user_va_range; }; **Members** ``flags`` VM flags, MBZ. ``id`` Returned VM ID. ``user_va_range`` Size of the VA space reserved for user objects. The kernel will pick the remaining space to map kernel-only objects to the VM (heap chunks, heap context, ring buffers, kernel synchronization objects, ...). If the space left for kernel objects is too small, kernel object allocation will fail further down the road. One can use drm_panthor_gpu_info::mmu_features to extract the total virtual address range, and chose a user_va_range that leaves some space to the kernel. If user_va_range is zero, the kernel will pick a sensible value based on TASK_SIZE and the virtual range supported by the GPU MMU (the kernel/user split should leave enough VA space for userspace processes to support SVM, while still allowing the kernel to map some amount of kernel objects in the kernel VA range). The value chosen by the driver will be returned in **user_va_range**. User VA space always starts at 0x0, kernel VA space is always placed after the user VA range.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj)}(hYstruct drm_panthor_vm_create { __u32 flags; __u32 id; __u64 user_va_range; };h]hYstruct drm_panthor_vm_create { __u32 flags; __u32 id; __u64 user_va_range; };}hjɄsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(h **Members**h]j)}(hjڄh]hMembers}(hj܄hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj؄ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM$hjubj8)}(hhh](j=)}(h``flags`` VM flags, MBZ. h](jC)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(hVM flags, MBZ.h]hVM flags, MBZ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``id`` Returned VM ID. h](jC)}(h``id``h]j)}(hj2h]hid}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj,ubjT)}(hhh]h)}(hReturned VM ID.h]hReturned VM ID.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jShj,ubeh}(h]h ]h"]h$]h&]uh1j<hjGhMhjubj=)}(hX``user_va_range`` Size of the VA space reserved for user objects. The kernel will pick the remaining space to map kernel-only objects to the VM (heap chunks, heap context, ring buffers, kernel synchronization objects, ...). If the space left for kernel objects is too small, kernel object allocation will fail further down the road. One can use drm_panthor_gpu_info::mmu_features to extract the total virtual address range, and chose a user_va_range that leaves some space to the kernel. If user_va_range is zero, the kernel will pick a sensible value based on TASK_SIZE and the virtual range supported by the GPU MMU (the kernel/user split should leave enough VA space for userspace processes to support SVM, while still allowing the kernel to map some amount of kernel objects in the kernel VA range). The value chosen by the driver will be returned in **user_va_range**. User VA space always starts at 0x0, kernel VA space is always placed after the user VA range.h](jC)}(h``user_va_range``h]j)}(hjkh]h user_va_range}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM3hjeubjT)}(hhh](h)}(h/Size of the VA space reserved for user objects.h]h/Size of the VA space reserved for user objects.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM#hjubh)}(hXThe kernel will pick the remaining space to map kernel-only objects to the VM (heap chunks, heap context, ring buffers, kernel synchronization objects, ...). If the space left for kernel objects is too small, kernel object allocation will fail further down the road. One can use drm_panthor_gpu_info::mmu_features to extract the total virtual address range, and chose a user_va_range that leaves some space to the kernel.h]hXThe kernel will pick the remaining space to map kernel-only objects to the VM (heap chunks, heap context, ring buffers, kernel synchronization objects, ...). If the space left for kernel objects is too small, kernel object allocation will fail further down the road. One can use drm_panthor_gpu_info::mmu_features to extract the total virtual address range, and chose a user_va_range that leaves some space to the kernel.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM%hjubh)}(hXIf user_va_range is zero, the kernel will pick a sensible value based on TASK_SIZE and the virtual range supported by the GPU MMU (the kernel/user split should leave enough VA space for userspace processes to support SVM, while still allowing the kernel to map some amount of kernel objects in the kernel VA range). The value chosen by the driver will be returned in **user_va_range**.h](hXoIf user_va_range is zero, the kernel will pick a sensible value based on TASK_SIZE and the virtual range supported by the GPU MMU (the kernel/user split should leave enough VA space for userspace processes to support SVM, while still allowing the kernel to map some amount of kernel objects in the kernel VA range). The value chosen by the driver will be returned in }(hjhhhNhNubj)}(h**user_va_range**h]h user_va_range}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM,hjubh)}(h]User VA space always starts at 0x0, kernel VA space is always placed after the user VA range.h]h]User VA space always starts at 0x0, kernel VA space is always placed after the user VA range.}(hjÅhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM3hjubeh}(h]h ]h"]h$]h&]uh1jShjeubeh}(h]h ]h"]h$]h&]uh1j<hjhM3hjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_panthor_vm_destroy (C struct)c.drm_panthor_vm_destroyhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_vm_destroyh]j)}(hstruct drm_panthor_vm_destroyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM:ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM:ubj!)}(hdrm_panthor_vm_destroyh]j')}(hjh]hdrm_panthor_vm_destroy}(hj#hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhM:ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhM:ubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhM:hjhhubjU)}(hhh]h)}(h0Arguments passed to DRM_PANTHOR_IOCTL_VM_DESTROYh]h0Arguments passed to DRM_PANTHOR_IOCTL_VM_DESTROY}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM9hjBhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhM:ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj]jxj]jyjzj{uh1jhhhjJghNhNubj})}(h**Definition**:: struct drm_panthor_vm_destroy { __u32 id; __u32 pad; }; **Members** ``id`` ID of the VM to destroy. ``pad`` MBZ.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh:}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM=hjaubj)}(h?struct drm_panthor_vm_destroy { __u32 id; __u32 pad; };h]h?struct drm_panthor_vm_destroy { __u32 id; __u32 pad; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM?hjaubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMDhjaubj8)}(hhh](j=)}(h ``id`` ID of the VM to destroy. h](jC)}(h``id``h]j)}(hjh]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM=hjubjT)}(hhh]h)}(hID of the VM to destroy.h]hID of the VM to destroy.}(hjˆhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdžhM=hjȆubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjdžhM=hjubj=)}(h ``pad`` MBZ.h](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM?hjubjT)}(hhh]h)}(hMBZ.h]hMBZ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM@hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM?hjubeh}(h]h ]h"]h$]h&]uh1j7hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_panthor_vm_bind_op_flags (C enum)c.drm_panthor_vm_bind_op_flagshNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_vm_bind_op_flagsh]j)}(h!enum drm_panthor_vm_bind_op_flagsh](j)}(hjh]henum}(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjAhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMFubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhjRhMFubj!)}(hdrm_panthor_vm_bind_op_flagsh]j')}(hj?h]hdrm_panthor_vm_bind_op_flags}(hjehhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjaubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjAhhhjRhMFubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj=hhhjRhMFubah}(h]j8ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjRhMFhj:hhubjU)}(hhh]h)}(hVM bind operation flagsh]hVM bind operation flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMDhjhhubah}(h]h ]h"]h$]h&]uh1jThj:hhhjRhMFubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hXO**Constants** ``DRM_PANTHOR_VM_BIND_OP_MAP_READONLY`` Map the memory read-only. Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP. ``DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC`` Map the memory not-executable. Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP. ``DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED`` Map the memory uncached. Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP. ``DRM_PANTHOR_VM_BIND_OP_TYPE_MASK`` Mask used to determine the type of operation. ``DRM_PANTHOR_VM_BIND_OP_TYPE_MAP`` Map operation. ``DRM_PANTHOR_VM_BIND_OP_TYPE_UNMAP`` Unmap operation. ``DRM_PANTHOR_VM_BIND_OP_TYPE_SYNC_ONLY`` No VM operation. Just serves as a synchronization point on a VM queue. Only valid if ``DRM_PANTHOR_VM_BIND_ASYNC`` is set in drm_panthor_vm_bind::flags, and drm_panthor_vm_bind_op::syncs contains at least one element.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMHhjubj8)}(hhh](j=)}(ht``DRM_PANTHOR_VM_BIND_OP_MAP_READONLY`` Map the memory read-only. Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP. h](jC)}(h'``DRM_PANTHOR_VM_BIND_OP_MAP_READONLY``h]j)}(hjȇh]h#DRM_PANTHOR_VM_BIND_OP_MAP_READONLY}(hjʇhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƇubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMMhj‡ubjT)}(hhh](h)}(hMap the memory read-only.h]hMap the memory read-only.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMKhjއubh)}(h0Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP.h]h0Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj݇hMMhjއubeh}(h]h ]h"]h$]h&]uh1jShj‡ubeh}(h]h ]h"]h$]h&]uh1j<hj݇hMMhjubj=)}(hw``DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC`` Map the memory not-executable. Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP. h](jC)}(h%``DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC``h]j)}(hjh]h!DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMRhj ubjT)}(hhh](h)}(hMap the memory not-executable.h]hMap the memory not-executable.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMPhj&ubh)}(h0Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP.h]h0Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMRhj&ubeh}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj%hMRhjubj=)}(hs``DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED`` Map the memory uncached. Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP. h](jC)}(h'``DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED``h]j)}(hjXh]h#DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMWhjRubjT)}(hhh](h)}(hMap the memory uncached.h]hMap the memory uncached.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMUhjnubh)}(h0Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP.h]h0Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMWhjnubeh}(h]h ]h"]h$]h&]uh1jShjRubeh}(h]h ]h"]h$]h&]uh1j<hjmhMWhjubj=)}(hS``DRM_PANTHOR_VM_BIND_OP_TYPE_MASK`` Mask used to determine the type of operation. h](jC)}(h$``DRM_PANTHOR_VM_BIND_OP_TYPE_MASK``h]j)}(hjh]h DRM_PANTHOR_VM_BIND_OP_TYPE_MASK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMZhjubjT)}(hhh]h)}(h-Mask used to determine the type of operation.h]h-Mask used to determine the type of operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMZhjubj=)}(h3``DRM_PANTHOR_VM_BIND_OP_TYPE_MAP`` Map operation. h](jC)}(h#``DRM_PANTHOR_VM_BIND_OP_TYPE_MAP``h]j)}(hjوh]hDRM_PANTHOR_VM_BIND_OP_TYPE_MAP}(hjۈhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj׈ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM]hjӈubjT)}(hhh]h)}(hMap operation.h]hMap operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM]hjubah}(h]h ]h"]h$]h&]uh1jShjӈubeh}(h]h ]h"]h$]h&]uh1j<hjhM]hjubj=)}(h7``DRM_PANTHOR_VM_BIND_OP_TYPE_UNMAP`` Unmap operation. h](jC)}(h%``DRM_PANTHOR_VM_BIND_OP_TYPE_UNMAP``h]j)}(hjh]h!DRM_PANTHOR_VM_BIND_OP_TYPE_UNMAP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM`hj ubjT)}(hhh]h)}(hUnmap operation.h]hUnmap operation.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hM`hj(ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj'hM`hjubj=)}(hX``DRM_PANTHOR_VM_BIND_OP_TYPE_SYNC_ONLY`` No VM operation. Just serves as a synchronization point on a VM queue. Only valid if ``DRM_PANTHOR_VM_BIND_ASYNC`` is set in drm_panthor_vm_bind::flags, and drm_panthor_vm_bind_op::syncs contains at least one element.h](jC)}(h)``DRM_PANTHOR_VM_BIND_OP_TYPE_SYNC_ONLY``h]j)}(hjKh]h%DRM_PANTHOR_VM_BIND_OP_TYPE_SYNC_ONLY}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMghjEubjT)}(hhh](h)}(hNo VM operation.h]hNo VM operation.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMchjaubh)}(h5Just serves as a synchronization point on a VM queue.h]h5Just serves as a synchronization point on a VM queue.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMehjaubh)}(hOnly valid if ``DRM_PANTHOR_VM_BIND_ASYNC`` is set in drm_panthor_vm_bind::flags, and drm_panthor_vm_bind_op::syncs contains at least one element.h](hOnly valid if }(hjhhhNhNubj)}(h``DRM_PANTHOR_VM_BIND_ASYNC``h]hDRM_PANTHOR_VM_BIND_ASYNC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhg is set in drm_panthor_vm_bind::flags, and drm_panthor_vm_bind_op::syncs contains at least one element.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`hMghjaubeh}(h]h ]h"]h$]h&]uh1jShjEubeh}(h]h ]h"]h$]h&]uh1j<hj`hMghjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_panthor_vm_bind_op (C struct)c.drm_panthor_vm_bind_ophNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_vm_bind_oph]j)}(hstruct drm_panthor_vm_bind_oph](j)}(hjh]hstruct}(hjԉhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjЉhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMmubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjЉhhhjhMmubj!)}(hdrm_panthor_vm_bind_oph]j')}(hjΉh]hdrm_panthor_vm_bind_op}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjЉhhhjhMmubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj̉hhhjhMmubah}(h]jljah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMmhjɉhhubjU)}(hhh]h)}(hVM bind operationh]hVM bind operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMshjhhubah}(h]h ]h"]h$]h&]uh1jThjɉhhhjhMmubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj.jxj.jyjzj{uh1jhhhjJghNhNubj})}(hX`**Definition**:: struct drm_panthor_vm_bind_op { __u32 flags; __u32 bo_handle; __u64 bo_offset; __u64 va; __u64 size; struct drm_panthor_obj_array syncs; }; **Members** ``flags`` Combination of drm_panthor_vm_bind_op_flags flags. ``bo_handle`` Handle of the buffer object to map. MBZ for unmap or sync-only operations. ``bo_offset`` Buffer object offset. MBZ for unmap or sync-only operations. ``va`` Virtual address to map/unmap. MBZ for sync-only operations. ``size`` Size to map/unmap. MBZ for sync-only operations. ``syncs`` Array of struct drm_panthor_sync_op synchronization operations. This array must be empty if ``DRM_PANTHOR_VM_BIND_ASYNC`` is not set on the drm_panthor_vm_bind object containing this VM bind operation. This array shall not be empty for sync-only operations.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh:}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMwhj2ubj)}(hstruct drm_panthor_vm_bind_op { __u32 flags; __u32 bo_handle; __u64 bo_offset; __u64 va; __u64 size; struct drm_panthor_obj_array syncs; };h]hstruct drm_panthor_vm_bind_op { __u32 flags; __u32 bo_handle; __u64 bo_offset; __u64 va; __u64 size; struct drm_panthor_obj_array syncs; };}hjSsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMyhj2ubh)}(h **Members**h]j)}(hjdh]hMembers}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj2ubj8)}(hhh](j=)}(h=``flags`` Combination of drm_panthor_vm_bind_op_flags flags. h](jC)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMwhj}ubjT)}(hhh]h)}(h2Combination of drm_panthor_vm_bind_op_flags flags.h]h2Combination of drm_panthor_vm_bind_op_flags flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMwhjubah}(h]h ]h"]h$]h&]uh1jShj}ubeh}(h]h ]h"]h$]h&]uh1j<hjhMwhjzubj=)}(hY``bo_handle`` Handle of the buffer object to map. MBZ for unmap or sync-only operations. h](jC)}(h ``bo_handle``h]j)}(hjh]h bo_handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM|hjubjT)}(hhh]h)}(hJHandle of the buffer object to map. MBZ for unmap or sync-only operations.h]hJHandle of the buffer object to map. MBZ for unmap or sync-only operations.}(hjՊhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM{hjҊubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjъhM|hjzubj=)}(hK``bo_offset`` Buffer object offset. MBZ for unmap or sync-only operations. h](jC)}(h ``bo_offset``h]j)}(hjh]h bo_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(hj?uh1j hj*hhhj;hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj&hhhj;hMubah}(h]j!ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj;hMhj#hhubjU)}(hhh]h)}(h VM bind flagsh]h VM bind flags}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjmhhubah}(h]h ]h"]h$]h&]uh1jThj#hhhj;hMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(h**Constants** ``DRM_PANTHOR_VM_BIND_ASYNC`` VM bind operations are queued to the VM queue instead of being executed synchronously.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh]j=)}(ht``DRM_PANTHOR_VM_BIND_ASYNC`` VM bind operations are queued to the VM queue instead of being executed synchronously.h](jC)}(h``DRM_PANTHOR_VM_BIND_ASYNC``h]j)}(hjh]hDRM_PANTHOR_VM_BIND_ASYNC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(hVVM bind operations are queued to the VM queue instead of being executed synchronously.h]hVVM bind operations are queued to the VM queue instead of being executed synchronously.}(hjʌhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjƌhMhjnjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjƌhMhjubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panthor_vm_bind (C struct)c.drm_panthor_vm_bindhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_vm_bindh]j)}(hstruct drm_panthor_vm_bindh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_panthor_vm_bindh]j')}(hjh]hdrm_panthor_vm_bind}(hj*hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj&ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(h-Arguments passed to DRM_IOCTL_PANTHOR_VM_BINDh]h-Arguments passed to DRM_IOCTL_PANTHOR_VM_BIND}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjIhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjdjxjdjyjzj{uh1jhhhjJghNhNubj})}(hX>**Definition**:: struct drm_panthor_vm_bind { __u32 vm_id; __u32 flags; struct drm_panthor_obj_array ops; }; **Members** ``vm_id`` VM targeted by the bind request. ``flags`` Combination of drm_panthor_vm_bind_flags flags. ``ops`` Array of struct drm_panthor_vm_bind_op bind operations.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubh:}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhubj)}(hgstruct drm_panthor_vm_bind { __u32 vm_id; __u32 flags; struct drm_panthor_obj_array ops; };h]hgstruct drm_panthor_vm_bind { __u32 vm_id; __u32 flags; struct drm_panthor_obj_array ops; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhubj8)}(hhh](j=)}(h+``vm_id`` VM targeted by the bind request. h](jC)}(h ``vm_id``h]j)}(hjh]hvm_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(h VM targeted by the bind request.h]h VM targeted by the bind request.}(hjҍhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj΍hMhjύubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj΍hMhjubj=)}(h:``flags`` Combination of drm_panthor_vm_bind_flags flags. h](jC)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(h/Combination of drm_panthor_vm_bind_flags flags.h]h/Combination of drm_panthor_vm_bind_flags flags.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h?``ops`` Array of struct drm_panthor_vm_bind_op bind operations.h](jC)}(h``ops``h]j)}(hj+h]hops}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj%ubjT)}(hhh]h)}(h7Array of struct drm_panthor_vm_bind_op bind operations.h]h7Array of struct drm_panthor_vm_bind_op bind operations.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjAubah}(h]h ]h"]h$]h&]uh1jShj%ubeh}(h]h ]h"]h$]h&]uh1j<hj@hMhjubeh}(h]h ]h"]h$]h&]uh1j7hjhubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panthor_vm_state (C enum)c.drm_panthor_vm_statehNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_vm_stateh]j)}(henum drm_panthor_vm_stateh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_panthor_vm_stateh]j')}(hjh]hdrm_panthor_vm_state}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj}hhhjhMubah}(h]jxah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjzhhubjU)}(hhh]h)}(h VM states.h]h VM states.}(hjǎhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjĎhhubah}(h]h ]h"]h$]h&]uh1jThjzhhhjhMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjߎjxjߎjyjzj{uh1jhhhjJghNhNubj})}(hX**Constants** ``DRM_PANTHOR_VM_STATE_USABLE`` VM is usable. New VM operations will be accepted on this VM. ``DRM_PANTHOR_VM_STATE_UNUSABLE`` VM is unusable. Something put the VM in an unusable state (like an asynchronous VM_BIND request failing for any reason). Once the VM is in this state, all new MAP operations will be rejected, and any GPU job targeting this VM will fail. UNMAP operations are still accepted. The only way to recover from an unusable VM is to create a new VM, and destroy the old one.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh](j=)}(h^``DRM_PANTHOR_VM_STATE_USABLE`` VM is usable. New VM operations will be accepted on this VM. h](jC)}(h``DRM_PANTHOR_VM_STATE_USABLE``h]j)}(hjh]hDRM_PANTHOR_VM_STATE_USABLE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(h VM is usable.h]h VM is usable.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(h.New VM operations will be accepted on this VM.h]h.New VM operations will be accepted on this VM.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hX``DRM_PANTHOR_VM_STATE_UNUSABLE`` VM is unusable. Something put the VM in an unusable state (like an asynchronous VM_BIND request failing for any reason). Once the VM is in this state, all new MAP operations will be rejected, and any GPU job targeting this VM will fail. UNMAP operations are still accepted. The only way to recover from an unusable VM is to create a new VM, and destroy the old one.h](jC)}(h!``DRM_PANTHOR_VM_STATE_UNUSABLE``h]j)}(hjPh]hDRM_PANTHOR_VM_STATE_UNUSABLE}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJubjT)}(hhh](h)}(hVM is unusable.h]hVM is unusable.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjfubh)}(hhSomething put the VM in an unusable state (like an asynchronous VM_BIND request failing for any reason).h]hhSomething put the VM in an unusable state (like an asynchronous VM_BIND request failing for any reason).}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjfubh)}(hOnce the VM is in this state, all new MAP operations will be rejected, and any GPU job targeting this VM will fail. UNMAP operations are still accepted.h]hOnce the VM is in this state, all new MAP operations will be rejected, and any GPU job targeting this VM will fail. UNMAP operations are still accepted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjfubh)}(h[The only way to recover from an unusable VM is to create a new VM, and destroy the old one.h]h[The only way to recover from an unusable VM is to create a new VM, and destroy the old one.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjfubeh}(h]h ]h"]h$]h&]uh1jShjJubeh}(h]h ]h"]h$]h&]uh1j<hjehMhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_panthor_vm_get_state (C struct)c.drm_panthor_vm_get_statehNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_vm_get_stateh]j)}(hstruct drm_panthor_vm_get_stateh](j)}(hjh]hstruct}(hj֏hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjҏhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjҏhhhjhMubj!)}(hdrm_panthor_vm_get_stateh]j')}(hjЏh]hdrm_panthor_vm_get_state}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjҏhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjΏhhhjhMubah}(h]jɏah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjˏhhubjU)}(hhh]h)}(h Get VM state.h]h Get VM state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjˏhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj0jxj0jyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_vm_get_state { __u32 vm_id; __u32 state; }; **Members** ``vm_id`` VM targeted by the get_state request. ``state`` state returned by the driver. Must be one of the enum drm_panthor_vm_state values.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh:}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj4ubj)}(hFstruct drm_panthor_vm_get_state { __u32 vm_id; __u32 state; };h]hFstruct drm_panthor_vm_get_state { __u32 vm_id; __u32 state; };}hjUsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj4ubh)}(h **Members**h]j)}(hjfh]hMembers}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj4ubj8)}(hhh](j=)}(h0``vm_id`` VM targeted by the get_state request. h](jC)}(h ``vm_id``h]j)}(hjh]hvm_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(h%VM targeted by the get_state request.h]h%VM targeted by the get_state request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhj|ubj=)}(h]``state`` state returned by the driver. Must be one of the enum drm_panthor_vm_state values.h](jC)}(h ``state``h]j)}(hjh]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(hstate returned by the driver.h]hstate returned by the driver.}(hjאhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjԐubh)}(h4Must be one of the enum drm_panthor_vm_state values.h]h4Must be one of the enum drm_panthor_vm_state values.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjԐubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjӐhMhj|ubeh}(h]h ]h"]h$]h&]uh1j7hj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panthor_bo_flags (C enum)c.drm_panthor_bo_flagshNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_bo_flagsh]j)}(henum drm_panthor_bo_flagsh](j)}(hjh]henum}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#hhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj4hMubj!)}(hdrm_panthor_bo_flagsh]j')}(hj!h]hdrm_panthor_bo_flags}(hjGhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjCubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj#hhhj4hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhj4hMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj4hMhjhhubjU)}(hhh]h)}(h-Buffer object flags, passed at creation time.h]h-Buffer object flags, passed at creation time.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjfhhubah}(h]h ]h"]h$]h&]uh1jThjhhhj4hMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hXp**Constants** ``DRM_PANTHOR_BO_NO_MMAP`` The buffer object will never be CPU-mapped in userspace. ``DRM_PANTHOR_BO_WB_MMAP`` Force "Write-Back Cacheable" CPU mapping. CPU map the buffer object in userspace by forcing the "Write-Back Cacheable" cacheability attribute. The mapping otherwise uses the "Non-Cacheable" attribute if the GPU is not IO coherent.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh](j=)}(hT``DRM_PANTHOR_BO_NO_MMAP`` The buffer object will never be CPU-mapped in userspace. h](jC)}(h``DRM_PANTHOR_BO_NO_MMAP``h]j)}(hjh]hDRM_PANTHOR_BO_NO_MMAP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(h8The buffer object will never be CPU-mapped in userspace.h]h8The buffer object will never be CPU-mapped in userspace.}(hjÑhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hX``DRM_PANTHOR_BO_WB_MMAP`` Force "Write-Back Cacheable" CPU mapping. CPU map the buffer object in userspace by forcing the "Write-Back Cacheable" cacheability attribute. The mapping otherwise uses the "Non-Cacheable" attribute if the GPU is not IO coherent.h](jC)}(h``DRM_PANTHOR_BO_WB_MMAP``h]j)}(hjh]hDRM_PANTHOR_BO_WB_MMAP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjݑubjT)}(hhh](h)}(h)Force "Write-Back Cacheable" CPU mapping.h]h-Force “Write-Back Cacheable” CPU mapping.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(hCPU map the buffer object in userspace by forcing the "Write-Back Cacheable" cacheability attribute. The mapping otherwise uses the "Non-Cacheable" attribute if the GPU is not IO coherent.h]hCPU map the buffer object in userspace by forcing the “Write-Back Cacheable” cacheability attribute. The mapping otherwise uses the “Non-Cacheable” attribute if the GPU is not IO coherent.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubeh}(h]h ]h"]h$]h&]uh1jShjݑubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_panthor_bo_create (C struct)c.drm_panthor_bo_createhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_bo_createh]j)}(hstruct drm_panthor_bo_createh](j)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjHhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjYhMubj!)}(hdrm_panthor_bo_createh]j')}(hjFh]hdrm_panthor_bo_create}(hjlhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjhubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjHhhhjYhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjDhhhjYhMubah}(h]j?ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjYhMhjAhhubjU)}(hhh]h)}(h0Arguments passed to DRM_IOCTL_PANTHOR_BO_CREATE.h]h0Arguments passed to DRM_IOCTL_PANTHOR_BO_CREATE.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjAhhhjYhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_bo_create { __u64 size; __u32 flags; __u32 exclusive_vm_id; __u32 handle; __u32 pad; }; **Members** ``size`` Requested size for the object The (page-aligned) allocated size for the object will be returned. ``flags`` Flags. Must be a combination of drm_panthor_bo_flags flags. ``exclusive_vm_id`` Exclusive VM this buffer object will be mapped to. If not zero, the field must refer to a valid VM ID, and implies that: - the buffer object will only ever be bound to that VM - cannot be exported as a PRIME fd ``handle`` Returned handle for the object. Object handles are nonzero. ``pad`` MBZ.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj)}(h~struct drm_panthor_bo_create { __u64 size; __u32 flags; __u32 exclusive_vm_id; __u32 handle; __u32 pad; };h]h~struct drm_panthor_bo_create { __u64 size; __u32 flags; __u32 exclusive_vm_id; __u32 handle; __u32 pad; };}hj˒sbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(h **Members**h]j)}(hjܒh]hMembers}(hjޒhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڒubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh](j=)}(hk``size`` Requested size for the object The (page-aligned) allocated size for the object will be returned. h](jC)}(h``size``h]j)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(hRequested size for the objecth]hRequested size for the object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(hBThe (page-aligned) allocated size for the object will be returned.h]hBThe (page-aligned) allocated size for the object will be returned.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hF``flags`` Flags. Must be a combination of drm_panthor_bo_flags flags. h](jC)}(h ``flags``h]j)}(hjCh]hflags}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj=ubjT)}(hhh]h)}(h;Flags. Must be a combination of drm_panthor_bo_flags flags.h]h;Flags. Must be a combination of drm_panthor_bo_flags flags.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jShj=ubeh}(h]h ]h"]h$]h&]uh1j<hjXhMhjubj=)}(h``exclusive_vm_id`` Exclusive VM this buffer object will be mapped to. If not zero, the field must refer to a valid VM ID, and implies that: - the buffer object will only ever be bound to that VM - cannot be exported as a PRIME fd h](jC)}(h``exclusive_vm_id``h]j)}(hj|h]hexclusive_vm_id}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjvubjT)}(hhh](h)}(h2Exclusive VM this buffer object will be mapped to.h]h2Exclusive VM this buffer object will be mapped to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh]j=)}(hIf not zero, the field must refer to a valid VM ID, and implies that: - the buffer object will only ever be bound to that VM - cannot be exported as a PRIME fd h](jC)}(hEIf not zero, the field must refer to a valid VM ID, and implies that:h]hEIf not zero, the field must refer to a valid VM ID, and implies that:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhjhMhjubjT)}(hhh]h)}(hhh](h)}(h4the buffer object will only ever be bound to that VMh]h)}(hjh]h4the buffer object will only ever be bound to that VM}(hjÓhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h!cannot be exported as a PRIME fd h]h)}(h cannot be exported as a PRIME fdh]h cannot be exported as a PRIME fd}(hjۓhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjדubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjГhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ]h"]h$]h&]uh1jShjvubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hH``handle`` Returned handle for the object. Object handles are nonzero. h](jC)}(h ``handle``h]j)}(hjh]hhandle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(hReturned handle for the object.h]hReturned handle for the object.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM hj/ubh)}(hObject handles are nonzero.h]hObject handles are nonzero.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj/ubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj.hMhjubj=)}(h ``pad`` MBZ.h](jC)}(h``pad``h]j)}(hjah]hpad}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj[ubjT)}(hhh]h)}(hMBZ.h]hMBZ.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjwubah}(h]h ]h"]h$]h&]uh1jShj[ubeh}(h]h ]h"]h$]h&]uh1j<hjvhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_panthor_bo_mmap_offset (C struct)c.drm_panthor_bo_mmap_offsethNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_bo_mmap_offseth]j)}(h!struct drm_panthor_bo_mmap_offseth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjɔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjȔhMubj!)}(hdrm_panthor_bo_mmap_offseth]j')}(hjh]hdrm_panthor_bo_mmap_offset}(hj۔hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjהubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjȔhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjȔhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjȔhMhjhhubjU)}(hhh]h)}(h5Arguments passed to DRM_IOCTL_PANTHOR_BO_MMAP_OFFSET.h]h5Arguments passed to DRM_IOCTL_PANTHOR_BO_MMAP_OFFSET.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjȔhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_bo_mmap_offset { __u32 handle; __u32 pad; __u64 offset; }; **Members** ``handle`` Handle of the object we want an mmap offset for. ``pad`` MBZ. ``offset`` The fake offset to use for subsequent mmap calls.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj)}(hYstruct drm_panthor_bo_mmap_offset { __u32 handle; __u32 pad; __u64 offset; };h]hYstruct drm_panthor_bo_mmap_offset { __u32 handle; __u32 pad; __u64 offset; };}hj:sbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(h **Members**h]j)}(hjKh]hMembers}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM#hjubj8)}(hhh](j=)}(h<``handle`` Handle of the object we want an mmap offset for. h](jC)}(h ``handle``h]j)}(hjjh]hhandle}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjdubjT)}(hhh]h)}(h0Handle of the object we want an mmap offset for.h]h0Handle of the object we want an mmap offset for.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjdubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjaubj=)}(h ``pad`` MBZ. h](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(hMBZ.h]hMBZ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjaubj=)}(h<``offset`` The fake offset to use for subsequent mmap calls.h](jC)}(h ``offset``h]j)}(hjܕh]hoffset}(hjޕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjڕubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM hj֕ubjT)}(hhh]h)}(h1The fake offset to use for subsequent mmap calls.h]h1The fake offset to use for subsequent mmap calls.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM!hjubah}(h]h ]h"]h$]h&]uh1jShj֕ubeh}(h]h ]h"]h$]h&]uh1j<hjhM hjaubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_panthor_queue_create (C struct)c.drm_panthor_queue_createhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_queue_createh]j)}(hstruct drm_panthor_queue_createh](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2hhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM'ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhjChM'ubj!)}(hdrm_panthor_queue_createh]j')}(hj0h]hdrm_panthor_queue_create}(hjVhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjRubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj2hhhjChM'ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj.hhhjChM'ubah}(h]j)ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjChM'hj+hhubjU)}(hhh]h)}(hQueue creation arguments.h]hQueue creation arguments.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM%hjuhhubah}(h]h ]h"]h$]h&]uh1jThj+hhhjChM'ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hXc**Definition**:: struct drm_panthor_queue_create { __u8 priority; __u8 pad[3]; __u32 ringbuf_size; }; **Members** ``priority`` Defines the priority of queues inside a group. Goes from 0 to 15, 15 being the highest priority. ``pad`` Padding fields, MBZ. ``ringbuf_size`` Size of the ring buffer to allocate to this queue.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM)hjubj)}(h`struct drm_panthor_queue_create { __u8 priority; __u8 pad[3]; __u32 ringbuf_size; };h]h`struct drm_panthor_queue_create { __u8 priority; __u8 pad[3]; __u32 ringbuf_size; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM+hjubh)}(h **Members**h]j)}(hjƖh]hMembers}(hjȖhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĖubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM1hjubj8)}(hhh](j=)}(hn``priority`` Defines the priority of queues inside a group. Goes from 0 to 15, 15 being the highest priority. h](jC)}(h ``priority``h]j)}(hjh]hpriority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM+hjߖubjT)}(hhh]h)}(h`Defines the priority of queues inside a group. Goes from 0 to 15, 15 being the highest priority.h]h`Defines the priority of queues inside a group. Goes from 0 to 15, 15 being the highest priority.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM*hjubah}(h]h ]h"]h$]h&]uh1jShjߖubeh}(h]h ]h"]h$]h&]uh1j<hjhM+hjܖubj=)}(h``pad`` Padding fields, MBZ. h](jC)}(h``pad``h]j)}(hjh]hpad}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM/hjubjT)}(hhh]h)}(hPadding fields, MBZ.h]hPadding fields, MBZ.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hM/hj5ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj4hM/hjܖubj=)}(hC``ringbuf_size`` Size of the ring buffer to allocate to this queue.h](jC)}(h``ringbuf_size``h]j)}(hjXh]h ringbuf_size}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM1hjRubjT)}(hhh]h)}(h2Size of the ring buffer to allocate to this queue.h]h2Size of the ring buffer to allocate to this queue.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM2hjnubah}(h]h ]h"]h$]h&]uh1jShjRubeh}(h]h ]h"]h$]h&]uh1j<hjmhM1hjܖubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_panthor_group_priority (C enum)c.drm_panthor_group_priorityhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_group_priorityh]j)}(henum drm_panthor_group_priorityh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM8ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM8ubj!)}(hdrm_panthor_group_priorityh]j')}(hjh]hdrm_panthor_group_priority}(hjҗhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjΗubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhM8ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhM8ubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhM8hjhhubjU)}(hhh]h)}(hScheduling group priorityh]hScheduling group priority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM6hjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhM8ubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwj jxj jyjzj{uh1jhhhjJghNhNubj})}(hXG**Constants** ``PANTHOR_GROUP_PRIORITY_LOW`` Low priority group. ``PANTHOR_GROUP_PRIORITY_MEDIUM`` Medium priority group. ``PANTHOR_GROUP_PRIORITY_HIGH`` High priority group. Requires CAP_SYS_NICE or DRM_MASTER. ``PANTHOR_GROUP_PRIORITY_REALTIME`` Realtime priority group. Requires CAP_SYS_NICE or DRM_MASTER.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM:hjubj8)}(hhh](j=)}(h3``PANTHOR_GROUP_PRIORITY_LOW`` Low priority group. h](jC)}(h``PANTHOR_GROUP_PRIORITY_LOW``h]j)}(hj5h]hPANTHOR_GROUP_PRIORITY_LOW}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM=hj/ubjT)}(hhh]h)}(hLow priority group.h]hLow priority group.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhM=hjKubah}(h]h ]h"]h$]h&]uh1jShj/ubeh}(h]h ]h"]h$]h&]uh1j<hjJhM=hj,ubj=)}(h9``PANTHOR_GROUP_PRIORITY_MEDIUM`` Medium priority group. h](jC)}(h!``PANTHOR_GROUP_PRIORITY_MEDIUM``h]j)}(hjnh]hPANTHOR_GROUP_PRIORITY_MEDIUM}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM@hjhubjT)}(hhh]h)}(hMedium priority group.h]hMedium priority group.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1jShjhubeh}(h]h ]h"]h$]h&]uh1j<hjhM@hj,ubj=)}(h[``PANTHOR_GROUP_PRIORITY_HIGH`` High priority group. Requires CAP_SYS_NICE or DRM_MASTER. h](jC)}(h``PANTHOR_GROUP_PRIORITY_HIGH``h]j)}(hjh]hPANTHOR_GROUP_PRIORITY_HIGH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMEhjubjT)}(hhh](h)}(hHigh priority group.h]hHigh priority group.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMChjubh)}(h$Requires CAP_SYS_NICE or DRM_MASTER.h]h$Requires CAP_SYS_NICE or DRM_MASTER.}(hjϘhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMEhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMEhj,ubj=)}(hb``PANTHOR_GROUP_PRIORITY_REALTIME`` Realtime priority group. Requires CAP_SYS_NICE or DRM_MASTER.h](jC)}(h#``PANTHOR_GROUP_PRIORITY_REALTIME``h]j)}(hjh]hPANTHOR_GROUP_PRIORITY_REALTIME}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMIhjubjT)}(hhh](h)}(hRealtime priority group.h]hRealtime priority group.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMHhjubh)}(h$Requires CAP_SYS_NICE or DRM_MASTER.h]h$Requires CAP_SYS_NICE or DRM_MASTER.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMJhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMIhj,ubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_panthor_group_create (C struct)c.drm_panthor_group_createhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_group_createh]j)}(hstruct drm_panthor_group_createh](j)}(hjh]hstruct}(hjXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjThhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMOubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjehMOubj!)}(hdrm_panthor_group_createh]j')}(hjRh]hdrm_panthor_group_create}(hjxhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjtubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjThhhjehMOubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjPhhhjehMOubah}(h]jKah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjehMOhjMhhubjU)}(hhh]h)}(h2Arguments passed to DRM_IOCTL_PANTHOR_GROUP_CREATEh]h2Arguments passed to DRM_IOCTL_PANTHOR_GROUP_CREATE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMOhjhhubah}(h]h ]h"]h$]h&]uh1jThjMhhhjehMOubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_group_create { struct drm_panthor_obj_array queues; __u8 max_compute_cores; __u8 max_fragment_cores; __u8 max_tiler_cores; __u8 priority; __u32 pad; __u64 compute_core_mask; __u64 fragment_core_mask; __u64 tiler_core_mask; __u32 vm_id; __u32 group_handle; }; **Members** ``queues`` Array of drm_panthor_queue_create elements. ``max_compute_cores`` Maximum number of cores that can be used by compute jobs across CS queues bound to this group. Must be less or equal to the number of bits set in **compute_core_mask**. ``max_fragment_cores`` Maximum number of cores that can be used by fragment jobs across CS queues bound to this group. Must be less or equal to the number of bits set in **fragment_core_mask**. ``max_tiler_cores`` Maximum number of tilers that can be used by tiler jobs across CS queues bound to this group. Must be less or equal to the number of bits set in **tiler_core_mask**. ``priority`` Group priority (see enum drm_panthor_group_priority). ``pad`` Padding field, MBZ. ``compute_core_mask`` Mask encoding cores that can be used for compute jobs. This field must have at least **max_compute_cores** bits set. The bits set here should also be set in drm_panthor_gpu_info::shader_present. ``fragment_core_mask`` Mask encoding cores that can be used for fragment jobs. This field must have at least **max_fragment_cores** bits set. The bits set here should also be set in drm_panthor_gpu_info::shader_present. ``tiler_core_mask`` Mask encoding cores that can be used for tiler jobs. This field must have at least **max_tiler_cores** bits set. The bits set here should also be set in drm_panthor_gpu_info::tiler_present. ``vm_id`` VM ID to bind this group to. All submission to queues bound to this group will use this VM. ``group_handle`` Returned group handle. Passed back when submitting jobs or destroying a group.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMShjubj)}(hXAstruct drm_panthor_group_create { struct drm_panthor_obj_array queues; __u8 max_compute_cores; __u8 max_fragment_cores; __u8 max_tiler_cores; __u8 priority; __u32 pad; __u64 compute_core_mask; __u64 fragment_core_mask; __u64 tiler_core_mask; __u32 vm_id; __u32 group_handle; };h]hXAstruct drm_panthor_group_create { struct drm_panthor_obj_array queues; __u8 max_compute_cores; __u8 max_fragment_cores; __u8 max_tiler_cores; __u8 priority; __u32 pad; __u64 compute_core_mask; __u64 fragment_core_mask; __u64 tiler_core_mask; __u32 vm_id; __u32 group_handle; };}hjיsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMUhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMchjubj8)}(hhh](j=)}(h7``queues`` Array of drm_panthor_queue_create elements. h](jC)}(h ``queues``h]j)}(hjh]hqueues}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMShjubjT)}(hhh]h)}(h+Array of drm_panthor_queue_create elements.h]h+Array of drm_panthor_queue_create elements.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMShjubj=)}(h``max_compute_cores`` Maximum number of cores that can be used by compute jobs across CS queues bound to this group. Must be less or equal to the number of bits set in **compute_core_mask**. h](jC)}(h``max_compute_cores``h]j)}(hj@h]hmax_compute_cores}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMZhj:ubjT)}(hhh](h)}(h^Maximum number of cores that can be used by compute jobs across CS queues bound to this group.h]h^Maximum number of cores that can be used by compute jobs across CS queues bound to this group.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMWhjVubh)}(hIMust be less or equal to the number of bits set in **compute_core_mask**.h](h3Must be less or equal to the number of bits set in }(hjhhhhNhNubj)}(h**compute_core_mask**h]hcompute_core_mask}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjUhMZhjVubeh}(h]h ]h"]h$]h&]uh1jShj:ubeh}(h]h ]h"]h$]h&]uh1j<hjUhMZhjubj=)}(h``max_fragment_cores`` Maximum number of cores that can be used by fragment jobs across CS queues bound to this group. Must be less or equal to the number of bits set in **fragment_core_mask**. h](jC)}(h``max_fragment_cores``h]j)}(hjh]hmax_fragment_cores}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMbhjubjT)}(hhh](h)}(h_Maximum number of cores that can be used by fragment jobs across CS queues bound to this group.h]h_Maximum number of cores that can be used by fragment jobs across CS queues bound to this group.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM_hjubh)}(hJMust be less or equal to the number of bits set in **fragment_core_mask**.h](h3Must be less or equal to the number of bits set in }(hjšhhhNhNubj)}(h**fragment_core_mask**h]hfragment_core_mask}(hjʚhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjšubh.}(hjšhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMbhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMbhjubj=)}(h``max_tiler_cores`` Maximum number of tilers that can be used by tiler jobs across CS queues bound to this group. Must be less or equal to the number of bits set in **tiler_core_mask**. h](jC)}(h``max_tiler_cores``h]j)}(hjh]hmax_tiler_cores}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMjhjubjT)}(hhh](h)}(h]Maximum number of tilers that can be used by tiler jobs across CS queues bound to this group.h]h]Maximum number of tilers that can be used by tiler jobs across CS queues bound to this group.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMghj ubh)}(hGMust be less or equal to the number of bits set in **tiler_core_mask**.h](h3Must be less or equal to the number of bits set in }(hjhhhNhNubj)}(h**tiler_core_mask**h]htiler_core_mask}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMjhj ubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj hMjhjubj=)}(hC``priority`` Group priority (see enum drm_panthor_group_priority). h](jC)}(h ``priority``h]j)}(hjNh]hpriority}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMnhjHubjT)}(hhh]h)}(h5Group priority (see enum drm_panthor_group_priority).h]h5Group priority (see enum drm_panthor_group_priority).}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMnhjdubah}(h]h ]h"]h$]h&]uh1jShjHubeh}(h]h ]h"]h$]h&]uh1j<hjchMnhjubj=)}(h``pad`` Padding field, MBZ. h](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMqhjubjT)}(hhh]h)}(hPadding field, MBZ.h]hPadding field, MBZ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMqhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMqhjubj=)}(h``compute_core_mask`` Mask encoding cores that can be used for compute jobs. This field must have at least **max_compute_cores** bits set. The bits set here should also be set in drm_panthor_gpu_info::shader_present. h](jC)}(h``compute_core_mask``h]j)}(hjh]hcompute_core_mask}(hj›hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMyhjubjT)}(hhh](h)}(h6Mask encoding cores that can be used for compute jobs.h]h6Mask encoding cores that can be used for compute jobs.}(hjٛhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMuhj֛ubh)}(h=This field must have at least **max_compute_cores** bits set.h](hThis field must have at least }(hjhhhNhNubj)}(h**max_compute_cores**h]hmax_compute_cores}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh bits set.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMwhj֛ubh)}(hMThe bits set here should also be set in drm_panthor_gpu_info::shader_present.h]hMThe bits set here should also be set in drm_panthor_gpu_info::shader_present.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj՛hMyhj֛ubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj՛hMyhjubj=)}(h``fragment_core_mask`` Mask encoding cores that can be used for fragment jobs. This field must have at least **max_fragment_cores** bits set. The bits set here should also be set in drm_panthor_gpu_info::shader_present. h](jC)}(h``fragment_core_mask``h]j)}(hj)h]hfragment_core_mask}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj#ubjT)}(hhh](h)}(h7Mask encoding cores that can be used for fragment jobs.h]h7Mask encoding cores that can be used for fragment jobs.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM~hj?ubh)}(h>This field must have at least **max_fragment_cores** bits set.h](hThis field must have at least }(hjQhhhNhNubj)}(h**max_fragment_cores**h]hmax_fragment_cores}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh bits set.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj?ubh)}(hMThe bits set here should also be set in drm_panthor_gpu_info::shader_present.h]hMThe bits set here should also be set in drm_panthor_gpu_info::shader_present.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj?ubeh}(h]h ]h"]h$]h&]uh1jShj#ubeh}(h]h ]h"]h$]h&]uh1j<hj>hMhjubj=)}(h``tiler_core_mask`` Mask encoding cores that can be used for tiler jobs. This field must have at least **max_tiler_cores** bits set. The bits set here should also be set in drm_panthor_gpu_info::tiler_present. h](jC)}(h``tiler_core_mask``h]j)}(hjh]htiler_core_mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(h4Mask encoding cores that can be used for tiler jobs.h]h4Mask encoding cores that can be used for tiler jobs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(h;This field must have at least **max_tiler_cores** bits set.h](hThis field must have at least }(hjhhhNhNubj)}(h**max_tiler_cores**h]hmax_tiler_cores}(hjœhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh bits set.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(hLThe bits set here should also be set in drm_panthor_gpu_info::tiler_present.h]hLThe bits set here should also be set in drm_panthor_gpu_info::tiler_present.}(hjۜhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hg``vm_id`` VM ID to bind this group to. All submission to queues bound to this group will use this VM. h](jC)}(h ``vm_id``h]j)}(hjh]hvm_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(hVM ID to bind this group to.h]hVM ID to bind this group to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(h>All submission to queues bound to this group will use this VM.h]h>All submission to queues bound to this group will use this VM.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h_``group_handle`` Returned group handle. Passed back when submitting jobs or destroying a group.h](jC)}(h``group_handle``h]j)}(hjCh]h group_handle}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj=ubjT)}(hhh]h)}(hNReturned group handle. Passed back when submitting jobs or destroying a group.h]hNReturned group handle. Passed back when submitting jobs or destroying a group.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jShj=ubeh}(h]h ]h"]h$]h&]uh1j<hjXhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_panthor_group_destroy (C struct)c.drm_panthor_group_destroyhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_group_destroyh]j)}(h struct drm_panthor_group_destroyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_panthor_group_destroyh]j')}(hjh]hdrm_panthor_group_destroy}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(h3Arguments passed to DRM_IOCTL_PANTHOR_GROUP_DESTROYh]h3Arguments passed to DRM_IOCTL_PANTHOR_GROUP_DESTROY}(hjޝhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj۝hhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(h**Definition**:: struct drm_panthor_group_destroy { __u32 group_handle; __u32 pad; }; **Members** ``group_handle`` Group to destroy ``pad`` Padding field, MBZ.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj)}(hLstruct drm_panthor_group_destroy { __u32 group_handle; __u32 pad; };h]hLstruct drm_panthor_group_destroy { __u32 group_handle; __u32 pad; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(h **Members**h]j)}(hj,h]hMembers}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh](j=)}(h"``group_handle`` Group to destroy h](jC)}(h``group_handle``h]j)}(hjKh]h group_handle}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjEubjT)}(hhh]h)}(hGroup to destroyh]hGroup to destroy}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jShjEubeh}(h]h ]h"]h$]h&]uh1j<hj`hMhjBubj=)}(h``pad`` Padding field, MBZ.h](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj~ubjT)}(hhh]h)}(hPadding field, MBZ.h]hPadding field, MBZ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShj~ubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjBubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_panthor_queue_submit (C struct)c.drm_panthor_queue_submithNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_queue_submith]j)}(hstruct drm_panthor_queue_submith](j)}(hjh]hstruct}(hjޞhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjڞhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڞhhhjhMubj!)}(hdrm_panthor_queue_submith]j')}(hj؞h]hdrm_panthor_queue_submit}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjڞhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj֞hhhjhMubah}(h]jўah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjӞhhubjU)}(hhh]h)}(hJob submission arguments.h]hJob submission arguments.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjӞhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj8jxj8jyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_queue_submit { __u32 queue_index; __u32 stream_size; __u64 stream_addr; __u32 latest_flush; __u32 pad; struct drm_panthor_obj_array syncs; }; **Members** ``queue_index`` Index of the queue inside a group. ``stream_size`` Size of the command stream to execute. Must be 64-bit/8-byte aligned (the size of a CS instruction) Can be zero if stream_addr is zero too. When the stream size is zero, the queue submit serves as a synchronization point. ``stream_addr`` GPU address of the command stream to execute. Must be aligned on 64-byte. Can be zero is stream_size is zero too. ``latest_flush`` FLUSH_ID read at the time the stream was built. This allows cache flush elimination for the automatic flush+invalidate(all) done at submission time, which is needed to ensure the GPU doesn't get garbage when reading the indirect command stream buffers. If you want the cache flush to happen unconditionally, pass a zero here. Ignored when stream_size is zero. ``pad`` MBZ. ``syncs`` Array of struct drm_panthor_sync_op sync operations.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh:}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj<ubj)}(hstruct drm_panthor_queue_submit { __u32 queue_index; __u32 stream_size; __u64 stream_addr; __u32 latest_flush; __u32 pad; struct drm_panthor_obj_array syncs; };h]hstruct drm_panthor_queue_submit { __u32 queue_index; __u32 stream_size; __u64 stream_addr; __u32 latest_flush; __u32 pad; struct drm_panthor_obj_array syncs; };}hj]sbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj<ubh)}(h **Members**h]j)}(hjnh]hMembers}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj<ubj8)}(hhh](j=)}(h3``queue_index`` Index of the queue inside a group. h](jC)}(h``queue_index``h]j)}(hjh]h queue_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(h"Index of the queue inside a group.h]h"Index of the queue inside a group.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``stream_size`` Size of the command stream to execute. Must be 64-bit/8-byte aligned (the size of a CS instruction) Can be zero if stream_addr is zero too. When the stream size is zero, the queue submit serves as a synchronization point. h](jC)}(h``stream_size``h]j)}(hjƟh]h stream_size}(hjȟhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjğubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(h&Size of the command stream to execute.h]h&Size of the command stream to execute.}(hjߟhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjܟubh)}(h``syncs`` Array of struct drm_panthor_sync_op sync operations.h](jC)}(h ``syncs``h]j)}(hjh]hsyncs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(h4Array of struct drm_panthor_sync_op sync operations.h]h4Array of struct drm_panthor_sync_op sync operations.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj*ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj)hMhjubeh}(h]h ]h"]h$]h&]uh1j7hj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubh)}(h**Description**h]j)}(hjWh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubh)}(hThis is describing the userspace command stream to call from the kernel command stream ring-buffer. Queue submission is always part of a group submission, taking one or more jobs to submit to the underlying queues.h]hThis is describing the userspace command stream to call from the kernel command stream ring-buffer. Queue submission is always part of a group submission, taking one or more jobs to submit to the underlying queues.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_panthor_group_submit (C struct)c.drm_panthor_group_submithNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_group_submith]j)}(hstruct drm_panthor_group_submith](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_panthor_group_submith]j')}(hjh]hdrm_panthor_group_submit}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(h2Arguments passed to DRM_IOCTL_PANTHOR_GROUP_SUBMITh]h2Arguments passed to DRM_IOCTL_PANTHOR_GROUP_SUBMIT}(hjסhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjԡhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hX.**Definition**:: struct drm_panthor_group_submit { __u32 group_handle; __u32 pad; struct drm_panthor_obj_array queue_submits; }; **Members** ``group_handle`` Handle of the group to queue jobs to. ``pad`` MBZ. ``queue_submits`` Array of drm_panthor_queue_submit objects.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj)}(h{struct drm_panthor_group_submit { __u32 group_handle; __u32 pad; struct drm_panthor_obj_array queue_submits; };h]h{struct drm_panthor_group_submit { __u32 group_handle; __u32 pad; struct drm_panthor_obj_array queue_submits; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(h **Members**h]j)}(hj%h]hMembers}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh](j=)}(h7``group_handle`` Handle of the group to queue jobs to. h](jC)}(h``group_handle``h]j)}(hjDh]h group_handle}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj>ubjT)}(hhh]h)}(h%Handle of the group to queue jobs to.h]h%Handle of the group to queue jobs to.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jShj>ubeh}(h]h ]h"]h$]h&]uh1j<hjYhMhj;ubj=)}(h ``pad`` MBZ. h](jC)}(h``pad``h]j)}(hj}h]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjwubjT)}(hhh]h)}(hMBZ.h]hMBZ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjwubeh}(h]h ]h"]h$]h&]uh1j<hjhMhj;ubj=)}(h<``queue_submits`` Array of drm_panthor_queue_submit objects.h](jC)}(h``queue_submits``h]j)}(hjh]h queue_submits}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(h*Array of drm_panthor_queue_submit objects.h]h*Array of drm_panthor_queue_submit objects.}(hjϢhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj̢ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjˢhMhj;ubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_panthor_group_state_flags (C enum)c.drm_panthor_group_state_flagshNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_group_state_flagsh]j)}(h"enum drm_panthor_group_state_flagsh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj!)}(hdrm_panthor_group_state_flagsh]j')}(hj h]hdrm_panthor_group_state_flags}(hj0hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj,ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj hhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(hGroup state flagsh]hGroup state flags}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjOhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjjjxjjjyjzj{uh1jhhhjJghNhNubj})}(hX**Constants** ``DRM_PANTHOR_GROUP_STATE_TIMEDOUT`` Group had unfinished jobs. When a group ends up with this flag set, no jobs can be submitted to its queues. ``DRM_PANTHOR_GROUP_STATE_FATAL_FAULT`` Group had fatal faults. When a group ends up with this flag set, no jobs can be submitted to its queues. ``DRM_PANTHOR_GROUP_STATE_INNOCENT`` Group was killed during a reset caused by other groups. This flag can only be set if DRM_PANTHOR_GROUP_STATE_TIMEDOUT is set and DRM_PANTHOR_GROUP_STATE_FATAL_FAULT is not.h](h)}(h **Constants**h]j)}(hjth]h Constants}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjnubj8)}(hhh](j=)}(h``DRM_PANTHOR_GROUP_STATE_TIMEDOUT`` Group had unfinished jobs. When a group ends up with this flag set, no jobs can be submitted to its queues. h](jC)}(h$``DRM_PANTHOR_GROUP_STATE_TIMEDOUT``h]j)}(hjh]h DRM_PANTHOR_GROUP_STATE_TIMEDOUT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(hGroup had unfinished jobs.h]hGroup had unfinished jobs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(hPWhen a group ends up with this flag set, no jobs can be submitted to its queues.h]hPWhen a group ends up with this flag set, no jobs can be submitted to its queues.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``DRM_PANTHOR_GROUP_STATE_FATAL_FAULT`` Group had fatal faults. When a group ends up with this flag set, no jobs can be submitted to its queues. h](jC)}(h'``DRM_PANTHOR_GROUP_STATE_FATAL_FAULT``h]j)}(hjۣh]h#DRM_PANTHOR_GROUP_STATE_FATAL_FAULT}(hjݣhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj٣ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjգubjT)}(hhh](h)}(hGroup had fatal faults.h]hGroup had fatal faults.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(hPWhen a group ends up with this flag set, no jobs can be submitted to its queues.h]hPWhen a group ends up with this flag set, no jobs can be submitted to its queues.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jShjգubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``DRM_PANTHOR_GROUP_STATE_INNOCENT`` Group was killed during a reset caused by other groups. This flag can only be set if DRM_PANTHOR_GROUP_STATE_TIMEDOUT is set and DRM_PANTHOR_GROUP_STATE_FATAL_FAULT is not.h](jC)}(h$``DRM_PANTHOR_GROUP_STATE_INNOCENT``h]j)}(hj#h]h DRM_PANTHOR_GROUP_STATE_INNOCENT}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(h7Group was killed during a reset caused by other groups.h]h7Group was killed during a reset caused by other groups.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj9ubh)}(htThis flag can only be set if DRM_PANTHOR_GROUP_STATE_TIMEDOUT is set and DRM_PANTHOR_GROUP_STATE_FATAL_FAULT is not.h]htThis flag can only be set if DRM_PANTHOR_GROUP_STATE_TIMEDOUT is set and DRM_PANTHOR_GROUP_STATE_FATAL_FAULT is not.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj9ubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj8hMhjubeh}(h]h ]h"]h$]h&]uh1j7hjnubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&drm_panthor_group_get_state (C struct)c.drm_panthor_group_get_statehNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_group_get_stateh]j)}(h"struct drm_panthor_group_get_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_panthor_group_get_stateh]j')}(hjh]hdrm_panthor_group_get_state}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]j~ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(h5Arguments passed to DRM_IOCTL_PANTHOR_GROUP_GET_STATEh]h5Arguments passed to DRM_IOCTL_PANTHOR_GROUP_GET_STATE}(hjͤhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjʤhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_group_get_state { __u32 group_handle; __u32 state; __u32 fatal_queues; __u32 pad; }; **Members** ``group_handle`` Handle of the group to query state on ``state`` Combination of DRM_PANTHOR_GROUP_STATE_* flags encoding the group state. ``fatal_queues`` Bitmask of queues that faced fatal faults. ``pad`` MBZh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM hjubj)}(hwstruct drm_panthor_group_get_state { __u32 group_handle; __u32 state; __u32 fatal_queues; __u32 pad; };h]hwstruct drm_panthor_group_get_state { __u32 group_handle; __u32 state; __u32 fatal_queues; __u32 pad; };}hj sbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh](j=)}(h7``group_handle`` Handle of the group to query state on h](jC)}(h``group_handle``h]j)}(hj:h]h group_handle}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM hj4ubjT)}(hhh]h)}(h%Handle of the group to query state onh]h%Handle of the group to query state on}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhM hjPubah}(h]h ]h"]h$]h&]uh1jShj4ubeh}(h]h ]h"]h$]h&]uh1j<hjOhM hj1ubj=)}(hS``state`` Combination of DRM_PANTHOR_GROUP_STATE_* flags encoding the group state. h](jC)}(h ``state``h]j)}(hjsh]hstate}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjmubjT)}(hhh]h)}(hHCombination of DRM_PANTHOR_GROUP_STATE_* flags encoding the group state.h]hHCombination of DRM_PANTHOR_GROUP_STATE_* flags encoding the group state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjmubeh}(h]h ]h"]h$]h&]uh1j<hjhMhj1ubj=)}(h<``fatal_queues`` Bitmask of queues that faced fatal faults. h](jC)}(h``fatal_queues``h]j)}(hjh]h fatal_queues}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(h*Bitmask of queues that faced fatal faults.h]h*Bitmask of queues that faced fatal faults.}(hjƥhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj¥hMhjåubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj¥hMhj1ubj=)}(h ``pad`` MBZh](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhj1ubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubh)}(h**Description**h]j)}(hj)h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubh)}(hbUsed to query the state of a group and decide whether a new group should be created to replace it.h]hbUsed to query the state of a group and decide whether a new group should be created to replace it.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(drm_panthor_tiler_heap_create (C struct)c.drm_panthor_tiler_heap_createhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_tiler_heap_createh]j)}(h$struct drm_panthor_tiler_heap_createh](j)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjchhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM ubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjthM ubj!)}(hdrm_panthor_tiler_heap_createh]j')}(hjah]hdrm_panthor_tiler_heap_create}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjchhhjthM ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj_hhhjthM ubah}(h]jZah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjthM hj\hhubjU)}(hhh]h)}(h7Arguments passed to DRM_IOCTL_PANTHOR_TILER_HEAP_CREATEh]h7Arguments passed to DRM_IOCTL_PANTHOR_TILER_HEAP_CREATE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThj\hhhjthM ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hXp**Definition**:: struct drm_panthor_tiler_heap_create { __u32 vm_id; __u32 initial_chunk_count; __u32 chunk_size; __u32 max_chunks; __u32 target_in_flight; __u32 handle; __u64 tiler_heap_ctx_gpu_va; __u64 first_heap_chunk_gpu_va; }; **Members** ``vm_id`` VM ID the tiler heap should be mapped to ``initial_chunk_count`` Initial number of chunks to allocate. Must be at least one. ``chunk_size`` Chunk size. Must be page-aligned and lie in the [128k:8M] range. ``max_chunks`` Maximum number of chunks that can be allocated. Must be at least **initial_chunk_count**. ``target_in_flight`` Maximum number of in-flight render passes. If the heap has more than tiler jobs in-flight, the FW will wait for render passes to finish before queuing new tiler jobs. ``handle`` Returned heap handle. Passed back to DESTROY_TILER_HEAP. ``tiler_heap_ctx_gpu_va`` Returned heap GPU virtual address returned ``first_heap_chunk_gpu_va`` First heap chunk. The tiler heap is formed of heap chunks forming a single-link list. This is the first element in the list.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjͦhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɦubh:}(hjɦhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM!hjŦubj)}(hstruct drm_panthor_tiler_heap_create { __u32 vm_id; __u32 initial_chunk_count; __u32 chunk_size; __u32 max_chunks; __u32 target_in_flight; __u32 handle; __u64 tiler_heap_ctx_gpu_va; __u64 first_heap_chunk_gpu_va; };h]hstruct drm_panthor_tiler_heap_create { __u32 vm_id; __u32 initial_chunk_count; __u32 chunk_size; __u32 max_chunks; __u32 target_in_flight; __u32 handle; __u64 tiler_heap_ctx_gpu_va; __u64 first_heap_chunk_gpu_va; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM#hjŦubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM.hjŦubj8)}(hhh](j=)}(h3``vm_id`` VM ID the tiler heap should be mapped to h](jC)}(h ``vm_id``h]j)}(hjh]hvm_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM!hjubjT)}(hhh]h)}(h(VM ID the tiler heap should be mapped toh]h(VM ID the tiler heap should be mapped to}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hM!hj,ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj+hM!hj ubj=)}(hT``initial_chunk_count`` Initial number of chunks to allocate. Must be at least one. h](jC)}(h``initial_chunk_count``h]j)}(hjOh]hinitial_chunk_count}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM$hjIubjT)}(hhh]h)}(h;Initial number of chunks to allocate. Must be at least one.h]h;Initial number of chunks to allocate. Must be at least one.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhM$hjeubah}(h]h ]h"]h$]h&]uh1jShjIubeh}(h]h ]h"]h$]h&]uh1j<hjdhM$hj ubj=)}(hQ``chunk_size`` Chunk size. Must be page-aligned and lie in the [128k:8M] range. h](jC)}(h``chunk_size``h]j)}(hjh]h chunk_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM*hjubjT)}(hhh](h)}(h Chunk size.h]h Chunk size.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM(hjubh)}(h4Must be page-aligned and lie in the [128k:8M] range.h]h4Must be page-aligned and lie in the [128k:8M] range.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM*hj ubj=)}(hj``max_chunks`` Maximum number of chunks that can be allocated. Must be at least **initial_chunk_count**. h](jC)}(h``max_chunks``h]j)}(hjЧh]h max_chunks}(hjҧhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjΧubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM1hjʧubjT)}(hhh](h)}(h/Maximum number of chunks that can be allocated.h]h/Maximum number of chunks that can be allocated.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM/hjubh)}(h)Must be at least **initial_chunk_count**.h](hMust be at least }(hjhhhNhNubj)}(h**initial_chunk_count**h]hinitial_chunk_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM1hjubeh}(h]h ]h"]h$]h&]uh1jShjʧubeh}(h]h ]h"]h$]h&]uh1j<hjhM1hj ubj=)}(h``target_in_flight`` Maximum number of in-flight render passes. If the heap has more than tiler jobs in-flight, the FW will wait for render passes to finish before queuing new tiler jobs. h](jC)}(h``target_in_flight``h]j)}(hj*h]htarget_in_flight}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM9hj$ubjT)}(hhh](h)}(h*Maximum number of in-flight render passes.h]h*Maximum number of in-flight render passes.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM6hj@ubh)}(h{If the heap has more than tiler jobs in-flight, the FW will wait for render passes to finish before queuing new tiler jobs.h]h{If the heap has more than tiler jobs in-flight, the FW will wait for render passes to finish before queuing new tiler jobs.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM8hj@ubeh}(h]h ]h"]h$]h&]uh1jShj$ubeh}(h]h ]h"]h$]h&]uh1j<hj?hM9hj ubj=)}(hD``handle`` Returned heap handle. Passed back to DESTROY_TILER_HEAP. h](jC)}(h ``handle``h]j)}(hjsh]hhandle}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM=hjmubjT)}(hhh]h)}(h8Returned heap handle. Passed back to DESTROY_TILER_HEAP.h]h8Returned heap handle. Passed back to DESTROY_TILER_HEAP.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jShjmubeh}(h]h ]h"]h$]h&]uh1j<hjhM=hj ubj=)}(hE``tiler_heap_ctx_gpu_va`` Returned heap GPU virtual address returned h](jC)}(h``tiler_heap_ctx_gpu_va``h]j)}(hjh]htiler_heap_ctx_gpu_va}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM@hjubjT)}(hhh]h)}(h*Returned heap GPU virtual address returnedh]h*Returned heap GPU virtual address returned}(hjŨhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM@hj¨ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM@hj ubj=)}(h``first_heap_chunk_gpu_va`` First heap chunk. The tiler heap is formed of heap chunks forming a single-link list. This is the first element in the list.h](jC)}(h``first_heap_chunk_gpu_va``h]j)}(hjh]hfirst_heap_chunk_gpu_va}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMFhjߨubjT)}(hhh](h)}(hFirst heap chunk.h]hFirst heap chunk.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMDhjubh)}(hjThe tiler heap is formed of heap chunks forming a single-link list. This is the first element in the list.h]hjThe tiler heap is formed of heap chunks forming a single-link list. This is the first element in the list.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMFhjubeh}(h]h ]h"]h$]h&]uh1jShjߨubeh}(h]h ]h"]h$]h&]uh1j<hjhMFhj ubeh}(h]h ]h"]h$]h&]uh1j7hjŦubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_panthor_tiler_heap_destroy (C struct) c.drm_panthor_tiler_heap_destroyhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_tiler_heap_destroyh]j)}(h%struct drm_panthor_tiler_heap_destroyh](j)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjIhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMMubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjZhMMubj!)}(hdrm_panthor_tiler_heap_destroyh]j')}(hjGh]hdrm_panthor_tiler_heap_destroy}(hjmhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjiubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjIhhhjZhMMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjEhhhjZhMMubah}(h]j@ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjZhMMhjBhhubjU)}(hhh]h)}(h8Arguments passed to DRM_IOCTL_PANTHOR_TILER_HEAP_DESTROYh]h8Arguments passed to DRM_IOCTL_PANTHOR_TILER_HEAP_DESTROY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMLhjhhubah}(h]h ]h"]h$]h&]uh1jThjBhhhjZhMMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_tiler_heap_destroy { __u32 handle; __u32 pad; }; **Members** ``handle`` Handle of the tiler heap to destroy. Must be a valid heap handle returned by DRM_IOCTL_PANTHOR_TILER_HEAP_CREATE. ``pad`` Padding field, MBZ.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMPhjubj)}(hKstruct drm_panthor_tiler_heap_destroy { __u32 handle; __u32 pad; };h]hKstruct drm_panthor_tiler_heap_destroy { __u32 handle; __u32 pad; };}hj̩sbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMRhjubh)}(h **Members**h]j)}(hjݩh]hMembers}(hjߩhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj۩ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMWhjubj8)}(hhh](j=)}(h~``handle`` Handle of the tiler heap to destroy. Must be a valid heap handle returned by DRM_IOCTL_PANTHOR_TILER_HEAP_CREATE. h](jC)}(h ``handle``h]j)}(hjh]hhandle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMShjubjT)}(hhh](h)}(h$Handle of the tiler heap to destroy.h]h$Handle of the tiler heap to destroy.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMQhjubh)}(hLMust be a valid heap handle returned by DRM_IOCTL_PANTHOR_TILER_HEAP_CREATE.h]hLMust be a valid heap handle returned by DRM_IOCTL_PANTHOR_TILER_HEAP_CREATE.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMShjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMShjubj=)}(h``pad`` Padding field, MBZ.h](jC)}(h``pad``h]j)}(hjDh]hpad}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMVhj>ubjT)}(hhh]h)}(hPadding field, MBZ.h]hPadding field, MBZ.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMWhjZubah}(h]h ]h"]h$]h&]uh1jShj>ubeh}(h]h ]h"]h$]h&]uh1j<hjYhMVhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_panthor_bo_set_label (C struct)c.drm_panthor_bo_set_labelhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_bo_set_labelh]j)}(hstruct drm_panthor_bo_set_labelh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM]ubj!)}(hdrm_panthor_bo_set_labelh]j')}(hjh]hdrm_panthor_bo_set_label}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhM]ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhM]ubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhM]hjhhubjU)}(hhh]h)}(h2Arguments passed to DRM_IOCTL_PANTHOR_BO_SET_LABELh]h2Arguments passed to DRM_IOCTL_PANTHOR_BO_SET_LABEL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM[hjݪhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhM]ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_bo_set_label { __u32 handle; __u32 pad; __u64 label; }; **Members** ``handle`` Handle of the buffer object to label. ``pad`` MBZ. ``label`` User pointer to a NUL-terminated string Length cannot be greater than 4096h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM_hjubj)}(hVstruct drm_panthor_bo_set_label { __u32 handle; __u32 pad; __u64 label; };h]hVstruct drm_panthor_bo_set_label { __u32 handle; __u32 pad; __u64 label; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMahjubh)}(h **Members**h]j)}(hj.h]hMembers}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMghjubj8)}(hhh](j=)}(h1``handle`` Handle of the buffer object to label. h](jC)}(h ``handle``h]j)}(hjMh]hhandle}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM_hjGubjT)}(hhh]h)}(h%Handle of the buffer object to label.h]h%Handle of the buffer object to label.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhM_hjcubah}(h]h ]h"]h$]h&]uh1jShjGubeh}(h]h ]h"]h$]h&]uh1j<hjbhM_hjDubj=)}(h ``pad`` MBZ. h](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMbhjubjT)}(hhh]h)}(hMBZ.h]hMBZ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMbhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMbhjDubj=)}(hU``label`` User pointer to a NUL-terminated string Length cannot be greater than 4096h](jC)}(h ``label``h]j)}(hjh]hlabel}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMghjubjT)}(hhh](h)}(h'User pointer to a NUL-terminated stringh]h'User pointer to a NUL-terminated string}(hjثhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMfhjիubh)}(h"Length cannot be greater than 4096h]h"Length cannot be greater than 4096}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhhjիubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjԫhMghjDubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j+drm_panthor_set_user_mmio_offset (C struct)"c.drm_panthor_set_user_mmio_offsethNtauh1jhjJghhhNhNubj)}(hhh](j)}(h drm_panthor_set_user_mmio_offseth]j)}(h'struct drm_panthor_set_user_mmio_offseth](j)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$hhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMnubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj5hMnubj!)}(h drm_panthor_set_user_mmio_offseth]j')}(hj"h]h drm_panthor_set_user_mmio_offset}(hjHhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjDubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj$hhhj5hMnubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj hhhj5hMnubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj5hMnhjhhubjU)}(hhh]h)}(h:Arguments passed to DRM_IOCTL_PANTHOR_SET_USER_MMIO_OFFSETh]h:Arguments passed to DRM_IOCTL_PANTHOR_SET_USER_MMIO_OFFSET}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMmhjghhubah}(h]h ]h"]h$]h&]uh1jThjhhhj5hMnubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_set_user_mmio_offset { __u64 offset; }; **Members** ``offset`` User MMIO offset to use. Must be either DRM_PANTHOR_USER_MMIO_OFFSET_32BIT or DRM_PANTHOR_USER_MMIO_OFFSET_64BIT. Use DRM_PANTHOR_USER_MMIO_OFFSET (which selects OFFSET_32BIT or OFFSET_64BIT based on the size of an unsigned long) unless you have a very good reason to overrule this decision.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMqhjubj)}(h>struct drm_panthor_set_user_mmio_offset { __u64 offset; };h]h>struct drm_panthor_set_user_mmio_offset { __u64 offset; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMshjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMwhjubj8)}(hhh]j=)}(hX0``offset`` User MMIO offset to use. Must be either DRM_PANTHOR_USER_MMIO_OFFSET_32BIT or DRM_PANTHOR_USER_MMIO_OFFSET_64BIT. Use DRM_PANTHOR_USER_MMIO_OFFSET (which selects OFFSET_32BIT or OFFSET_64BIT based on the size of an unsigned long) unless you have a very good reason to overrule this decision.h](jC)}(h ``offset``h]j)}(hj׬h]hoffset}(hj٬hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjլubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM}hjѬubjT)}(hhh](h)}(hUser MMIO offset to use.h]hUser MMIO offset to use.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMwhjubh)}(hXMust be either DRM_PANTHOR_USER_MMIO_OFFSET_32BIT or DRM_PANTHOR_USER_MMIO_OFFSET_64BIT.h]hXMust be either DRM_PANTHOR_USER_MMIO_OFFSET_32BIT or DRM_PANTHOR_USER_MMIO_OFFSET_64BIT.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMyhjubh)}(hUse DRM_PANTHOR_USER_MMIO_OFFSET (which selects OFFSET_32BIT or OFFSET_64BIT based on the size of an unsigned long) unless you have a very good reason to overrule this decision.h]hUse DRM_PANTHOR_USER_MMIO_OFFSET (which selects OFFSET_32BIT or OFFSET_64BIT based on the size of an unsigned long) unless you have a very good reason to overrule this decision.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhM|hjubeh}(h]h ]h"]h$]h&]uh1jShjѬubeh}(h]h ]h"]h$]h&]uh1j<hjhM}hjάubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubh)}(h**Description**h]j)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubh)}(hThis ioctl is only really useful if you want to support userspace CPU emulation environments where the size of an unsigned long differs between the host and the guest architectures.h]hThis ioctl is only really useful if you want to support userspace CPU emulation environments where the size of an unsigned long differs between the host and the guest architectures.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMnhjJghhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_panthor_bo_sync_op_type (C enum)c.drm_panthor_bo_sync_op_typehNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_bo_sync_op_typeh]j)}(h enum drm_panthor_bo_sync_op_typeh](j)}(hjh]henum}(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjrhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhjhMuubj!)}(hdrm_panthor_bo_sync_op_typeh]j')}(hjph]hdrm_panthor_bo_sync_op_type}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjrhhhjhMuubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjnhhhjhMuubah}(h]jiah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMuhjkhhubjU)}(hhh]h)}(h BO sync typeh]h BO sync type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjkhhhjhMuubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjЭjxjЭjyjzj{uh1jhhhjJghNhNubj})}(h**Constants** ``DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH`` Flush CPU caches. ``DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH_AND_INVALIDATE`` Flush and invalidate CPU caches.h](h)}(h **Constants**h]j)}(hjڭh]h Constants}(hjܭhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjحubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjԭubj8)}(hhh](j=)}(h:``DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH`` Flush CPU caches. h](jC)}(h'``DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH``h]j)}(hjh]h#DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(hFlush CPU caches.h]hFlush CPU caches.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hW``DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH_AND_INVALIDATE`` Flush and invalidate CPU caches.h](jC)}(h6``DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH_AND_INVALIDATE``h]j)}(hj2h]h2DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH_AND_INVALIDATE}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj,ubjT)}(hhh]h)}(h Flush and invalidate CPU caches.h]h Flush and invalidate CPU caches.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjHubah}(h]h ]h"]h$]h&]uh1jShj,ubeh}(h]h ]h"]h$]h&]uh1j<hjGhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjԭubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_panthor_bo_sync_op (C struct)c.drm_panthor_bo_sync_ophNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_bo_sync_oph]j)}(hstruct drm_panthor_bo_sync_oph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_panthor_bo_sync_oph]j')}(hjh]hdrm_panthor_bo_sync_op}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(hBO map sync oph]hBO map sync op}(hjήhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjˮhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_bo_sync_op { __u32 handle; __u32 type; __u64 offset; __u64 size; }; **Members** ``handle`` Handle of the buffer object to sync. ``type`` Type of operation. ``offset`` Offset into the BO at which the sync range starts. This will be rounded down to the nearest cache line as needed. ``size`` Size of the range to sync **size** + **offset** will be rounded up to the nearest cache line as needed.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj)}(hfstruct drm_panthor_bo_sync_op { __u32 handle; __u32 type; __u64 offset; __u64 size; };h]hfstruct drm_panthor_bo_sync_op { __u32 handle; __u32 type; __u64 offset; __u64 size; };}hj sbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh](j=)}(h0``handle`` Handle of the buffer object to sync. h](jC)}(h ``handle``h]j)}(hj;h]hhandle}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj5ubjT)}(hhh]h)}(h$Handle of the buffer object to sync.h]h$Handle of the buffer object to sync.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jShj5ubeh}(h]h ]h"]h$]h&]uh1j<hjPhMhj2ubj=)}(h``type`` Type of operation. h](jC)}(h``type``h]j)}(hjth]htype}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjnubjT)}(hhh]h)}(hType of operation.h]hType of operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjnubeh}(h]h ]h"]h$]h&]uh1j<hjhMhj2ubj=)}(h~``offset`` Offset into the BO at which the sync range starts. This will be rounded down to the nearest cache line as needed. h](jC)}(h ``offset``h]j)}(hjh]hoffset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(h2Offset into the BO at which the sync range starts.h]h2Offset into the BO at which the sync range starts.}(hjƯhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjïubh)}(h>This will be rounded down to the nearest cache line as needed.h]h>This will be rounded down to the nearest cache line as needed.}(hjկhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj¯hMhjïubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj¯hMhj2ubj=)}(hq``size`` Size of the range to sync **size** + **offset** will be rounded up to the nearest cache line as needed.h](jC)}(h``size``h]j)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(hSize of the range to synch]hSize of the range to sync}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj ubh)}(hM**size** + **offset** will be rounded up to the nearest cache line as needed.h](j)}(h**size**h]hsize}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh + }(hjhhhNhNubj)}(h **offset**h]hoffset}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh8 will be rounded up to the nearest cache line as needed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj hMhj2ubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_panthor_bo_sync (C struct)c.drm_panthor_bo_synchNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_bo_synch]j)}(hstruct drm_panthor_bo_synch](j)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjyhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhMubj!)}(hdrm_panthor_bo_synch]j')}(hjwh]hdrm_panthor_bo_sync}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjyhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjuhhhjhMubah}(h]jpah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjrhhubjU)}(hhh]h)}(hBO map sync requesth]hBO map sync request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjrhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjװjxjװjyjzj{uh1jhhhjJghNhNubj})}(h**Definition**:: struct drm_panthor_bo_sync { struct drm_panthor_obj_array ops; }; **Members** ``ops`` Array of struct drm_panthor_bo_sync_op sync operations.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj߰ubh:}(hj߰hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj۰ubj)}(hEstruct drm_panthor_bo_sync { struct drm_panthor_obj_array ops; };h]hEstruct drm_panthor_bo_sync { struct drm_panthor_obj_array ops; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj۰ubh)}(h **Members**h]j)}(hj h]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj۰ubj8)}(hhh]j=)}(h?``ops`` Array of struct drm_panthor_bo_sync_op sync operations.h](jC)}(h``ops``h]j)}(hj,h]hops}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj&ubjT)}(hhh]h)}(h7Array of struct drm_panthor_bo_sync_op sync operations.h]h7Array of struct drm_panthor_bo_sync_op sync operations.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjBubah}(h]h ]h"]h$]h&]uh1jShj&ubeh}(h]h ]h"]h$]h&]uh1j<hjAhMhj#ubah}(h]h ]h"]h$]h&]uh1j7hj۰ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_panthor_bo_extra_flags (C enum)c.drm_panthor_bo_extra_flagshNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_bo_extra_flagsh]j)}(henum drm_panthor_bo_extra_flagsh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_panthor_bo_extra_flagsh]j')}(hjh]hdrm_panthor_bo_extra_flags}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj~hhhjhMubah}(h]jyah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhj{hhubjU)}(hhh]h)}(h0Set of flags returned on a BO_QUERY_INFO requesth]h0Set of flags returned on a BO_QUERY_INFO request}(hjȱhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjűhhubah}(h]h ]h"]h$]h&]uh1jThj{hhhjhMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hX**Constants** ``DRM_PANTHOR_BO_IS_IMPORTED`` BO has been imported from an external driver. Note that imported dma-buf handles are not flagged as imported if they where exported by panthor. Only buffers that are coming from other drivers (dma heaps, other GPUs, display controllers, V4L, ...). It's also important to note that all imported BOs are mapped cached and can't be considered IO-coherent even if the GPU is. This means they require explicit syncs that must go through the DRM_PANTHOR_BO_SYNC ioctl (userland cache maintenance is not allowed in that case, because extra operations might be needed to make changes visible to the CPU/device, like buffer migration when the exporter is a GPU with its own VRAM).h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh]j=)}(hX``DRM_PANTHOR_BO_IS_IMPORTED`` BO has been imported from an external driver. Note that imported dma-buf handles are not flagged as imported if they where exported by panthor. Only buffers that are coming from other drivers (dma heaps, other GPUs, display controllers, V4L, ...). It's also important to note that all imported BOs are mapped cached and can't be considered IO-coherent even if the GPU is. This means they require explicit syncs that must go through the DRM_PANTHOR_BO_SYNC ioctl (userland cache maintenance is not allowed in that case, because extra operations might be needed to make changes visible to the CPU/device, like buffer migration when the exporter is a GPU with its own VRAM).h](jC)}(h``DRM_PANTHOR_BO_IS_IMPORTED``h]j)}(hj h]hDRM_PANTHOR_BO_IS_IMPORTED}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh](h)}(h-BO has been imported from an external driver.h]h-BO has been imported from an external driver.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(hNote that imported dma-buf handles are not flagged as imported if they where exported by panthor. Only buffers that are coming from other drivers (dma heaps, other GPUs, display controllers, V4L, ...).h]hNote that imported dma-buf handles are not flagged as imported if they where exported by panthor. Only buffers that are coming from other drivers (dma heaps, other GPUs, display controllers, V4L, ...).}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(hXIt's also important to note that all imported BOs are mapped cached and can't be considered IO-coherent even if the GPU is. This means they require explicit syncs that must go through the DRM_PANTHOR_BO_SYNC ioctl (userland cache maintenance is not allowed in that case, because extra operations might be needed to make changes visible to the CPU/device, like buffer migration when the exporter is a GPU with its own VRAM).h]hXIt’s also important to note that all imported BOs are mapped cached and can’t be considered IO-coherent even if the GPU is. This means they require explicit syncs that must go through the DRM_PANTHOR_BO_SYNC ioctl (userland cache maintenance is not allowed in that case, because extra operations might be needed to make changes visible to the CPU/device, like buffer migration when the exporter is a GPU with its own VRAM).}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubah}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubh)}(h**Description**h]j)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubh)}(hThose are flags reflecting BO properties that are not directly coming from the flags passed are creation time, or information on BOs that were imported from other drivers.h]hThose are flags reflecting BO properties that are not directly coming from the flags passed are creation time, or information on BOs that were imported from other drivers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_panthor_bo_query_info (C struct)c.drm_panthor_bo_query_infohNtauh1jhjJghhhNhNubj)}(hhh](j)}(hdrm_panthor_bo_query_infoh]j)}(h struct drm_panthor_bo_query_infoh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_panthor_bo_query_infoh]j')}(hjh]hdrm_panthor_bo_query_info}(hjȲhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjIJubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(h Query BO infoh]h Query BO info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubj})}(hX**Definition**:: struct drm_panthor_bo_query_info { __u32 handle; __u32 extra_flags; __u32 create_flags; __u32 pad; }; **Members** ``handle`` Handle of the buffer object to query flags on. ``extra_flags`` Combination of enum drm_panthor_bo_extra_flags flags. ``create_flags`` Flags passed at creation time. Combination of enum drm_panthor_bo_flags flags. Will be zero if the buffer comes from a different driver. ``pad`` Will be zero on return.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj)}(hustruct drm_panthor_bo_query_info { __u32 handle; __u32 extra_flags; __u32 create_flags; __u32 pad; };h]hustruct drm_panthor_bo_query_info { __u32 handle; __u32 extra_flags; __u32 create_flags; __u32 pad; };}hj'sbah}(h]h ]h"]h$]h&]j>j?uh1jh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubh)}(h **Members**h]j)}(hj8h]hMembers}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubj8)}(hhh](j=)}(h:``handle`` Handle of the buffer object to query flags on. h](jC)}(h ``handle``h]j)}(hjWh]hhandle}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjQubjT)}(hhh]h)}(h.Handle of the buffer object to query flags on.h]h.Handle of the buffer object to query flags on.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jShjQubeh}(h]h ]h"]h$]h&]uh1j<hjlhMhjNubj=)}(hF``extra_flags`` Combination of enum drm_panthor_bo_extra_flags flags. h](jC)}(h``extra_flags``h]j)}(hjh]h extra_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(h5Combination of enum drm_panthor_bo_extra_flags flags.h]h5Combination of enum drm_panthor_bo_extra_flags flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjNubj=)}(h``create_flags`` Flags passed at creation time. Combination of enum drm_panthor_bo_flags flags. Will be zero if the buffer comes from a different driver. h](jC)}(h``create_flags``h]j)}(hjɳh]h create_flags}(hj˳hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdzubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjóubjT)}(hhh](h)}(hFlags passed at creation time.h]hFlags passed at creation time.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj߳ubh)}(hiCombination of enum drm_panthor_bo_flags flags. Will be zero if the buffer comes from a different driver.h]hiCombination of enum drm_panthor_bo_flags flags. Will be zero if the buffer comes from a different driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj߳ubeh}(h]h ]h"]h$]h&]uh1jShjóubeh}(h]h ]h"]h$]h&]uh1j<hj޳hMhjNubj=)}(h``pad`` Will be zero on return.h](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj ubjT)}(hhh]h)}(hWill be zero on return.h]hWill be zero on return.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj(ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj'hMhjNubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jDRM_IOCTL_PANTHOR (C macro)c.DRM_IOCTL_PANTHORhNtauh1jhjJghhhNhNubj)}(hhh](j)}(hDRM_IOCTL_PANTHORh]j)}(hDRM_IOCTL_PANTHORh]j!)}(hDRM_IOCTL_PANTHORh]j')}(hjfh]hDRM_IOCTL_PANTHOR}(hjphhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjlubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMubah}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjdhhhjhMubah}(h]j_ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjahhubjU)}(hhh]h}(h]h ]h"]h$]h&]uh1jThjahhhjhMubeh}(h]h ](jqmacroeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjJghNhNubh)}(h.``DRM_IOCTL_PANTHOR (__access, __id, __type)``h]j)}(hjh]h*DRM_IOCTL_PANTHOR (__access, __id, __type)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjJghhubj)}(hBuild a Panthor IOCTL number h]h)}(hBuild a Panthor IOCTL numberh]hBuild a Panthor IOCTL number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjʴhMhjJghhubj})}(hXJ**Parameters** ``__access`` Access type. Must be R, W or RW. ``__id`` One of the DRM_PANTHOR_xxx id. ``__type`` Suffix of the type being passed to the IOCTL. **Description** Don't use this macro directly, use the DRM_IOCTL_PANTHOR_xxx values instead. **Return** An IOCTL number to be passed to ioctl() from userspace.h](h)}(h**Parameters**h]j)}(hj״h]h Parameters}(hjٴhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjմubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjѴubj8)}(hhh](j=)}(h.``__access`` Access type. Must be R, W or RW. h](jC)}(h ``__access``h]j)}(hjh]h__access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjubjT)}(hhh]h)}(h Access type. Must be R, W or RW.h]h Access type. Must be R, W or RW.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj hMhjubj=)}(h(``__id`` One of the DRM_PANTHOR_xxx id. h](jC)}(h``__id``h]j)}(hj/h]h__id}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhj)ubjT)}(hhh]h)}(hOne of the DRM_PANTHOR_xxx id.h]hOne of the DRM_PANTHOR_xxx id.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jShj)ubeh}(h]h ]h"]h$]h&]uh1j<hjDhMhjubj=)}(h9``__type`` Suffix of the type being passed to the IOCTL. h](jC)}(h ``__type``h]j)}(hjhh]h__type}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jBh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjbubjT)}(hhh]h)}(h-Suffix of the type being passed to the IOCTL.h]h-Suffix of the type being passed to the IOCTL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj~ubah}(h]h ]h"]h$]h&]uh1jShjbubeh}(h]h ]h"]h$]h&]uh1j<hj}hMhjubeh}(h]h ]h"]h$]h&]uh1j7hjѴubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjѴubh)}(hLDon't use this macro directly, use the DRM_IOCTL_PANTHOR_xxx values instead.h]hNDon’t use this macro directly, use the DRM_IOCTL_PANTHOR_xxx values instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjѴubh)}(h **Return**h]j)}(hjʵh]hReturn}(hj̵hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȵubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjѴubh)}(h7An IOCTL number to be passed to ioctl() from userspace.h]h7An IOCTL number to be passed to ioctl() from userspace.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:26: ./include/uapi/drm/panthor_drm.hhMhjѴubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjJghhhNhNubeh}(h]jah ]h"]drm/panthor uapiah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h drm/xe uAPIh]h drm/xe uAPI}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjhhhhhKubj )}(h.. _Xe Device Block Diagram:h]h}(h]h ]h"]h$]h&]hʌxe-device-block-diagramuh1j hKhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hubh)}(h**Xe Device Block Diagram**h]j)}(hjh]hXe Device Block Diagram}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]jah ]h"]xe device block diagramah$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjhhj3}j/jsj5}jjsubh)}(hXThe diagram below represents a high-level simplification of a discrete GPU supported by the Xe driver. It shows some device components which are necessary to understand this API, as well as how their relations to each other. This diagram does not represent real hardware::h]hXThe diagram below represents a high-level simplification of a discrete GPU supported by the Xe driver. It shows some device components which are necessary to understand this API, as well as how their relations to each other. This diagram does not represent real hardware:}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjhhubj)}(hX┌──────────────────────────────────────────────────────────────────┐ │ ┌──────────────────────────────────────────────────┐ ┌─────────┐ │ │ │ ┌───────────────────────┐ ┌─────┐ │ │ ┌─────┐ │ │ │ │ │ VRAM0 ├───┤ ... │ │ │ │VRAM1│ │ │ │ │ └───────────┬───────────┘ └─GT1─┘ │ │ └──┬──┘ │ │ │ │ ┌──────────────────┴───────────────────────────┐ │ │ ┌──┴──┐ │ │ │ │ │ ┌─────────────────────┐ ┌─────────────────┐ │ │ │ │ │ │ │ │ │ │ │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ │ ┌─────┐ ┌─────┐ │ │ │ │ │ │ │ │ │ │ │ │ │EU│ │EU│ │EU│ │EU│ │ │ │RCS0 │ │BCS0 │ │ │ │ │ │ │ │ │ │ │ │ │ └──┘ └──┘ └──┘ └──┘ │ │ └─────┘ └─────┘ │ │ │ │ │ │ │ │ │ │ │ │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ │ ┌─────┐ ┌─────┐ │ │ │ │ │ │ │ │ │ │ │ │ │EU│ │EU│ │EU│ │EU│ │ │ │VCS0 │ │VCS1 │ │ │ │ │ │ │ │ │ │ │ │ │ └──┘ └──┘ └──┘ └──┘ │ │ └─────┘ └─────┘ │ │ │ │ │ │ │ │ │ │ │ │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ │ ┌─────┐ ┌─────┐ │ │ │ │ │ │ │ │ │ │ │ │ │EU│ │EU│ │EU│ │EU│ │ │ │VECS0│ │VECS1│ │ │ │ │ │ ... │ │ │ │ │ │ │ └──┘ └──┘ └──┘ └──┘ │ │ └─────┘ └─────┘ │ │ │ │ │ │ │ │ │ │ │ │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ │ ┌─────┐ ┌─────┐ │ │ │ │ │ │ │ │ │ │ │ │ │EU│ │EU│ │EU│ │EU│ │ │ │CCS0 │ │CCS1 │ │ │ │ │ │ │ │ │ │ │ │ │ └──┘ └──┘ └──┘ └──┘ │ │ └─────┘ └─────┘ │ │ │ │ │ │ │ │ │ │ │ └─────────DSS─────────┘ │ ┌─────┐ ┌─────┐ │ │ │ │ │ │ │ │ │ │ │ │ │CCS2 │ │CCS3 │ │ │ │ │ │ │ │ │ │ │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ └─────┘ └─────┘ │ │ │ │ │ │ │ │ │ │ │ │ ... │ │ ... │ │ ... │ │ │ │ │ │ │ │ │ │ │ │ │ └─DSS─┘ └─DSS─┘ └─DSS─┘ └─────Engines─────┘ │ │ │ │ │ │ │ │ │ └───────────────────────────GT0────────────────┘ │ │ └─GT2─┘ │ │ │ └────────────────────────────Tile0─────────────────┘ └─ Tile1──┘ │ └─────────────────────────────Device0───────┬──────────────────────┘ │ ───────────────────────┴────────── PCI bush]hX┌──────────────────────────────────────────────────────────────────┐ │ ┌──────────────────────────────────────────────────┐ ┌─────────┐ │ │ │ ┌───────────────────────┐ ┌─────┐ │ │ ┌─────┐ │ │ │ │ │ VRAM0 ├───┤ ... │ │ │ │VRAM1│ │ │ │ │ └───────────┬───────────┘ └─GT1─┘ │ │ └──┬──┘ │ │ │ │ ┌──────────────────┴───────────────────────────┐ │ │ ┌──┴──┐ │ │ │ │ │ ┌─────────────────────┐ ┌─────────────────┐ │ │ │ │ │ │ │ │ │ │ │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ │ ┌─────┐ ┌─────┐ │ │ │ │ │ │ │ │ │ │ │ │ │EU│ │EU│ │EU│ │EU│ │ │ │RCS0 │ │BCS0 │ │ │ │ │ │ │ │ │ │ │ │ │ └──┘ └──┘ └──┘ └──┘ │ │ └─────┘ └─────┘ │ │ │ │ │ │ │ │ │ │ │ │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ │ ┌─────┐ ┌─────┐ │ │ │ │ │ │ │ │ │ │ │ │ │EU│ │EU│ │EU│ │EU│ │ │ │VCS0 │ │VCS1 │ │ │ │ │ │ │ │ │ │ │ │ │ └──┘ └──┘ └──┘ └──┘ │ │ └─────┘ └─────┘ │ │ │ │ │ │ │ │ │ │ │ │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ │ ┌─────┐ ┌─────┐ │ │ │ │ │ │ │ │ │ │ │ │ │EU│ │EU│ │EU│ │EU│ │ │ │VECS0│ │VECS1│ │ │ │ │ │ ... │ │ │ │ │ │ │ └──┘ └──┘ └──┘ └──┘ │ │ └─────┘ └─────┘ │ │ │ │ │ │ │ │ │ │ │ │ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │ │ ┌─────┐ ┌─────┐ │ │ │ │ │ │ │ │ │ │ │ │ │EU│ │EU│ │EU│ │EU│ │ │ │CCS0 │ │CCS1 │ │ │ │ │ │ │ │ │ │ │ │ │ └──┘ └──┘ └──┘ └──┘ │ │ └─────┘ └─────┘ │ │ │ │ │ │ │ │ │ │ │ └─────────DSS─────────┘ │ ┌─────┐ ┌─────┐ │ │ │ │ │ │ │ │ │ │ │ │ │CCS2 │ │CCS3 │ │ │ │ │ │ │ │ │ │ │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ └─────┘ └─────┘ │ │ │ │ │ │ │ │ │ │ │ │ ... │ │ ... │ │ ... │ │ │ │ │ │ │ │ │ │ │ │ │ └─DSS─┘ └─DSS─┘ └─DSS─┘ └─────Engines─────┘ │ │ │ │ │ │ │ │ │ └───────────────────────────GT0────────────────┘ │ │ └─GT2─┘ │ │ │ └────────────────────────────Tile0─────────────────┘ └─ Tile1──┘ │ └─────────────────────────────Device0───────┬──────────────────────┘ │ ───────────────────────┴────────── PCI bus}hjDsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjhhubj )}(h.. _Xe uAPI Overview:h]h}(h]h ]h"]h$]h&]hʌxe-uapi-overviewuh1j hK)hjhhhjubh)}(h**Xe uAPI Overview**,h]j)}(hj`h]hXe uAPI Overview}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]j]ah ]h"]xe uapi overviewah$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhK@hjhhj3}jsjSsj5}j]jSsubh)}(hThis section aims to describe the Xe's IOCTL entries, its structs, and other Xe related uAPI such as uevents and PMU (Platform Monitoring Unit) related entries and usage.h]hThis section aims to describe the Xe’s IOCTL entries, its structs, and other Xe related uAPI such as uevents and PMU (Platform Monitoring Unit) related entries and usage.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKAhjhhubj8)}(hhh]j=)}(hXList of supported IOCTLs: - :c:type:`DRM_IOCTL_XE_DEVICE_QUERY` - :c:type:`DRM_IOCTL_XE_GEM_CREATE` - :c:type:`DRM_IOCTL_XE_GEM_MMAP_OFFSET` - :c:type:`DRM_IOCTL_XE_VM_CREATE` - :c:type:`DRM_IOCTL_XE_VM_DESTROY` - :c:type:`DRM_IOCTL_XE_VM_BIND` - :c:type:`DRM_IOCTL_XE_EXEC_QUEUE_CREATE` - :c:type:`DRM_IOCTL_XE_EXEC_QUEUE_DESTROY` - :c:type:`DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY` - :c:type:`DRM_IOCTL_XE_EXEC` - :c:type:`DRM_IOCTL_XE_WAIT_USER_FENCE` - :c:type:`DRM_IOCTL_XE_OBSERVATION` - :c:type:`DRM_IOCTL_XE_MADVISE` - :c:type:`DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS` - :c:type:`DRM_IOCTL_XE_EXEC_QUEUE_SET_PROPERTY` - :c:type:`DRM_IOCTL_XE_VM_GET_PROPERTY` h](jC)}(hList of supported IOCTLs:h]hList of supported IOCTLs:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKVhjubjT)}(hhh]h)}(hhh](h)}(h#:c:type:`DRM_IOCTL_XE_DEVICE_QUERY`h]h)}(hjh]h)}(hjh]j)}(hjh]hDRM_IOCTL_XE_DEVICE_QUERY}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_DEVICE_QUERYuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKFhjubah}(h]h ]h"]h$]h&]uh1hhjɶhKFhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h!:c:type:`DRM_IOCTL_XE_GEM_CREATE`h]h)}(hjضh]h)}(hjضh]j)}(hjضh]hDRM_IOCTL_XE_GEM_CREATE}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjݶubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_GEM_CREATEuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKGhjڶubah}(h]h ]h"]h$]h&]uh1hhjhKGhjֶubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h&:c:type:`DRM_IOCTL_XE_GEM_MMAP_OFFSET`h]h)}(hj h]h)}(hj h]j)}(hj h]hDRM_IOCTL_XE_GEM_MMAP_OFFSET}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_GEM_MMAP_OFFSETuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKHhj ubah}(h]h ]h"]h$]h&]uh1hhj-hKHhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h :c:type:`DRM_IOCTL_XE_VM_CREATE`h]h)}(hj<h]h)}(hj<h]j)}(hj<h]hDRM_IOCTL_XE_VM_CREATE}(hjDhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_VM_CREATEuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKIhj>ubah}(h]h ]h"]h$]h&]uh1hhj_hKIhj:ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h!:c:type:`DRM_IOCTL_XE_VM_DESTROY`h]h)}(hjnh]h)}(hjnh]j)}(hjnh]hDRM_IOCTL_XE_VM_DESTROY}(hjvhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_VM_DESTROYuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKJhjpubah}(h]h ]h"]h$]h&]uh1hhjhKJhjlubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h:c:type:`DRM_IOCTL_XE_VM_BIND`h]h)}(hjh]h)}(hjh]j)}(hjh]hDRM_IOCTL_XE_VM_BIND}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_VM_BINDuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKKhjubah}(h]h ]h"]h$]h&]uh1hhj÷hKKhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h(:c:type:`DRM_IOCTL_XE_EXEC_QUEUE_CREATE`h]h)}(hjҷh]h)}(hjҷh]j)}(hjҷh]hDRM_IOCTL_XE_EXEC_QUEUE_CREATE}(hjڷhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj׷ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_EXEC_QUEUE_CREATEuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKLhjԷubah}(h]h ]h"]h$]h&]uh1hhjhKLhjзubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h):c:type:`DRM_IOCTL_XE_EXEC_QUEUE_DESTROY`h]h)}(hjh]h)}(hjh]j)}(hjh]hDRM_IOCTL_XE_EXEC_QUEUE_DESTROY}(hj hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_EXEC_QUEUE_DESTROYuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKMhjubah}(h]h ]h"]h$]h&]uh1hhj'hKMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h.:c:type:`DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY`h]h)}(hj6h]h)}(hj6h]j)}(hj6h]h$DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY}(hj>hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ$DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTYuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKNhj8ubah}(h]h ]h"]h$]h&]uh1hhjYhKNhj4ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h:c:type:`DRM_IOCTL_XE_EXEC`h]h)}(hjhh]h)}(hjhh]j)}(hjhh]hDRM_IOCTL_XE_EXEC}(hjphhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_EXECuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKOhjjubah}(h]h ]h"]h$]h&]uh1hhjhKOhjfubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h&:c:type:`DRM_IOCTL_XE_WAIT_USER_FENCE`h]h)}(hjh]h)}(hjh]j)}(hjh]hDRM_IOCTL_XE_WAIT_USER_FENCE}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_WAIT_USER_FENCEuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKPhjubah}(h]h ]h"]h$]h&]uh1hhjhKPhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h":c:type:`DRM_IOCTL_XE_OBSERVATION`h]h)}(hj̸h]h)}(hj̸h]j)}(hj̸h]hDRM_IOCTL_XE_OBSERVATION}(hjԸhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjѸubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_OBSERVATIONuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKQhjθubah}(h]h ]h"]h$]h&]uh1hhjhKQhjʸubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h:c:type:`DRM_IOCTL_XE_MADVISE`h]h)}(hjh]h)}(hjh]j)}(hjh]hDRM_IOCTL_XE_MADVISE}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_MADVISEuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKRhjubah}(h]h ]h"]h$]h&]uh1hhj!hKRhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h/:c:type:`DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS`h]h)}(hj0h]h)}(hj0h]j)}(hj0h]h%DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS}(hj8hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ%DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRSuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKShj2ubah}(h]h ]h"]h$]h&]uh1hhjShKShj.ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h.:c:type:`DRM_IOCTL_XE_EXEC_QUEUE_SET_PROPERTY`h]h)}(hjbh]h)}(hjbh]j)}(hjbh]h$DRM_IOCTL_XE_EXEC_QUEUE_SET_PROPERTY}(hjjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ$DRM_IOCTL_XE_EXEC_QUEUE_SET_PROPERTYuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKThjdubah}(h]h ]h"]h$]h&]uh1hhjhKThj`ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h(:c:type:`DRM_IOCTL_XE_VM_GET_PROPERTY` h]h)}(h&:c:type:`DRM_IOCTL_XE_VM_GET_PROPERTY`h]h)}(hjh]j)}(hjh]hDRM_IOCTL_XE_VM_GET_PROPERTY}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_VM_GET_PROPERTYuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKUhjubah}(h]h ]h"]h$]h&]uh1hhjhKUhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjɶhKFhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhKVhjubah}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubj )}(h.. _Xe IOCTL Extensions:h]h}(h]h ]h"]h$]h&]hʌxe-ioctl-extensionsuh1j hKDhjhhhjubh)}(h**Xe IOCTL Extensions**h]j)}(hjh]hXe IOCTL Extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]jah ]h"]xe ioctl extensionsah$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKZhjhhj3}jjݹsj5}jjݹsubh)}(hoBefore detailing the IOCTLs and its structs, it is important to highlight that every IOCTL in Xe is extensible.h]hoBefore detailing the IOCTLs and its structs, it is important to highlight that every IOCTL in Xe is extensible.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjhhubh)}(hX5Many interfaces need to grow over time. In most cases we can simply extend the struct and have userspace pass in more data. Another option, as demonstrated by Vulkan's approach to providing extensions for forward and backward compatibility, is to use a list of optional structs to provide those extra details.h]hX7Many interfaces need to grow over time. In most cases we can simply extend the struct and have userspace pass in more data. Another option, as demonstrated by Vulkan’s approach to providing extensions for forward and backward compatibility, is to use a list of optional structs to provide those extra details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjhhubh)}(hXMThe key advantage to using an extension chain is that it allows us to redefine the interface more easily than an ever growing struct of increasing complexity, and for large parts of that interface to be entirely optional. The downside is more pointer chasing; chasing across the __user boundary with pointers encapsulated inside u64.h]hXMThe key advantage to using an extension chain is that it allows us to redefine the interface more easily than an ever growing struct of increasing complexity, and for large parts of that interface to be entirely optional. The downside is more pointer chasing; chasing across the __user boundary with pointers encapsulated inside u64.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjhhubh)}(hExample chaining:h]hExample chaining:}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjhhubj)}(hX/struct drm_xe_user_extension ext3 { .next_extension = 0, // end .name = ..., }; struct drm_xe_user_extension ext2 { .next_extension = (uintptr_t)&ext3, .name = ..., }; struct drm_xe_user_extension ext1 { .next_extension = (uintptr_t)&ext2, .name = ..., };h]hX/struct drm_xe_user_extension ext3 { .next_extension = 0, // end .name = ..., }; struct drm_xe_user_extension ext2 { .next_extension = (uintptr_t)&ext3, .name = ..., }; struct drm_xe_user_extension ext1 { .next_extension = (uintptr_t)&ext2, .name = ..., };}hj?sbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjhhubh)}(hTypically the struct drm_xe_user_extension would be embedded in some uAPI struct, and in this case we would feed it the head of the chain(i.e ext1), which would then apply all of the above extensions.h]hTypically the struct drm_xe_user_extension would be embedded in some uAPI struct, and in this case we would feed it the head of the chain(i.e ext1), which would then apply all of the above extensions.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_xe_user_extension (C struct)c.drm_xe_user_extensionhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_user_extensionh]j)}(hstruct drm_xe_user_extensionh](j)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjshhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjhKubj!)}(hdrm_xe_user_extensionh]j')}(hjqh]hdrm_xe_user_extension}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjshhhjhKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjohhhjhKubah}(h]jjah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhKhjlhhubjU)}(hhh]h)}(h-Base class for defining a chain of extensionsh]h-Base class for defining a chain of extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jThjlhhhjhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjѺjxjѺjyjzj{uh1jhhhjhjhM ubj})}(hX3**Definition**:: struct drm_xe_user_extension { __u64 next_extension; __u32 name; __u32 pad; }; **Members** ``next_extension`` Pointer to the next struct drm_xe_user_extension, or zero if the end. ``name`` Name of the extension. Note that the name here is just some integer. Also note that the name space for this is not global for the whole driver, but rather its scope/meaning is limited to the specific piece of uAPI which has embedded the struct drm_xe_user_extension. ``pad`` MBZ All undefined bits must be zero.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjݺhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjٺubh:}(hjٺhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjպubj)}(hZstruct drm_xe_user_extension { __u64 next_extension; __u32 name; __u32 pad; };h]hZstruct drm_xe_user_extension { __u64 next_extension; __u32 name; __u32 pad; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjպubh)}(h **Members**h]j)}(hjh]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjպubj8)}(hhh](j=)}(hY``next_extension`` Pointer to the next struct drm_xe_user_extension, or zero if the end. h](jC)}(h``next_extension``h]j)}(hj&h]hnext_extension}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhj ubjT)}(hhh]h)}(hEPointer to the next struct drm_xe_user_extension, or zero if the end.h]hEPointer to the next struct drm_xe_user_extension, or zero if the end.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKhj<ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj;hKhjubj=)}(hX``name`` Name of the extension. Note that the name here is just some integer. Also note that the name space for this is not global for the whole driver, but rather its scope/meaning is limited to the specific piece of uAPI which has embedded the struct drm_xe_user_extension. h](jC)}(h``name``h]j)}(hj_h]hname}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjYubjT)}(hhh](h)}(hName of the extension.h]hName of the extension.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjuubh)}(h-Note that the name here is just some integer.h]h-Note that the name here is just some integer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjuubh)}(hAlso note that the name space for this is not global for the whole driver, but rather its scope/meaning is limited to the specific piece of uAPI which has embedded the struct drm_xe_user_extension.h]hAlso note that the name space for this is not global for the whole driver, but rather its scope/meaning is limited to the specific piece of uAPI which has embedded the struct drm_xe_user_extension.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjuubeh}(h]h ]h"]h$]h&]uh1jShjYubeh}(h]h ]h"]h$]h&]uh1j<hjthKhjubj=)}(h-``pad`` MBZ All undefined bits must be zero.h](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubjT)}(hhh](h)}(hMBZh]hMBZ}(hjлhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjͻubh)}(h All undefined bits must be zero.h]h All undefined bits must be zero.}(hj߻hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjͻubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj̻hKhjubeh}(h]h ]h"]h$]h&]uh1j7hjպubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_xe_ext_set_property (C struct)c.drm_xe_ext_set_propertyhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_ext_set_propertyh]j)}(hstruct drm_xe_ext_set_propertyh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj-hKubj!)}(hdrm_xe_ext_set_propertyh]j')}(hjh]hdrm_xe_ext_set_property}(hj@hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj<ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhj-hKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhj-hKubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj-hKhjhhubjU)}(hhh]h)}(hGeneric set property extensionh]hGeneric set property extension}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhj_hhubah}(h]h ]h"]h$]h&]uh1jThjhhhj-hKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjzjxjzjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_ext_set_property { struct drm_xe_user_extension base; __u32 property; __u32 pad; union { __u64 value; __u64 ptr; }; __u64 reserved[2]; }; **Members** ``base`` base user extension ``property`` property to set ``pad`` MBZ ``{unnamed_union}`` anonymous ``value`` property value ``ptr`` pointer to user value ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhj~ubj)}(hstruct drm_xe_ext_set_property { struct drm_xe_user_extension base; __u32 property; __u32 pad; union { __u64 value; __u64 ptr; }; __u64 reserved[2]; };h]hstruct drm_xe_ext_set_property { struct drm_xe_user_extension base; __u32 property; __u32 pad; union { __u64 value; __u64 ptr; }; __u64 reserved[2]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhj~ubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhj~ubj8)}(hhh](j=)}(h``base`` base user extension h](jC)}(h``base``h]j)}(hjϼh]hbase}(hjѼhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjͼubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjɼubjT)}(hhh]h)}(hbase user extensionh]hbase user extension}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jShjɼubeh}(h]h ]h"]h$]h&]uh1j<hjhKhjƼubj=)}(h``property`` property to set h](jC)}(h ``property``h]j)}(hjh]hproperty}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubjT)}(hhh]h)}(hproperty to seth]hproperty to set}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhKhjƼubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjAh]hpad}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhj;ubjT)}(hhh]h)}(hMBZh]hMBZ}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhKhjWubah}(h]h ]h"]h$]h&]uh1jShj;ubeh}(h]h ]h"]h$]h&]uh1j<hjVhKhjƼubj=)}(h``{unnamed_union}`` anonymous h](jC)}(h``{unnamed_union}``h]j)}(hjzh]h{unnamed_union}}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjtubjT)}(hhh]h)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jShjtubeh}(h]h ]h"]h$]h&]uh1j<hjhKhjƼubj=)}(h``value`` property value h](jC)}(h ``value``h]j)}(hjh]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubjT)}(hhh]h)}(hproperty valueh]hproperty value}(hj̽hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjȽhKhjɽubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjȽhKhjƼubj=)}(h``ptr`` pointer to user value h](jC)}(h``ptr``h]j)}(hjh]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubjT)}(hhh]h)}(hpointer to user valueh]hpointer to user value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhKhjƼubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hj%h]hreserved}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubjT)}(hhh]h)}(hReservedh]hReserved}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhj;ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj:hKhjƼubeh}(h]h ]h"]h$]h&]uh1j7hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjhhubh)}(h`A generic struct that allows any of the Xe's IOCTL to be extended with a set_property operation.h]hbA generic struct that allows any of the Xe’s IOCTL to be extended with a set_property operation.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'drm_xe_engine_class_instance (C struct)c.drm_xe_engine_class_instancehNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_engine_class_instanceh]j)}(h#struct drm_xe_engine_class_instanceh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj!)}(hdrm_xe_engine_class_instanceh]j')}(hjh]hdrm_xe_engine_class_instance}(hjƾhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj¾ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhKubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhKhjhhubjU)}(hhh]h)}(hinstance of an engine classh]hinstance of an engine class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hXy**Definition**:: struct drm_xe_engine_class_instance { #define DRM_XE_ENGINE_CLASS_RENDER 0; #define DRM_XE_ENGINE_CLASS_COPY 1; #define DRM_XE_ENGINE_CLASS_VIDEO_DECODE 2; #define DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE 3; #define DRM_XE_ENGINE_CLASS_COMPUTE 4; #define DRM_XE_ENGINE_CLASS_VM_BIND 5; __u16 engine_class; __u16 engine_instance; __u16 gt_id; __u16 pad; }; **Members** ``engine_class`` engine class id ``engine_instance`` engine instance id ``gt_id`` Unique ID of this GT within the PCI Device ``pad`` MBZh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubj)}(hXstruct drm_xe_engine_class_instance { #define DRM_XE_ENGINE_CLASS_RENDER 0; #define DRM_XE_ENGINE_CLASS_COPY 1; #define DRM_XE_ENGINE_CLASS_VIDEO_DECODE 2; #define DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE 3; #define DRM_XE_ENGINE_CLASS_COMPUTE 4; #define DRM_XE_ENGINE_CLASS_VM_BIND 5; __u16 engine_class; __u16 engine_instance; __u16 gt_id; __u16 pad; };h]hXstruct drm_xe_engine_class_instance { #define DRM_XE_ENGINE_CLASS_RENDER 0; #define DRM_XE_ENGINE_CLASS_COPY 1; #define DRM_XE_ENGINE_CLASS_VIDEO_DECODE 2; #define DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE 3; #define DRM_XE_ENGINE_CLASS_COMPUTE 4; #define DRM_XE_ENGINE_CLASS_VM_BIND 5; __u16 engine_class; __u16 engine_instance; __u16 gt_id; __u16 pad; };}hj%sbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubh)}(h **Members**h]j)}(hj6h]hMembers}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubj8)}(hhh](j=)}(h!``engine_class`` engine class id h](jC)}(h``engine_class``h]j)}(hjUh]h engine_class}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjOubjT)}(hhh]h)}(hengine class idh]hengine class id}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhKhjkubah}(h]h ]h"]h$]h&]uh1jShjOubeh}(h]h ]h"]h$]h&]uh1j<hjjhKhjLubj=)}(h'``engine_instance`` engine instance id h](jC)}(h``engine_instance``h]j)}(hjh]hengine_instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hengine instance idh]hengine instance id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjLubj=)}(h5``gt_id`` Unique ID of this GT within the PCI Device h](jC)}(h ``gt_id``h]j)}(hjǿh]hgt_id}(hjɿhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjſubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h*Unique ID of this GT within the PCI Deviceh]h*Unique ID of this GT within the PCI Device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjܿhMhjݿubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjܿhMhjLubj=)}(h ``pad`` MBZh](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjLubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjCh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hXIt is returned as part of the :c:type:`struct drm_xe_engine `, but it also is used as the input of engine selection for both :c:type:`struct drm_xe_exec_queue_create ` and :c:type:`struct drm_xe_query_engine_cycles `h](hIt is returned as part of the }(hjYhhhNhNubh)}(h.:c:type:`struct drm_xe_engine `h]j)}(hjch]hstruct drm_xe_engine}(hjehhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ drm_xe_engineuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjYubh@, but it also is used as the input of engine selection for both }(hjYhhhNhNubh)}(hD:c:type:`struct drm_xe_exec_queue_create `h]j)}(hjh]hstruct drm_xe_exec_queue_create}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_exec_queue_createuh1hhjhKhjYubh and }(hjYhhhNhNubh)}(hH:c:type:`struct drm_xe_query_engine_cycles `h]j)}(hjh]h!struct drm_xe_query_engine_cycles}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_query_engine_cyclesuh1hhjhKhjYubeh}(h]h ]h"]h$]h&]uh1hhjhKhjhhubj8)}(hhh]j=)}(hXiThe **engine_class** can be: - ``DRM_XE_ENGINE_CLASS_RENDER`` - ``DRM_XE_ENGINE_CLASS_COPY`` - ``DRM_XE_ENGINE_CLASS_VIDEO_DECODE`` - ``DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE`` - ``DRM_XE_ENGINE_CLASS_COMPUTE`` - ``DRM_XE_ENGINE_CLASS_VM_BIND`` - Kernel only classes (not actual hardware engine class). Used for creating ordered queues of VM bind operations. h](jC)}(hThe **engine_class** can be:h](hThe }(hjhhhNhNubj)}(h**engine_class**h]h engine_class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh can be:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubjT)}(hhh]h)}(hhh](h)}(h``DRM_XE_ENGINE_CLASS_RENDER``h]h)}(hjh]j)}(hjh]hDRM_XE_ENGINE_CLASS_RENDER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h``DRM_XE_ENGINE_CLASS_COPY``h]h)}(hjh]j)}(hjh]hDRM_XE_ENGINE_CLASS_COPY}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h$``DRM_XE_ENGINE_CLASS_VIDEO_DECODE``h]h)}(hj?h]j)}(hj?h]h DRM_XE_ENGINE_CLASS_VIDEO_DECODE}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhj=ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h%``DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE``h]h)}(hj`h]j)}(hj`h]h!DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhj^ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h``DRM_XE_ENGINE_CLASS_COMPUTE``h]h)}(hjh]j)}(hjh]hDRM_XE_ENGINE_CLASS_COMPUTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h``DRM_XE_ENGINE_CLASS_VM_BIND`` - Kernel only classes (not actual hardware engine class). Used for creating ordered queues of VM bind operations. h]h)}(h``DRM_XE_ENGINE_CLASS_VM_BIND`` - Kernel only classes (not actual hardware engine class). Used for creating ordered queues of VM bind operations.h](j)}(h``DRM_XE_ENGINE_CLASS_VM_BIND``h]hDRM_XE_ENGINE_CLASS_VM_BIND}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhr - Kernel only classes (not actual hardware engine class). Used for creating ordered queues of VM bind operations.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhKhjubah}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_engine (C struct)c.drm_xe_enginehNtauh1jhjhhhjhM ubj)}(hhh](j)}(h drm_xe_engineh]j)}(hstruct drm_xe_engineh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj!)}(h drm_xe_engineh]j')}(hjh]h drm_xe_engine}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhKubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhKhjhhubjU)}(hhh]h)}(hdescribe hardware engineh]hdescribe hardware engine}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj7hhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjRjxjRjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_engine { struct drm_xe_engine_class_instance instance; __u64 reserved[3]; }; **Members** ``instance`` The :c:type:`struct drm_xe_engine_class_instance ` ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh:}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjVubj)}(hbstruct drm_xe_engine { struct drm_xe_engine_class_instance instance; __u64 reserved[3]; };h]hbstruct drm_xe_engine { struct drm_xe_engine_class_instance instance; __u64 reserved[3]; };}hjwsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjVubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjVubj8)}(hhh](j=)}(h^``instance`` The :c:type:`struct drm_xe_engine_class_instance ` h](jC)}(h ``instance``h]j)}(hjh]hinstance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjubjT)}(hhh]h)}(hPThe :c:type:`struct drm_xe_engine_class_instance `h](hThe }(hjhhhNhNubh)}(hL:c:type:`struct drm_xe_engine_class_instance `h]j)}(hjh]h#struct drm_xe_engine_class_instance}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_engine_class_instanceuh1hhjhM hjubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM hjubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjh]hreserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hReservedh]hReserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_query_engines (C struct)c.drm_xe_query_engineshNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_query_enginesh]j)}(hstruct drm_xe_query_enginesh](j)}(hjh]hstruct}(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjUhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUhhhjfhMubj!)}(hdrm_xe_query_enginesh]j')}(hjSh]hdrm_xe_query_engines}(hjyhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjuubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjUhhhjfhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjQhhhjfhMubah}(h]jLah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjfhMhjNhhubjU)}(hhh]h)}(hdescribe enginesh]hdescribe engines}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjNhhhjfhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_query_engines { __u32 num_engines; __u32 pad; struct drm_xe_engine engines[]; }; **Members** ``num_engines`` number of engines returned in **engines** ``pad`` MBZ ``engines`` The returned engines for this deviceh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj)}(hjstruct drm_xe_query_engines { __u32 num_engines; __u32 pad; struct drm_xe_engine engines[]; };h]hjstruct drm_xe_query_engines { __u32 num_engines; __u32 pad; struct drm_xe_engine engines[]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjubj8)}(hhh](j=)}(h:``num_engines`` number of engines returned in **engines** h](jC)}(h``num_engines``h]j)}(hjh]h num_engines}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h)number of engines returned in **engines**h](hnumber of engines returned in }(hj!hhhNhNubj)}(h **engines**h]hengines}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjOh]hpad}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjIubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjeubah}(h]h ]h"]h$]h&]uh1jShjIubeh}(h]h ]h"]h$]h&]uh1j<hjdhMhjubj=)}(h0``engines`` The returned engines for this deviceh](jC)}(h ``engines``h]j)}(hjh]hengines}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h$The returned engines for this deviceh]h$The returned engines for this device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM#hjhhubh)}(hIf a query is made with a :c:type:`struct drm_xe_device_query ` where .query is equal to ``DRM_XE_DEVICE_QUERY_ENGINES``, then the reply uses an array of :c:type:`struct drm_xe_query_engines ` in .data.h](hIf a query is made with a }(hjhhhNhNubh)}(h::c:type:`struct drm_xe_device_query `h]j)}(hjh]hstruct drm_xe_device_query}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_device_queryuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh where .query is equal to }(hjhhhNhNubj)}(h``DRM_XE_DEVICE_QUERY_ENGINES``h]hDRM_XE_DEVICE_QUERY_ENGINES}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh", then the reply uses an array of }(hjhhhNhNubh)}(h<:c:type:`struct drm_xe_query_engines `h]j)}(hj!h]hstruct drm_xe_query_engines}(hj#hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_query_enginesuh1hhjhMhjubh in .data.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_memory_class (C enum)c.drm_xe_memory_classhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_memory_classh]j)}(henum drm_xe_memory_classh](j)}(hjh]henum}(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj]hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]hhhjnhMubj!)}(hdrm_xe_memory_classh]j')}(hj[h]hdrm_xe_memory_class}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj}ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj]hhhjnhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjYhhhjnhMubah}(h]jTah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjnhMhjVhhubjU)}(hhh]h)}(hSupported memory classes.h]hSupported memory classes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM$hjhhubah}(h]h ]h"]h$]h&]uh1jThjVhhhjnhMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(h**Constants** ``DRM_XE_MEM_REGION_CLASS_SYSMEM`` Represents system memory. ``DRM_XE_MEM_REGION_CLASS_VRAM`` On discrete platforms, this represents the memory that is local to the device, which we call VRAM. Not valid on integrated platforms.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM(hjubj8)}(hhh](j=)}(h=``DRM_XE_MEM_REGION_CLASS_SYSMEM`` Represents system memory. h](jC)}(h"``DRM_XE_MEM_REGION_CLASS_SYSMEM``h]j)}(hjh]hDRM_XE_MEM_REGION_CLASS_SYSMEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM+hjubjT)}(hhh]h)}(hRepresents system memory.h]hRepresents system memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM+hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM+hjubj=)}(h``DRM_XE_MEM_REGION_CLASS_VRAM`` On discrete platforms, this represents the memory that is local to the device, which we call VRAM. Not valid on integrated platforms.h](jC)}(h ``DRM_XE_MEM_REGION_CLASS_VRAM``h]j)}(hjh]hDRM_XE_MEM_REGION_CLASS_VRAM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM/hjubjT)}(hhh]h)}(hOn discrete platforms, this represents the memory that is local to the device, which we call VRAM. Not valid on integrated platforms.h]hOn discrete platforms, this represents the memory that is local to the device, which we call VRAM. Not valid on integrated platforms.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM.hj3ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj2hM/hjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_mem_region (C struct)c.drm_xe_mem_regionhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_mem_regionh]j)}(hstruct drm_xe_mem_regionh](j)}(hjh]hstruct}(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjshhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM5ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjhM5ubj!)}(hdrm_xe_mem_regionh]j')}(hjqh]hdrm_xe_mem_region}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjshhhjhM5ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjohhhjhM5ubah}(h]jjah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhM5hjlhhubjU)}(hhh]h)}(h-Describes some region as known to the driver.h]h-Describes some region as known to the driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM2hjhhubah}(h]h ]h"]h$]h&]uh1jThjlhhhjhM5ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_mem_region { __u16 mem_class; __u16 instance; __u32 min_page_size; __u64 total_size; __u64 used; __u64 cpu_visible_size; __u64 cpu_visible_used; __u64 reserved[6]; }; **Members** ``mem_class`` The memory class describing this region. See enum drm_xe_memory_class for supported values. ``instance`` The unique ID for this region, which serves as the index in the placement bitmask used as argument for :c:type:`DRM_IOCTL_XE_GEM_CREATE` ``min_page_size`` Min page-size in bytes for this region. When the kernel allocates memory for this region, the underlying pages will be at least **min_page_size** in size. Buffer objects with an allowable placement in this region must be created with a size aligned to this value. GPU virtual address mappings of (parts of) buffer objects that may be placed in this region must also have their GPU virtual address and range aligned to this value. Affected IOCTLS will return ``-EINVAL`` if alignment restrictions are not met. ``total_size`` The usable size in bytes for this region. ``used`` Estimate of the memory used in bytes for this region. ``cpu_visible_size`` How much of this region can be CPU accessed, in bytes. This will always be <= **total_size**, and the remainder (if any) will not be CPU accessible. If the CPU accessible part is smaller than **total_size** then this is referred to as a small BAR system. On systems without small BAR (full BAR), the **cpu_visible_size** will always equal the **total_size**, since all of it will be CPU accessible. Note this is only tracked for DRM_XE_MEM_REGION_CLASS_VRAM regions (for other types the value here will always equal zero). ``cpu_visible_used`` Estimate of CPU visible memory used, in bytes. Note this is only currently tracked for DRM_XE_MEM_REGION_CLASS_VRAM regions (for other types the value here will always be zero). ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM6hjubj)}(hstruct drm_xe_mem_region { __u16 mem_class; __u16 instance; __u32 min_page_size; __u64 total_size; __u64 used; __u64 cpu_visible_size; __u64 cpu_visible_used; __u64 reserved[6]; };h]hstruct drm_xe_mem_region { __u16 mem_class; __u16 instance; __u32 min_page_size; __u64 total_size; __u64 used; __u64 cpu_visible_size; __u64 cpu_visible_used; __u64 reserved[6]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM8hjubh)}(h **Members**h]j)}(hjh]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMChjubj8)}(hhh](j=)}(hk``mem_class`` The memory class describing this region. See enum drm_xe_memory_class for supported values. h](jC)}(h ``mem_class``h]j)}(hj&h]h mem_class}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM:hj ubjT)}(hhh](h)}(h(The memory class describing this region.h]h(The memory class describing this region.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM8hj<ubh)}(h2See enum drm_xe_memory_class for supported values.h]h2See enum drm_xe_memory_class for supported values.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM:hj<ubeh}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj;hM:hjubj=)}(h``instance`` The unique ID for this region, which serves as the index in the placement bitmask used as argument for :c:type:`DRM_IOCTL_XE_GEM_CREATE` h](jC)}(h ``instance``h]j)}(hjnh]hinstance}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM@hjhubjT)}(hhh]h)}(hThe unique ID for this region, which serves as the index in the placement bitmask used as argument for :c:type:`DRM_IOCTL_XE_GEM_CREATE`h](hgThe unique ID for this region, which serves as the index in the placement bitmask used as argument for }(hjhhhNhNubh)}(h!:c:type:`DRM_IOCTL_XE_GEM_CREATE`h]j)}(hjh]hDRM_IOCTL_XE_GEM_CREATE}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_GEM_CREATEuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM>hjubeh}(h]h ]h"]h$]h&]uh1hhjhM>hjubah}(h]h ]h"]h$]h&]uh1jShjhubeh}(h]h ]h"]h$]h&]uh1j<hjhM@hjubj=)}(hX``min_page_size`` Min page-size in bytes for this region. When the kernel allocates memory for this region, the underlying pages will be at least **min_page_size** in size. Buffer objects with an allowable placement in this region must be created with a size aligned to this value. GPU virtual address mappings of (parts of) buffer objects that may be placed in this region must also have their GPU virtual address and range aligned to this value. Affected IOCTLS will return ``-EINVAL`` if alignment restrictions are not met. h](jC)}(h``min_page_size``h]j)}(hjh]h min_page_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMNhjubjT)}(hhh](h)}(h'Min page-size in bytes for this region.h]h'Min page-size in bytes for this region.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMDhjubh)}(hXWhen the kernel allocates memory for this region, the underlying pages will be at least **min_page_size** in size. Buffer objects with an allowable placement in this region must be created with a size aligned to this value. GPU virtual address mappings of (parts of) buffer objects that may be placed in this region must also have their GPU virtual address and range aligned to this value. Affected IOCTLS will return ``-EINVAL`` if alignment restrictions are not met.h](hXWhen the kernel allocates memory for this region, the underlying pages will be at least }(hjhhhNhNubj)}(h**min_page_size**h]h min_page_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX9 in size. Buffer objects with an allowable placement in this region must be created with a size aligned to this value. GPU virtual address mappings of (parts of) buffer objects that may be placed in this region must also have their GPU virtual address and range aligned to this value. Affected IOCTLS will return }(hjhhhNhNubj)}(h ``-EINVAL``h]h-EINVAL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh' if alignment restrictions are not met.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMFhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMNhjubj=)}(h9``total_size`` The usable size in bytes for this region. h](jC)}(h``total_size``h]j)}(hj4h]h total_size}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMRhj.ubjT)}(hhh]h)}(h)The usable size in bytes for this region.h]h)The usable size in bytes for this region.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMRhjJubah}(h]h ]h"]h$]h&]uh1jShj.ubeh}(h]h ]h"]h$]h&]uh1j<hjIhMRhjubj=)}(h?``used`` Estimate of the memory used in bytes for this region. h](jC)}(h``used``h]j)}(hjmh]hused}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMVhjgubjT)}(hhh]h)}(h5Estimate of the memory used in bytes for this region.h]h5Estimate of the memory used in bytes for this region.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMVhjubah}(h]h ]h"]h$]h&]uh1jShjgubeh}(h]h ]h"]h$]h&]uh1j<hjhMVhjubj=)}(hX#``cpu_visible_size`` How much of this region can be CPU accessed, in bytes. This will always be <= **total_size**, and the remainder (if any) will not be CPU accessible. If the CPU accessible part is smaller than **total_size** then this is referred to as a small BAR system. On systems without small BAR (full BAR), the **cpu_visible_size** will always equal the **total_size**, since all of it will be CPU accessible. Note this is only tracked for DRM_XE_MEM_REGION_CLASS_VRAM regions (for other types the value here will always equal zero). h](jC)}(h``cpu_visible_size``h]j)}(hjh]hcpu_visible_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhhjubjT)}(hhh](h)}(h6How much of this region can be CPU accessed, in bytes.h]h6How much of this region can be CPU accessed, in bytes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMZhjubh)}(hThis will always be <= **total_size**, and the remainder (if any) will not be CPU accessible. If the CPU accessible part is smaller than **total_size** then this is referred to as a small BAR system.h](hThis will always be <= }(hjhhhNhNubj)}(h**total_size**h]h total_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhd, and the remainder (if any) will not be CPU accessible. If the CPU accessible part is smaller than }(hjhhhNhNubj)}(h**total_size**h]h total_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh0 then this is referred to as a small BAR system.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM]hjubh)}(hOn systems without small BAR (full BAR), the **cpu_visible_size** will always equal the **total_size**, since all of it will be CPU accessible.h](h-On systems without small BAR (full BAR), the }(hjhhhNhNubj)}(h**cpu_visible_size**h]hcpu_visible_size}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh will always equal the }(hjhhhNhNubj)}(h**total_size**h]h total_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), since all of it will be CPU accessible.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMbhjubh)}(h{Note this is only tracked for DRM_XE_MEM_REGION_CLASS_VRAM regions (for other types the value here will always equal zero).h]h{Note this is only tracked for DRM_XE_MEM_REGION_CLASS_VRAM regions (for other types the value here will always equal zero).}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMfhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhhjubj=)}(h``cpu_visible_used`` Estimate of CPU visible memory used, in bytes. Note this is only currently tracked for DRM_XE_MEM_REGION_CLASS_VRAM regions (for other types the value here will always be zero). h](jC)}(h``cpu_visible_used``h]j)}(hjUh]hcpu_visible_used}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMqhjOubjT)}(hhh](h)}(h.Estimate of CPU visible memory used, in bytes.h]h.Estimate of CPU visible memory used, in bytes.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMlhjkubh)}(hNote this is only currently tracked for DRM_XE_MEM_REGION_CLASS_VRAM regions (for other types the value here will always be zero).h]hNote this is only currently tracked for DRM_XE_MEM_REGION_CLASS_VRAM regions (for other types the value here will always be zero).}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMohjkubeh}(h]h ]h"]h$]h&]uh1jShjOubeh}(h]h ]h"]h$]h&]uh1j<hjjhMqhjubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjh]hreserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMshjubjT)}(hhh]h)}(hReservedh]hReserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMthjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMshjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_xe_query_mem_regions (C struct)c.drm_xe_query_mem_regionshNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_query_mem_regionsh]j)}(hstruct drm_xe_query_mem_regionsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMzubj!)}(hdrm_xe_query_mem_regionsh]j')}(hjh]hdrm_xe_query_mem_regions}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMzubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMzubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMzhjhhubjU)}(hhh]h)}(hdescribe memory regionsh]hdescribe memory regions}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMxhj7hhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMzubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjRjxjRjyjzj{uh1jhhhjhjhM ubj})}(hX=**Definition**:: struct drm_xe_query_mem_regions { __u32 num_mem_regions; __u32 pad; struct drm_xe_mem_region mem_regions[]; }; **Members** ``num_mem_regions`` number of memory regions returned in **mem_regions** ``pad`` MBZ ``mem_regions`` The returned memory regions for this deviceh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh:}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM|hjVubj)}(hzstruct drm_xe_query_mem_regions { __u32 num_mem_regions; __u32 pad; struct drm_xe_mem_region mem_regions[]; };h]hzstruct drm_xe_query_mem_regions { __u32 num_mem_regions; __u32 pad; struct drm_xe_mem_region mem_regions[]; };}hjwsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM~hjVubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjVubj8)}(hhh](j=)}(hI``num_mem_regions`` number of memory regions returned in **mem_regions** h](jC)}(h``num_mem_regions``h]j)}(hjh]hnum_mem_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h4number of memory regions returned in **mem_regions**h](h%number of memory regions returned in }(hjhhhNhNubj)}(h**mem_regions**h]h mem_regions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h;``mem_regions`` The returned memory regions for this deviceh](jC)}(h``mem_regions``h]j)}(hj'h]h mem_regions}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj!ubjT)}(hhh]h)}(h+The returned memory regions for this deviceh]h+The returned memory regions for this device}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj=ubah}(h]h ]h"]h$]h&]uh1jShj!ubeh}(h]h ]h"]h$]h&]uh1j<hj<hMhjubeh}(h]h ]h"]h$]h&]uh1j7hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hIf a query is made with a struct drm_xe_device_query where .query is equal to DRM_XE_DEVICE_QUERY_MEM_REGIONS, then the reply uses struct drm_xe_query_mem_regions in .data.h]hIf a query is made with a struct drm_xe_device_query where .query is equal to DRM_XE_DEVICE_QUERY_MEM_REGIONS, then the reply uses struct drm_xe_query_mem_regions in .data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMyhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_query_config (C struct)c.drm_xe_query_confighNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_query_configh]j)}(hstruct drm_xe_query_configh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_xe_query_configh]j')}(hjh]hdrm_xe_query_config}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(h!describe the device configurationh]h!describe the device configuration}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_query_config { __u32 num_params; __u32 pad; #define DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID 0; #define DRM_XE_QUERY_CONFIG_FLAGS 1; #define DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM (1 << 0); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY (1 << 1); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR (1 << 2); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_NO_COMPRESSION_HINT (1 << 3); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_DISABLE_STATE_CACHE_PERF_FIX (1 << 4); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_PURGING_SUPPORT (1 << 5); #define DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT 2; #define DRM_XE_QUERY_CONFIG_VA_BITS 3; #define DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY 4; __u64 info[]; }; **Members** ``num_params`` number of parameters returned in info ``pad`` MBZ ``info`` array of elements containing the config infoh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj)}(hX struct drm_xe_query_config { __u32 num_params; __u32 pad; #define DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID 0; #define DRM_XE_QUERY_CONFIG_FLAGS 1; #define DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM (1 << 0); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY (1 << 1); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR (1 << 2); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_NO_COMPRESSION_HINT (1 << 3); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_DISABLE_STATE_CACHE_PERF_FIX (1 << 4); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_PURGING_SUPPORT (1 << 5); #define DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT 2; #define DRM_XE_QUERY_CONFIG_VA_BITS 3; #define DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY 4; __u64 info[]; };h]hX struct drm_xe_query_config { __u32 num_params; __u32 pad; #define DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID 0; #define DRM_XE_QUERY_CONFIG_FLAGS 1; #define DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM (1 << 0); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY (1 << 1); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR (1 << 2); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_NO_COMPRESSION_HINT (1 << 3); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_DISABLE_STATE_CACHE_PERF_FIX (1 << 4); #define DRM_XE_QUERY_CONFIG_FLAG_HAS_PURGING_SUPPORT (1 << 5); #define DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT 2; #define DRM_XE_QUERY_CONFIG_VA_BITS 3; #define DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY 4; __u64 info[]; };}hj'sbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh)}(h **Members**h]j)}(hj8h]hMembers}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj8)}(hhh](j=)}(h5``num_params`` number of parameters returned in info h](jC)}(h``num_params``h]j)}(hjWh]h num_params}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjQubjT)}(hhh]h)}(h%number of parameters returned in infoh]h%number of parameters returned in info}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jShjQubeh}(h]h ]h"]h$]h&]uh1j<hjlhMhjNubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjNubj=)}(h5``info`` array of elements containing the config infoh](jC)}(h``info``h]j)}(hjh]hinfo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h,array of elements containing the config infoh]h,array of elements containing the config info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjNubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hIf a query is made with a struct drm_xe_device_query where .query is equal to DRM_XE_DEVICE_QUERY_CONFIG, then the reply uses struct drm_xe_query_config in .data.h]hIf a query is made with a struct drm_xe_device_query where .query is equal to DRM_XE_DEVICE_QUERY_CONFIG, then the reply uses struct drm_xe_query_config in .data.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj8)}(hhh]j=)}(hXThe index in **info** can be: - ``DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID`` - Device ID (lower 16 bits) and the device revision (next 8 bits) - ``DRM_XE_QUERY_CONFIG_FLAGS`` - Flags describing the device configuration, see list below - ``DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM`` - Flag is set if the device has usable VRAM - ``DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY`` - Flag is set if the device has low latency hint support - ``DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR`` - Flag is set if the device has CPU address mirroring support - ``DRM_XE_QUERY_CONFIG_FLAG_HAS_NO_COMPRESSION_HINT`` - Flag is set if the device supports the userspace hint ``DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION``. This is exposed only on Xe2+. - ``DRM_XE_QUERY_CONFIG_FLAG_HAS_DISABLE_STATE_CACHE_PERF_FIX`` - Flag is set if a queue can be created with ``DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX`` - ``DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT`` - Minimal memory alignment required by this device, typically SZ_4K or SZ_64K - ``DRM_XE_QUERY_CONFIG_VA_BITS`` - Maximum bits of a virtual address - ``DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY`` - Value of the highest available exec queue priority h](jC)}(hThe index in **info** can be:h](h The index in }(hj8hhhNhNubj)}(h**info**h]hinfo}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh can be:}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj4ubjT)}(hhh]h)}(hhh](h)}(hk``DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID`` - Device ID (lower 16 bits) and the device revision (next 8 bits)h]h)}(hk``DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID`` - Device ID (lower 16 bits) and the device revision (next 8 bits)h](j)}(h)``DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID``h]h%DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubhB - Device ID (lower 16 bits) and the device revision (next 8 bits)}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj_ubah}(h]h ]h"]h$]h&]uh1hhj\ubh)}(hX``DRM_XE_QUERY_CONFIG_FLAGS`` - Flags describing the device configuration, see list below - ``DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM`` - Flag is set if the device has usable VRAM - ``DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY`` - Flag is set if the device has low latency hint support - ``DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR`` - Flag is set if the device has CPU address mirroring support - ``DRM_XE_QUERY_CONFIG_FLAG_HAS_NO_COMPRESSION_HINT`` - Flag is set if the device supports the userspace hint ``DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION``. This is exposed only on Xe2+. - ``DRM_XE_QUERY_CONFIG_FLAG_HAS_DISABLE_STATE_CACHE_PERF_FIX`` - Flag is set if a queue can be created with ``DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX``h](h)}(hY``DRM_XE_QUERY_CONFIG_FLAGS`` - Flags describing the device configuration, see list belowh](j)}(h``DRM_XE_QUERY_CONFIG_FLAGS``h]hDRM_XE_QUERY_CONFIG_FLAGS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh< - Flags describing the device configuration, see list below}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh)}(hhh](h)}(hQ``DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM`` - Flag is set if the device has usable VRAMh]h)}(hQ``DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM`` - Flag is set if the device has usable VRAMh](j)}(h%``DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM``h]h!DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, - Flag is set if the device has usable VRAM}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(he``DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY`` - Flag is set if the device has low latency hint supporth]h)}(he``DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY`` - Flag is set if the device has low latency hint supporth](j)}(h,``DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY``h]h(DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh9 - Flag is set if the device has low latency hint support}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hn``DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR`` - Flag is set if the device has CPU address mirroring supporth]h)}(hn``DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR`` - Flag is set if the device has CPU address mirroring supporth](j)}(h0``DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR``h]h,DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh> - Flag is set if the device has CPU address mirroring support}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h``DRM_XE_QUERY_CONFIG_FLAG_HAS_NO_COMPRESSION_HINT`` - Flag is set if the device supports the userspace hint ``DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION``. This is exposed only on Xe2+.h]h)}(h``DRM_XE_QUERY_CONFIG_FLAG_HAS_NO_COMPRESSION_HINT`` - Flag is set if the device supports the userspace hint ``DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION``. This is exposed only on Xe2+.h](j)}(h4``DRM_XE_QUERY_CONFIG_FLAG_HAS_NO_COMPRESSION_HINT``h]h0DRM_XE_QUERY_CONFIG_FLAG_HAS_NO_COMPRESSION_HINT}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh9 - Flag is set if the device supports the userspace hint }(hj#hhhNhNubj)}(h)``DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION``h]h%DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh. This is exposed only on Xe2+.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h``DRM_XE_QUERY_CONFIG_FLAG_HAS_DISABLE_STATE_CACHE_PERF_FIX`` - Flag is set if a queue can be created with ``DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX``h]h)}(h``DRM_XE_QUERY_CONFIG_FLAG_HAS_DISABLE_STATE_CACHE_PERF_FIX`` - Flag is set if a queue can be created with ``DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX``h](j)}(h=``DRM_XE_QUERY_CONFIG_FLAG_HAS_DISABLE_STATE_CACHE_PERF_FIX``h]h9DRM_XE_QUERY_CONFIG_FLAG_HAS_DISABLE_STATE_CACHE_PERF_FIX}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh. - Flag is set if a queue can be created with }(hj\hhhNhNubj)}(h6``DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX``h]h2DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjXubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhj\ubh)}(hs``DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT`` - Minimal memory alignment required by this device, typically SZ_4K or SZ_64Kh]h)}(hs``DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT`` - Minimal memory alignment required by this device, typically SZ_4K or SZ_64Kh](j)}(h%``DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT``h]h!DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhN - Minimal memory alignment required by this device, typically SZ_4K or SZ_64K}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhj\ubh)}(hC``DRM_XE_QUERY_CONFIG_VA_BITS`` - Maximum bits of a virtual addressh]h)}(hjh](j)}(h``DRM_XE_QUERY_CONFIG_VA_BITS``h]hDRM_XE_QUERY_CONFIG_VA_BITS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh$ - Maximum bits of a virtual address}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhj\ubh)}(hh``DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY`` - Value of the highest available exec queue priority h]h)}(hd``DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY`` - Value of the highest available exec queue priorityh](j)}(h/``DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY``h]h+DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5 - Value of the highest available exec queue priority}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhj\ubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjhMhjYubah}(h]h ]h"]h$]h&]uh1jShj4ubeh}(h]h ]h"]h$]h&]uh1j<hjXhMhj1ubah}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_gt (C struct) c.drm_xe_gthNtauh1jhjhhhjhM ubj)}(hhh](j)}(h drm_xe_gth]j)}(hstruct drm_xe_gth](j)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhjKhMubj!)}(h drm_xe_gth]j')}(hj8h]h drm_xe_gt}(hj^hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjZubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj:hhhjKhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj6hhhjKhMubah}(h]j1ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjKhMhj3hhubjU)}(hhh]h)}(hdescribe an individual GT.h]hdescribe an individual GT.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj}hhubah}(h]h ]h"]h$]h&]uh1jThj3hhhjKhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_gt { #define DRM_XE_QUERY_GT_TYPE_MAIN 0; #define DRM_XE_QUERY_GT_TYPE_MEDIA 1; __u16 type; __u16 tile_id; __u16 gt_id; __u16 pad[3]; __u32 reference_clock; __u64 near_mem_regions; __u64 far_mem_regions; __u16 ip_ver_major; __u16 ip_ver_minor; __u16 ip_ver_rev; __u16 pad2; __u64 reserved[7]; }; **Members** ``type`` GT type: Main or Media ``tile_id`` Tile ID where this GT lives (Information only) ``gt_id`` Unique ID of this GT within the PCI Device ``pad`` MBZ ``reference_clock`` A clock frequency for timestamp ``near_mem_regions`` Bit mask of instances from drm_xe_query_mem_regions that are nearest to the current engines of this GT. Each index in this mask refers directly to the struct drm_xe_query_mem_regions' instance, no assumptions should be made about order. The type of each region is described by struct drm_xe_query_mem_regions' mem_class. ``far_mem_regions`` Bit mask of instances from drm_xe_query_mem_regions that are far from the engines of this GT. In general, they have extra indirections when compared to the **near_mem_regions**. For a discrete device this could mean system memory and memory living in a different tile. Each index in this mask refers directly to the struct drm_xe_query_mem_regions' instance, no assumptions should be made about order. The type of each region is described by struct drm_xe_query_mem_regions' mem_class. ``ip_ver_major`` Graphics/media IP major version on GMD_ID platforms ``ip_ver_minor`` Graphics/media IP minor version on GMD_ID platforms ``ip_ver_rev`` Graphics/media IP revision version on GMD_ID platforms ``pad2`` MBZ ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj)}(hXstruct drm_xe_gt { #define DRM_XE_QUERY_GT_TYPE_MAIN 0; #define DRM_XE_QUERY_GT_TYPE_MEDIA 1; __u16 type; __u16 tile_id; __u16 gt_id; __u16 pad[3]; __u32 reference_clock; __u64 near_mem_regions; __u64 far_mem_regions; __u16 ip_ver_major; __u16 ip_ver_minor; __u16 ip_ver_rev; __u16 pad2; __u64 reserved[7]; };h]hXstruct drm_xe_gt { #define DRM_XE_QUERY_GT_TYPE_MAIN 0; #define DRM_XE_QUERY_GT_TYPE_MEDIA 1; __u16 type; __u16 tile_id; __u16 gt_id; __u16 pad[3]; __u32 reference_clock; __u64 near_mem_regions; __u64 far_mem_regions; __u16 ip_ver_major; __u16 ip_ver_minor; __u16 ip_ver_rev; __u16 pad2; __u64 reserved[7]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj8)}(hhh](j=)}(h ``type`` GT type: Main or Media h](jC)}(h``type``h]j)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hGT type: Main or Mediah]hGT type: Main or Media}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h;``tile_id`` Tile ID where this GT lives (Information only) h](jC)}(h ``tile_id``h]j)}(hj&h]htile_id}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubjT)}(hhh]h)}(h.Tile ID where this GT lives (Information only)h]h.Tile ID where this GT lives (Information only)}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj;hMhjubj=)}(h5``gt_id`` Unique ID of this GT within the PCI Device h](jC)}(h ``gt_id``h]j)}(hj_h]hgt_id}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjYubjT)}(hhh]h)}(h*Unique ID of this GT within the PCI Deviceh]h*Unique ID of this GT within the PCI Device}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1jShjYubeh}(h]h ]h"]h$]h&]uh1j<hjthMhjubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h4``reference_clock`` A clock frequency for timestamp h](jC)}(h``reference_clock``h]j)}(hjh]hreference_clock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hA clock frequency for timestamph]hA clock frequency for timestamp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hXV``near_mem_regions`` Bit mask of instances from drm_xe_query_mem_regions that are nearest to the current engines of this GT. Each index in this mask refers directly to the struct drm_xe_query_mem_regions' instance, no assumptions should be made about order. The type of each region is described by struct drm_xe_query_mem_regions' mem_class. h](jC)}(h``near_mem_regions``h]j)}(hj h]hnear_mem_regions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hX@Bit mask of instances from drm_xe_query_mem_regions that are nearest to the current engines of this GT. Each index in this mask refers directly to the struct drm_xe_query_mem_regions' instance, no assumptions should be made about order. The type of each region is described by struct drm_xe_query_mem_regions' mem_class.h]hXDBit mask of instances from drm_xe_query_mem_regions that are nearest to the current engines of this GT. Each index in this mask refers directly to the struct drm_xe_query_mem_regions’ instance, no assumptions should be made about order. The type of each region is described by struct drm_xe_query_mem_regions’ mem_class.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hX``far_mem_regions`` Bit mask of instances from drm_xe_query_mem_regions that are far from the engines of this GT. In general, they have extra indirections when compared to the **near_mem_regions**. For a discrete device this could mean system memory and memory living in a different tile. Each index in this mask refers directly to the struct drm_xe_query_mem_regions' instance, no assumptions should be made about order. The type of each region is described by struct drm_xe_query_mem_regions' mem_class. h](jC)}(h``far_mem_regions``h]j)}(hjDh]hfar_mem_regions}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj>ubjT)}(hhh]h)}(hXBit mask of instances from drm_xe_query_mem_regions that are far from the engines of this GT. In general, they have extra indirections when compared to the **near_mem_regions**. For a discrete device this could mean system memory and memory living in a different tile. Each index in this mask refers directly to the struct drm_xe_query_mem_regions' instance, no assumptions should be made about order. The type of each region is described by struct drm_xe_query_mem_regions' mem_class.h](hBit mask of instances from drm_xe_query_mem_regions that are far from the engines of this GT. In general, they have extra indirections when compared to the }(hj]hhhNhNubj)}(h**near_mem_regions**h]hnear_mem_regions}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubhX9. For a discrete device this could mean system memory and memory living in a different tile. Each index in this mask refers directly to the struct drm_xe_query_mem_regions’ instance, no assumptions should be made about order. The type of each region is described by struct drm_xe_query_mem_regions’ mem_class.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjZubah}(h]h ]h"]h$]h&]uh1jShj>ubeh}(h]h ]h"]h$]h&]uh1j<hjYhMhjubj=)}(hE``ip_ver_major`` Graphics/media IP major version on GMD_ID platforms h](jC)}(h``ip_ver_major``h]j)}(hjh]h ip_ver_major}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h3Graphics/media IP major version on GMD_ID platformsh]h3Graphics/media IP major version on GMD_ID platforms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hE``ip_ver_minor`` Graphics/media IP minor version on GMD_ID platforms h](jC)}(h``ip_ver_minor``h]j)}(hjh]h ip_ver_minor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h3Graphics/media IP minor version on GMD_ID platformsh]h3Graphics/media IP minor version on GMD_ID platforms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hF``ip_ver_rev`` Graphics/media IP revision version on GMD_ID platforms h](jC)}(h``ip_ver_rev``h]j)}(hjh]h ip_ver_rev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h6Graphics/media IP revision version on GMD_ID platformsh]h6Graphics/media IP revision version on GMD_ID platforms}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h ``pad2`` MBZ h](jC)}(h``pad2``h]j)}(hj;h]hpad2}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj5ubjT)}(hhh]h)}(hMBZh]hMBZ}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhMhjQubah}(h]h ]h"]h$]h&]uh1jShj5ubeh}(h]h ]h"]h$]h&]uh1j<hjPhMhjubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjth]hreserved}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjnubjT)}(hhh]h)}(hReservedh]hReserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjnubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hTo be used with drm_xe_query_gt_list, which will return a list with all the existing GT individual descriptions. Graphics Technology (GT) is a subset of a GPU/tile that is responsible for implementing graphics and/or media operations.h]hTo be used with drm_xe_query_gt_list, which will return a list with all the existing GT individual descriptions. Graphics Technology (GT) is a subset of a GPU/tile that is responsible for implementing graphics and/or media operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj8)}(hhh]j=)}(hbThe index in **type** can be: - ``DRM_XE_QUERY_GT_TYPE_MAIN`` - ``DRM_XE_QUERY_GT_TYPE_MEDIA`` h](jC)}(hThe index in **type** can be:h](h The index in }(hjhhhNhNubj)}(h**type**h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh can be:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hhh](h)}(h``DRM_XE_QUERY_GT_TYPE_MAIN``h]h)}(hj h]j)}(hj h]hDRM_XE_QUERY_GT_TYPE_MAIN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h"``DRM_XE_QUERY_GT_TYPE_MEDIA`` h]h)}(h``DRM_XE_QUERY_GT_TYPE_MEDIA``h]j)}(hj1h]hDRM_XE_QUERY_GT_TYPE_MEDIA}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj+ubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jQ jR uh1hhj$hMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubah}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_query_gt_list (C struct)c.drm_xe_query_gt_listhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_query_gt_listh]j)}(hstruct drm_xe_query_gt_listh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjzhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjhMubj!)}(hdrm_xe_query_gt_listh]j')}(hjxh]hdrm_xe_query_gt_list}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjzhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjvhhhjhMubah}(h]jqah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjshhubjU)}(hhh]h)}(h!A list with GT description items.h]h!A list with GT description items.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjshhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_query_gt_list { __u32 num_gt; __u32 pad; struct drm_xe_gt gt_list[]; }; **Members** ``num_gt`` number of GT items returned in gt_list ``pad`` MBZ ``gt_list`` The GT list returned for this deviceh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj)}(hastruct drm_xe_query_gt_list { __u32 num_gt; __u32 pad; struct drm_xe_gt gt_list[]; };h]hastruct drm_xe_query_gt_list { __u32 num_gt; __u32 pad; struct drm_xe_gt gt_list[]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj8)}(hhh](j=)}(h2``num_gt`` number of GT items returned in gt_list h](jC)}(h ``num_gt``h]j)}(hj-h]hnum_gt}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj'ubjT)}(hhh]h)}(h&number of GT items returned in gt_listh]h&number of GT items returned in gt_list}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jShj'ubeh}(h]h ]h"]h$]h&]uh1j<hjBhMhj$ubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjfh]hpad}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj`ubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1jShj`ubeh}(h]h ]h"]h$]h&]uh1j<hj{hMhj$ubj=)}(h0``gt_list`` The GT list returned for this deviceh](jC)}(h ``gt_list``h]j)}(hjh]hgt_list}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h$The GT list returned for this deviceh]h$The GT list returned for this device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhj$ubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hIf a query is made with a struct drm_xe_device_query where .query is equal to DRM_XE_DEVICE_QUERY_GT_LIST, then the reply uses struct drm_xe_query_gt_list in .data.h]hIf a query is made with a struct drm_xe_device_query where .query is equal to DRM_XE_DEVICE_QUERY_GT_LIST, then the reply uses struct drm_xe_query_gt_list in .data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_xe_query_topology_mask (C struct)c.drm_xe_query_topology_maskhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_query_topology_maskh]j)}(h!struct drm_xe_query_topology_maskh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj-hMubj!)}(hdrm_xe_query_topology_maskh]j')}(hjh]hdrm_xe_query_topology_mask}(hj@hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj<ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhj-hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhj-hMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj-hMhjhhubjU)}(hhh]h)}(h"describe the topology mask of a GTh]h"describe the topology mask of a GT}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj_hhubah}(h]h ]h"]h$]h&]uh1jThjhhhj-hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjzjxjzjyjzj{uh1jhhhjhjhM ubj})}(hX$**Definition**:: struct drm_xe_query_topology_mask { __u16 gt_id; #define DRM_XE_TOPO_DSS_GEOMETRY 1; #define DRM_XE_TOPO_DSS_COMPUTE 2; #define DRM_XE_TOPO_L3_BANK 3; #define DRM_XE_TOPO_EU_PER_DSS 4; #define DRM_XE_TOPO_SIMD16_EU_PER_DSS 5; __u16 type; __u32 num_bytes; __u8 mask[]; }; **Members** ``gt_id`` GT ID the mask is associated with ``type`` type of mask ``num_bytes`` number of bytes in requested mask ``mask`` little-endian mask of **num_bytes**h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj~ubj)}(hXDstruct drm_xe_query_topology_mask { __u16 gt_id; #define DRM_XE_TOPO_DSS_GEOMETRY 1; #define DRM_XE_TOPO_DSS_COMPUTE 2; #define DRM_XE_TOPO_L3_BANK 3; #define DRM_XE_TOPO_EU_PER_DSS 4; #define DRM_XE_TOPO_SIMD16_EU_PER_DSS 5; __u16 type; __u32 num_bytes; __u8 mask[]; };h]hXDstruct drm_xe_query_topology_mask { __u16 gt_id; #define DRM_XE_TOPO_DSS_GEOMETRY 1; #define DRM_XE_TOPO_DSS_COMPUTE 2; #define DRM_XE_TOPO_L3_BANK 3; #define DRM_XE_TOPO_EU_PER_DSS 4; #define DRM_XE_TOPO_SIMD16_EU_PER_DSS 5; __u16 type; __u32 num_bytes; __u8 mask[]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj~ubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj~ubj8)}(hhh](j=)}(h,``gt_id`` GT ID the mask is associated with h](jC)}(h ``gt_id``h]j)}(hjh]hgt_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM.hjubjT)}(hhh]h)}(h!GT ID the mask is associated withh]h!GT ID the mask is associated with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM.hjubj=)}(h``type`` type of mask h](jC)}(h``type``h]j)}(hjh]htype}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM6hjubjT)}(hhh]h)}(h type of maskh]h type of mask}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM6hjubj=)}(h0``num_bytes`` number of bytes in requested mask h](jC)}(h ``num_bytes``h]j)}(hjAh]h num_bytes}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM9hj;ubjT)}(hhh]h)}(h!number of bytes in requested maskh]h!number of bytes in requested mask}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM9hjWubah}(h]h ]h"]h$]h&]uh1jShj;ubeh}(h]h ]h"]h$]h&]uh1j<hjVhM9hjubj=)}(h,``mask`` little-endian mask of **num_bytes**h](jC)}(h``mask``h]j)}(hjzh]hmask}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM;hjtubjT)}(hhh]h)}(h#little-endian mask of **num_bytes**h](hlittle-endian mask of }(hjhhhNhNubj)}(h **num_bytes**h]h num_bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM<hjubah}(h]h ]h"]h$]h&]uh1jShjtubeh}(h]h ]h"]h$]h&]uh1j<hjhM;hjubeh}(h]h ]h"]h$]h&]uh1j7hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM?hjhhubh)}(hXThis is the hardware topology which reflects the internal physical structure of the GPU.h]hXThis is the hardware topology which reflects the internal physical structure of the GPU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhubh)}(hIf a query is made with a struct drm_xe_device_query where .query is equal to DRM_XE_DEVICE_QUERY_GT_TOPOLOGY, then the reply uses struct drm_xe_query_topology_mask in .data.h]hIf a query is made with a struct drm_xe_device_query where .query is equal to DRM_XE_DEVICE_QUERY_GT_TOPOLOGY, then the reply uses struct drm_xe_query_topology_mask in .data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhubj8)}(hhh]j=)}(hXYThe **type** can be: - ``DRM_XE_TOPO_DSS_GEOMETRY`` - To query the mask of Dual Sub Slices (DSS) available for geometry operations. For example a query response containing the following in mask: ``DSS_GEOMETRY ff ff ff ff 00 00 00 00`` means 32 DSS are available for geometry. - ``DRM_XE_TOPO_DSS_COMPUTE`` - To query the mask of Dual Sub Slices (DSS) available for compute operations. For example a query response containing the following in mask: ``DSS_COMPUTE ff ff ff ff 00 00 00 00`` means 32 DSS are available for compute. - ``DRM_XE_TOPO_L3_BANK`` - To query the mask of enabled L3 banks. This type may be omitted if the driver is unable to query the mask from the hardware. - ``DRM_XE_TOPO_EU_PER_DSS`` - To query the mask of Execution Units (EU) available per Dual Sub Slices (DSS). For example a query response containing the following in mask: ``EU_PER_DSS ff ff 00 00 00 00 00 00`` means each DSS has 16 SIMD8 EUs. This type may be omitted if device doesn't have SIMD8 EUs. - ``DRM_XE_TOPO_SIMD16_EU_PER_DSS`` - To query the mask of SIMD16 Execution Units (EU) available per Dual Sub Slices (DSS). For example a query response containing the following in mask: ``SIMD16_EU_PER_DSS ff ff 00 00 00 00 00 00`` means each DSS has 16 SIMD16 EUs. This type may be omitted if device doesn't have SIMD16 EUs. h](jC)}(hThe **type** can be:h](hThe }(hjhhhNhNubj)}(h**type**h]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh can be:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM,hjubjT)}(hhh]h)}(hhh](h)}(hX``DRM_XE_TOPO_DSS_GEOMETRY`` - To query the mask of Dual Sub Slices (DSS) available for geometry operations. For example a query response containing the following in mask: ``DSS_GEOMETRY ff ff ff ff 00 00 00 00`` means 32 DSS are available for geometry.h]h)}(hX``DRM_XE_TOPO_DSS_GEOMETRY`` - To query the mask of Dual Sub Slices (DSS) available for geometry operations. For example a query response containing the following in mask: ``DSS_GEOMETRY ff ff ff ff 00 00 00 00`` means 32 DSS are available for geometry.h](j)}(h``DRM_XE_TOPO_DSS_GEOMETRY``h]hDRM_XE_TOPO_DSS_GEOMETRY}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh - To query the mask of Dual Sub Slices (DSS) available for geometry operations. For example a query response containing the following in mask: }(hj1hhhNhNubj)}(h+``DSS_GEOMETRY ff ff ff ff 00 00 00 00``h]h'DSS_GEOMETRY ff ff ff ff 00 00 00 00}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh) means 32 DSS are available for geometry.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj-ubah}(h]h ]h"]h$]h&]uh1hhj*ubh)}(h``DRM_XE_TOPO_DSS_COMPUTE`` - To query the mask of Dual Sub Slices (DSS) available for compute operations. For example a query response containing the following in mask: ``DSS_COMPUTE ff ff ff ff 00 00 00 00`` means 32 DSS are available for compute.h]h)}(h``DRM_XE_TOPO_DSS_COMPUTE`` - To query the mask of Dual Sub Slices (DSS) available for compute operations. For example a query response containing the following in mask: ``DSS_COMPUTE ff ff ff ff 00 00 00 00`` means 32 DSS are available for compute.h](j)}(h``DRM_XE_TOPO_DSS_COMPUTE``h]hDRM_XE_TOPO_DSS_COMPUTE}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh - To query the mask of Dual Sub Slices (DSS) available for compute operations. For example a query response containing the following in mask: }(hjjhhhNhNubj)}(h*``DSS_COMPUTE ff ff ff ff 00 00 00 00``h]h&DSS_COMPUTE ff ff ff ff 00 00 00 00}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubh( means 32 DSS are available for compute.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjfubah}(h]h ]h"]h$]h&]uh1hhj*ubh)}(h``DRM_XE_TOPO_L3_BANK`` - To query the mask of enabled L3 banks. This type may be omitted if the driver is unable to query the mask from the hardware.h]h)}(h``DRM_XE_TOPO_L3_BANK`` - To query the mask of enabled L3 banks. This type may be omitted if the driver is unable to query the mask from the hardware.h](j)}(h``DRM_XE_TOPO_L3_BANK``h]hDRM_XE_TOPO_L3_BANK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - To query the mask of enabled L3 banks. This type may be omitted if the driver is unable to query the mask from the hardware.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhj*ubh)}(hX0``DRM_XE_TOPO_EU_PER_DSS`` - To query the mask of Execution Units (EU) available per Dual Sub Slices (DSS). For example a query response containing the following in mask: ``EU_PER_DSS ff ff 00 00 00 00 00 00`` means each DSS has 16 SIMD8 EUs. This type may be omitted if device doesn't have SIMD8 EUs.h]h)}(hX0``DRM_XE_TOPO_EU_PER_DSS`` - To query the mask of Execution Units (EU) available per Dual Sub Slices (DSS). For example a query response containing the following in mask: ``EU_PER_DSS ff ff 00 00 00 00 00 00`` means each DSS has 16 SIMD8 EUs. This type may be omitted if device doesn't have SIMD8 EUs.h](j)}(h``DRM_XE_TOPO_EU_PER_DSS``h]hDRM_XE_TOPO_EU_PER_DSS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - To query the mask of Execution Units (EU) available per Dual Sub Slices (DSS). For example a query response containing the following in mask: }(hjhhhNhNubj)}(h)``EU_PER_DSS ff ff 00 00 00 00 00 00``h]h%EU_PER_DSS ff ff 00 00 00 00 00 00}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh^ means each DSS has 16 SIMD8 EUs. This type may be omitted if device doesn’t have SIMD8 EUs.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhj*ubh)}(hXK``DRM_XE_TOPO_SIMD16_EU_PER_DSS`` - To query the mask of SIMD16 Execution Units (EU) available per Dual Sub Slices (DSS). For example a query response containing the following in mask: ``SIMD16_EU_PER_DSS ff ff 00 00 00 00 00 00`` means each DSS has 16 SIMD16 EUs. This type may be omitted if device doesn't have SIMD16 EUs. h]h)}(hXG``DRM_XE_TOPO_SIMD16_EU_PER_DSS`` - To query the mask of SIMD16 Execution Units (EU) available per Dual Sub Slices (DSS). For example a query response containing the following in mask: ``SIMD16_EU_PER_DSS ff ff 00 00 00 00 00 00`` means each DSS has 16 SIMD16 EUs. This type may be omitted if device doesn't have SIMD16 EUs.h](j)}(h!``DRM_XE_TOPO_SIMD16_EU_PER_DSS``h]hDRM_XE_TOPO_SIMD16_EU_PER_DSS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - To query the mask of SIMD16 Execution Units (EU) available per Dual Sub Slices (DSS). For example a query response containing the following in mask: }(hjhhhNhNubj)}(h0``SIMD16_EU_PER_DSS ff ff 00 00 00 00 00 00``h]h,SIMD16_EU_PER_DSS ff ff 00 00 00 00 00 00}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh` means each DSS has 16 SIMD16 EUs. This type may be omitted if device doesn’t have SIMD16 EUs.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM$hjubah}(h]h ]h"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]jQ jR uh1hhj_hMhj'ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj&hM,hjubah}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_xe_query_engine_cycles (C struct)c.drm_xe_query_engine_cycleshNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_query_engine_cyclesh]j)}(h!struct drm_xe_query_engine_cyclesh](j)}(hjh]hstruct}(hjihhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjehhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM.ubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjvhM.ubj!)}(hdrm_xe_query_engine_cyclesh]j')}(hjch]hdrm_xe_query_engine_cycles}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjehhhjvhM.ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjahhhjvhM.ubah}(h]j\ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjvhM.hj^hhubjU)}(hhh]h)}(h correlate CPU and GPU timestampsh]h correlate CPU and GPU timestamps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM@hjhhubah}(h]h ]h"]h$]h&]uh1jThj^hhhjvhM.ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_query_engine_cycles { struct drm_xe_engine_class_instance eci; __s32 clockid; __u32 width; __u64 engine_cycles; __u64 cpu_timestamp; __u64 cpu_delta; }; **Members** ``eci`` This is input by the user and is the engine for which command streamer cycles is queried. ``clockid`` This is input by the user and is the reference clock id for CPU timestamp. For definition, see clock_gettime(2) and perf_event_open(2). Supported clock ids are CLOCK_MONOTONIC, CLOCK_MONOTONIC_RAW, CLOCK_REALTIME, CLOCK_BOOTTIME, CLOCK_TAI. ``width`` Width of the engine cycle counter in bits. ``engine_cycles`` Engine cycles as read from its register at 0x358 offset. ``cpu_timestamp`` CPU timestamp in ns. The timestamp is captured before reading the engine_cycles register using the reference clockid set by the user. ``cpu_delta`` Time delta in ns captured around reading the lower dword of the engine_cycles register.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMDhjubj)}(hstruct drm_xe_query_engine_cycles { struct drm_xe_engine_class_instance eci; __s32 clockid; __u32 width; __u64 engine_cycles; __u64 cpu_timestamp; __u64 cpu_delta; };h]hstruct drm_xe_query_engine_cycles { struct drm_xe_engine_class_instance eci; __s32 clockid; __u32 width; __u64 engine_cycles; __u64 cpu_timestamp; __u64 cpu_delta; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMFhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMOhjubj8)}(hhh](j=)}(hb``eci`` This is input by the user and is the engine for which command streamer cycles is queried. h](jC)}(h``eci``h]j)}(hjh]heci}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMPhjubjT)}(hhh]h)}(hYThis is input by the user and is the engine for which command streamer cycles is queried.h]hYThis is input by the user and is the engine for which command streamer cycles is queried.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMOhj.ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj-hMPhjubj=)}(h``clockid`` This is input by the user and is the reference clock id for CPU timestamp. For definition, see clock_gettime(2) and perf_event_open(2). Supported clock ids are CLOCK_MONOTONIC, CLOCK_MONOTONIC_RAW, CLOCK_REALTIME, CLOCK_BOOTTIME, CLOCK_TAI. h](jC)}(h ``clockid``h]j)}(hjRh]hclockid}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMXhjLubjT)}(hhh]h)}(hThis is input by the user and is the reference clock id for CPU timestamp. For definition, see clock_gettime(2) and perf_event_open(2). Supported clock ids are CLOCK_MONOTONIC, CLOCK_MONOTONIC_RAW, CLOCK_REALTIME, CLOCK_BOOTTIME, CLOCK_TAI.h]hThis is input by the user and is the reference clock id for CPU timestamp. For definition, see clock_gettime(2) and perf_event_open(2). Supported clock ids are CLOCK_MONOTONIC, CLOCK_MONOTONIC_RAW, CLOCK_REALTIME, CLOCK_BOOTTIME, CLOCK_TAI.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMUhjhubah}(h]h ]h"]h$]h&]uh1jShjLubeh}(h]h ]h"]h$]h&]uh1j<hjghMXhjubj=)}(h5``width`` Width of the engine cycle counter in bits. h](jC)}(h ``width``h]j)}(hjh]hwidth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM\hjubjT)}(hhh]h)}(h*Width of the engine cycle counter in bits.h]h*Width of the engine cycle counter in bits.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM\hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM\hjubj=)}(hK``engine_cycles`` Engine cycles as read from its register at 0x358 offset. h](jC)}(h``engine_cycles``h]j)}(hjh]h engine_cycles}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMahjubjT)}(hhh]h)}(h8Engine cycles as read from its register at 0x358 offset.h]h8Engine cycles as read from its register at 0x358 offset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM`hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMahjubj=)}(h``cpu_timestamp`` CPU timestamp in ns. The timestamp is captured before reading the engine_cycles register using the reference clockid set by the user. h](jC)}(h``cpu_timestamp``h]j)}(hjh]h cpu_timestamp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhhjubjT)}(hhh]h)}(hCPU timestamp in ns. The timestamp is captured before reading the engine_cycles register using the reference clockid set by the user.h]hCPU timestamp in ns. The timestamp is captured before reading the engine_cycles register using the reference clockid set by the user.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMfhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhhjubj=)}(he``cpu_delta`` Time delta in ns captured around reading the lower dword of the engine_cycles register.h](jC)}(h ``cpu_delta``h]j)}(hj9h]h cpu_delta}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMmhj3ubjT)}(hhh]h)}(hWTime delta in ns captured around reading the lower dword of the engine_cycles register.h]hWTime delta in ns captured around reading the lower dword of the engine_cycles register.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMmhjOubah}(h]h ]h"]h$]h&]uh1jShj3ubeh}(h]h ]h"]h$]h&]uh1j<hjNhMmhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hj{h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMqhjhhubh)}(hXIf a query is made with a struct drm_xe_device_query where .query is equal to DRM_XE_DEVICE_QUERY_ENGINE_CYCLES, then the reply uses struct drm_xe_query_engine_cycles in .data. struct drm_xe_query_engine_cycles is allocated by the user and .data points to this allocated structure.h]hXIf a query is made with a struct drm_xe_device_query where .query is equal to DRM_XE_DEVICE_QUERY_ENGINE_CYCLES, then the reply uses struct drm_xe_query_engine_cycles in .data. struct drm_xe_query_engine_cycles is allocated by the user and .data points to this allocated structure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMAhjhhubh)}(hThe query returns the engine cycles, which along with GT's **reference_clock**, can be used to calculate the engine timestamp. In addition the query returns a set of cpu timestamps that indicate when the command streamer cycle count was captured.h](h=The query returns the engine cycles, which along with GT’s }(hjhhhNhNubj)}(h**reference_clock**h]hreference_clock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, can be used to calculate the engine timestamp. In addition the query returns a set of cpu timestamps that indicate when the command streamer cycle count was captured.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMFhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%drm_xe_query_uc_fw_version (C struct)c.drm_xe_query_uc_fw_versionhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_query_uc_fw_versionh]j)}(h!struct drm_xe_query_uc_fw_versionh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMNubj!)}(hdrm_xe_query_uc_fw_versionh]j')}(hjh]hdrm_xe_query_uc_fw_version}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMNubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMNubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMNhjhhubjU)}(hhh]h)}(h)query a micro-controller firmware versionh]h)query a micro-controller firmware version}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMshjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMNubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj4jxj4jyjzj{uh1jhhhjhjhM ubj})}(hXT**Definition**:: struct drm_xe_query_uc_fw_version { #define XE_QUERY_UC_TYPE_GUC_SUBMISSION 0; #define XE_QUERY_UC_TYPE_HUC 1; __u16 uc_type; __u16 pad; __u32 branch_ver; __u32 major_ver; __u32 minor_ver; __u32 patch_ver; __u32 pad2; __u64 reserved; }; **Members** ``uc_type`` The micro-controller type to query firmware version ``pad`` MBZ ``branch_ver`` branch uc fw version ``major_ver`` major uc fw version ``minor_ver`` minor uc fw version ``patch_ver`` patch uc fw version ``pad2`` MBZ ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh:}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMwhj8ubj)}(hX struct drm_xe_query_uc_fw_version { #define XE_QUERY_UC_TYPE_GUC_SUBMISSION 0; #define XE_QUERY_UC_TYPE_HUC 1; __u16 uc_type; __u16 pad; __u32 branch_ver; __u32 major_ver; __u32 minor_ver; __u32 patch_ver; __u32 pad2; __u64 reserved; };h]hX struct drm_xe_query_uc_fw_version { #define XE_QUERY_UC_TYPE_GUC_SUBMISSION 0; #define XE_QUERY_UC_TYPE_HUC 1; __u16 uc_type; __u16 pad; __u32 branch_ver; __u32 major_ver; __u32 minor_ver; __u32 patch_ver; __u32 pad2; __u64 reserved; };}hjYsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMyhj8ubh)}(h **Members**h]j)}(hjjh]hMembers}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj8ubj8)}(hhh](j=)}(h@``uc_type`` The micro-controller type to query firmware version h](jC)}(h ``uc_type``h]j)}(hjh]huc_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMzhjubjT)}(hhh]h)}(h3The micro-controller type to query firmware versionh]h3The micro-controller type to query firmware version}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMzhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMzhjubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h$``branch_ver`` branch uc fw version h](jC)}(h``branch_ver``h]j)}(hjh]h branch_ver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hbranch uc fw versionh]hbranch uc fw version}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h"``major_ver`` major uc fw version h](jC)}(h ``major_ver``h]j)}(hj4h]h major_ver}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj.ubjT)}(hhh]h)}(hmajor uc fw versionh]hmajor uc fw version}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMhjJubah}(h]h ]h"]h$]h&]uh1jShj.ubeh}(h]h ]h"]h$]h&]uh1j<hjIhMhjubj=)}(h"``minor_ver`` minor uc fw version h](jC)}(h ``minor_ver``h]j)}(hjmh]h minor_ver}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjgubjT)}(hhh]h)}(hminor uc fw versionh]hminor uc fw version}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjgubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h"``patch_ver`` patch uc fw version h](jC)}(h ``patch_ver``h]j)}(hjh]h patch_ver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hpatch uc fw versionh]hpatch uc fw version}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h ``pad2`` MBZ h](jC)}(h``pad2``h]j)}(hjh]hpad2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjh]hreserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hReservedh]hReserved}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj.ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj-hMhjubeh}(h]h ]h"]h$]h&]uh1j7hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hmGiven a uc_type this will return the branch, major, minor and patch version of the micro-controller firmware.h]hmGiven a uc_type this will return the branch, major, minor and patch version of the micro-controller firmware.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMthjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_xe_query_pxp_status (C struct)c.drm_xe_query_pxp_statushNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_query_pxp_statush]j)}(hstruct drm_xe_query_pxp_statush](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMzubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMzubj!)}(hdrm_xe_query_pxp_statush]j')}(hjh]hdrm_xe_query_pxp_status}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMzubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMzubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMzhjhhubjU)}(hhh]h)}(hquery if PXP is readyh]hquery if PXP is ready}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMzubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(h**Definition**:: struct drm_xe_query_pxp_status { __u32 status; __u32 supported_session_types; }; **Members** ``status`` current PXP status ``supported_session_types`` bitmask of supported PXP session typesh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj)}(hXstruct drm_xe_query_pxp_status { __u32 status; __u32 supported_session_types; };h]hXstruct drm_xe_query_pxp_status { __u32 status; __u32 supported_session_types; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh)}(h **Members**h]j)}(hj)h]hMembers}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj8)}(hhh](j=)}(h``status`` current PXP status h](jC)}(h ``status``h]j)}(hjHh]hstatus}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjBubjT)}(hhh]h)}(hcurrent PXP statush]hcurrent PXP status}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj^ubah}(h]h ]h"]h$]h&]uh1jShjBubeh}(h]h ]h"]h$]h&]uh1j<hj]hMhj?ubj=)}(hB``supported_session_types`` bitmask of supported PXP session typesh](jC)}(h``supported_session_types``h]j)}(hjh]hsupported_session_types}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj{ubjT)}(hhh]h)}(h&bitmask of supported PXP session typesh]h&bitmask of supported PXP session types}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShj{ubeh}(h]h ]h"]h$]h&]uh1j<hjhMhj?ubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hIf PXP is enabled and no fatal error has occurred, the status will be set to one of the following values: 0: PXP init still in progress 1: PXP init completeh]hIf PXP is enabled and no fatal error has occurred, the status will be set to one of the following values: 0: PXP init still in progress 1: PXP init complete}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hXXIf PXP is not enabled or something has gone wrong, the query will be failed with one of the following error codes: -ENODEV: PXP not supported or disabled; -EIO: fatal error occurred during init, so PXP will never be enabled; -EINVAL: incorrect value provided as part of the query; -EFAULT: error copying the memory between kernel and userspace.h]hXXIf PXP is not enabled or something has gone wrong, the query will be failed with one of the following error codes: -ENODEV: PXP not supported or disabled; -EIO: fatal error occurred during init, so PXP will never be enabled; -EINVAL: incorrect value provided as part of the query; -EFAULT: error copying the memory between kernel and userspace.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hX.The status can only be 0 in the first few seconds after driver load. If everything works as expected, the status will transition to init complete in less than 1 second, while in case of errors the driver might take longer to start returning an error code, but it should still take less than 10 seconds.h]hX.The status can only be 0 in the first few seconds after driver load. If everything works as expected, the status will transition to init complete in less than 1 second, while in case of errors the driver might take longer to start returning an error code, but it should still take less than 10 seconds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hThe supported session type bitmask is based on the values in enum drm_xe_pxp_session_type. TYPE_NONE is always supported and therefore is not reported in the bitmask.h]hThe supported session type bitmask is based on the values in enum drm_xe_pxp_session_type. TYPE_NONE is always supported and therefore is not reported in the bitmask.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_device_query (C struct)c.drm_xe_device_queryhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_device_queryh]j)}(hstruct drm_xe_device_queryh](j)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj<hMubj!)}(hdrm_xe_device_queryh]j')}(hj)h]hdrm_xe_device_query}(hjOhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjKubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj+hhhj<hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj'hhhj<hMubah}(h]j"ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj<hMhj$hhubjU)}(hhh]h)}(hYInput of :c:type:`DRM_IOCTL_XE_DEVICE_QUERY` - main structure to query device informationh](h Input of }(hjqhhhNhNubh)}(h#:c:type:`DRM_IOCTL_XE_DEVICE_QUERY`h]j)}(hj{h]hDRM_IOCTL_XE_DEVICE_QUERY}(hj}hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]jJ ASTIdentifier)} identifierj)sbc.drm_xe_device_queryasbjQDRM_IOCTL_XE_DEVICE_QUERYuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjqubh- - main structure to query device information}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjnhhubah}(h]h ]h"]h$]h&]uh1jThj$hhhj<hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_device_query { __u64 extensions; #define DRM_XE_DEVICE_QUERY_ENGINES 0; #define DRM_XE_DEVICE_QUERY_MEM_REGIONS 1; #define DRM_XE_DEVICE_QUERY_CONFIG 2; #define DRM_XE_DEVICE_QUERY_GT_LIST 3; #define DRM_XE_DEVICE_QUERY_HWCONFIG 4; #define DRM_XE_DEVICE_QUERY_GT_TOPOLOGY 5; #define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES 6; #define DRM_XE_DEVICE_QUERY_UC_FW_VERSION 7; #define DRM_XE_DEVICE_QUERY_OA_UNITS 8; #define DRM_XE_DEVICE_QUERY_PXP_STATUS 9; #define DRM_XE_DEVICE_QUERY_EU_STALL 10; __u32 query; __u32 size; __u64 data; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``query`` The type of data to query ``size`` Size of the queried data ``data`` Queried data is placed here ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj)}(hXstruct drm_xe_device_query { __u64 extensions; #define DRM_XE_DEVICE_QUERY_ENGINES 0; #define DRM_XE_DEVICE_QUERY_MEM_REGIONS 1; #define DRM_XE_DEVICE_QUERY_CONFIG 2; #define DRM_XE_DEVICE_QUERY_GT_LIST 3; #define DRM_XE_DEVICE_QUERY_HWCONFIG 4; #define DRM_XE_DEVICE_QUERY_GT_TOPOLOGY 5; #define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES 6; #define DRM_XE_DEVICE_QUERY_UC_FW_VERSION 7; #define DRM_XE_DEVICE_QUERY_OA_UNITS 8; #define DRM_XE_DEVICE_QUERY_PXP_STATUS 9; #define DRM_XE_DEVICE_QUERY_EU_STALL 10; __u32 query; __u32 size; __u64 data; __u64 reserved[2]; };h]hXstruct drm_xe_device_query { __u64 extensions; #define DRM_XE_DEVICE_QUERY_ENGINES 0; #define DRM_XE_DEVICE_QUERY_MEM_REGIONS 1; #define DRM_XE_DEVICE_QUERY_CONFIG 2; #define DRM_XE_DEVICE_QUERY_GT_LIST 3; #define DRM_XE_DEVICE_QUERY_HWCONFIG 4; #define DRM_XE_DEVICE_QUERY_GT_TOPOLOGY 5; #define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES 6; #define DRM_XE_DEVICE_QUERY_UC_FW_VERSION 7; #define DRM_XE_DEVICE_QUERY_OA_UNITS 8; #define DRM_XE_DEVICE_QUERY_PXP_STATUS 9; #define DRM_XE_DEVICE_QUERY_EU_STALL 10; __u32 query; __u32 size; __u64 data; __u64 reserved[2]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hj h]h extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj!hMhjubj=)}(h$``query`` The type of data to query h](jC)}(h ``query``h]j)}(hjEh]hquery}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj?ubjT)}(hhh]h)}(hThe type of data to queryh]hThe type of data to query}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMhj[ubah}(h]h ]h"]h$]h&]uh1jShj?ubeh}(h]h ]h"]h$]h&]uh1j<hjZhMhjubj=)}(h"``size`` Size of the queried data h](jC)}(h``size``h]j)}(hj~h]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjxubjT)}(hhh]h)}(hSize of the queried datah]hSize of the queried data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjxubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h%``data`` Queried data is placed here h](jC)}(h``data``h]j)}(hjh]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hQueried data is placed hereh]hQueried data is placed here}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjh]hreserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hReservedh]hReserved}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hj3h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhubh)}(hThe user selects the type of data to query among DRM_XE_DEVICE_QUERY_* and sets the value in the query member. This determines the type of the structure provided by the driver in data, among struct drm_xe_query_*.h]hThe user selects the type of data to query among DRM_XE_DEVICE_QUERY_* and sets the value in the query member. This determines the type of the structure provided by the driver in data, among struct drm_xe_query_*.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj8)}(hhh]j=)}(hX\The **query** can be: - ``DRM_XE_DEVICE_QUERY_ENGINES`` - ``DRM_XE_DEVICE_QUERY_MEM_REGIONS`` - ``DRM_XE_DEVICE_QUERY_CONFIG`` - ``DRM_XE_DEVICE_QUERY_GT_LIST`` - ``DRM_XE_DEVICE_QUERY_HWCONFIG`` - Query type to retrieve the hardware configuration of the device such as information on slices, memory, caches, and so on. It is provided as a table of key / value attributes. - ``DRM_XE_DEVICE_QUERY_GT_TOPOLOGY`` - ``DRM_XE_DEVICE_QUERY_ENGINE_CYCLES`` - ``DRM_XE_DEVICE_QUERY_UC_FW_VERSION`` - ``DRM_XE_DEVICE_QUERY_OA_UNITS`` - ``DRM_XE_DEVICE_QUERY_PXP_STATUS`` - ``DRM_XE_DEVICE_QUERY_EU_STALL`` h](jC)}(hThe **query** can be:h](hThe }(hj_hhhNhNubj)}(h **query**h]hquery}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh can be:}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj[ubjT)}(hhh]h)}(hhh](h)}(h``DRM_XE_DEVICE_QUERY_ENGINES``h]h)}(hjh]j)}(hjh]hDRM_XE_DEVICE_QUERY_ENGINES}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h#``DRM_XE_DEVICE_QUERY_MEM_REGIONS``h]h)}(hjh]j)}(hjh]hDRM_XE_DEVICE_QUERY_MEM_REGIONS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h``DRM_XE_DEVICE_QUERY_CONFIG``h]h)}(hjh]j)}(hjh]hDRM_XE_DEVICE_QUERY_CONFIG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h``DRM_XE_DEVICE_QUERY_GT_LIST``h]h)}(hjh]j)}(hjh]hDRM_XE_DEVICE_QUERY_GT_LIST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h``DRM_XE_DEVICE_QUERY_HWCONFIG`` - Query type to retrieve the hardware configuration of the device such as information on slices, memory, caches, and so on. It is provided as a table of key / value attributes.h]h)}(h``DRM_XE_DEVICE_QUERY_HWCONFIG`` - Query type to retrieve the hardware configuration of the device such as information on slices, memory, caches, and so on. It is provided as a table of key / value attributes.h](j)}(h ``DRM_XE_DEVICE_QUERY_HWCONFIG``h]hDRM_XE_DEVICE_QUERY_HWCONFIG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - Query type to retrieve the hardware configuration of the device such as information on slices, memory, caches, and so on. It is provided as a table of key / value attributes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h#``DRM_XE_DEVICE_QUERY_GT_TOPOLOGY``h]h)}(hj3h]j)}(hj3h]hDRM_XE_DEVICE_QUERY_GT_TOPOLOGY}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj1ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h%``DRM_XE_DEVICE_QUERY_ENGINE_CYCLES``h]h)}(hjTh]j)}(hjTh]h!DRM_XE_DEVICE_QUERY_ENGINE_CYCLES}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjRubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h%``DRM_XE_DEVICE_QUERY_UC_FW_VERSION``h]h)}(hjuh]j)}(hjuh]h!DRM_XE_DEVICE_QUERY_UC_FW_VERSION}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjsubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h ``DRM_XE_DEVICE_QUERY_OA_UNITS``h]h)}(hjh]j)}(hjh]hDRM_XE_DEVICE_QUERY_OA_UNITS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h"``DRM_XE_DEVICE_QUERY_PXP_STATUS``h]h)}(hjh]j)}(hjh]hDRM_XE_DEVICE_QUERY_PXP_STATUS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h!``DRM_XE_DEVICE_QUERY_EU_STALL`` h]h)}(h ``DRM_XE_DEVICE_QUERY_EU_STALL``h]j)}(hjh]hDRM_XE_DEVICE_QUERY_EU_STALL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShj[ubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjXubah}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubh)}(hX-If size is set to 0, the driver fills it with the required size for the requested type of data to query. If size is equal to the required size, the queried information is copied into data. If size is set to a value different from 0 and different from the required size, the IOCTL call returns -EINVAL.h]hX-If size is set to 0, the driver fills it with the required size for the requested type of data to query. If size is equal to the required size, the queried information is copied into data. If size is set to a value different from 0 and different from the required size, the IOCTL call returns -EINVAL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hFor example the following code snippet allows retrieving and printing information about the device engines with DRM_XE_DEVICE_QUERY_ENGINES:h]hFor example the following code snippet allows retrieving and printing information about the device engines with DRM_XE_DEVICE_QUERY_ENGINES:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hXstruct drm_xe_query_engines *engines; struct drm_xe_device_query query = { .extensions = 0, .query = DRM_XE_DEVICE_QUERY_ENGINES, .size = 0, .data = 0, }; ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query); engines = malloc(query.size); query.data = (uintptr_t)engines; ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query); for (int i = 0; i < engines->num_engines; i++) { printf("Engine %d: %s\n", i, engines->engines[i].instance.engine_class == DRM_XE_ENGINE_CLASS_RENDER ? "RENDER": engines->engines[i].instance.engine_class == DRM_XE_ENGINE_CLASS_COPY ? "COPY": engines->engines[i].instance.engine_class == DRM_XE_ENGINE_CLASS_VIDEO_DECODE ? "VIDEO_DECODE": engines->engines[i].instance.engine_class == DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE ? "VIDEO_ENHANCE": engines->engines[i].instance.engine_class == DRM_XE_ENGINE_CLASS_COMPUTE ? "COMPUTE": "UNKNOWN"); } free(engines);h]hXstruct drm_xe_query_engines *engines; struct drm_xe_device_query query = { .extensions = 0, .query = DRM_XE_DEVICE_QUERY_ENGINES, .size = 0, .data = 0, }; ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query); engines = malloc(query.size); query.data = (uintptr_t)engines; ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query); for (int i = 0; i < engines->num_engines; i++) { printf("Engine %d: %s\n", i, engines->engines[i].instance.engine_class == DRM_XE_ENGINE_CLASS_RENDER ? "RENDER": engines->engines[i].instance.engine_class == DRM_XE_ENGINE_CLASS_COPY ? "COPY": engines->engines[i].instance.engine_class == DRM_XE_ENGINE_CLASS_VIDEO_DECODE ? "VIDEO_DECODE": engines->engines[i].instance.engine_class == DRM_XE_ENGINE_CLASS_VIDEO_ENHANCE ? "VIDEO_ENHANCE": engines->engines[i].instance.engine_class == DRM_XE_ENGINE_CLASS_COMPUTE ? "COMPUTE": "UNKNOWN"); } free(engines);}hj-sbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_gem_create (C struct)c.drm_xe_gem_createhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_gem_createh]j)}(hstruct drm_xe_gem_createh](j)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjRhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjchMubj!)}(hdrm_xe_gem_createh]j')}(hjPh]hdrm_xe_gem_create}(hjvhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjrubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjRhhhjchMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjNhhhjchMubah}(h]jIah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjchMhjKhhubjU)}(hhh]h)}(hIInput of :c:type:`DRM_IOCTL_XE_GEM_CREATE` - A structure for gem creationh](h Input of }(hjhhhNhNubh)}(h!:c:type:`DRM_IOCTL_XE_GEM_CREATE`h]j)}(hjh]hDRM_IOCTL_XE_GEM_CREATE}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jjPsbc.drm_xe_gem_createasbjQDRM_IOCTL_XE_GEM_CREATEuh1hhjhKhjubh - A structure for gem creation}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jThjKhhhjchMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hX **Definition**:: struct drm_xe_gem_create { #define DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY 0; #define DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE 0; __u64 extensions; __u64 size; __u32 placement; #define DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING (1 << 0); #define DRM_XE_GEM_CREATE_FLAG_SCANOUT (1 << 1); #define DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM (1 << 2); #define DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION (1 << 3); __u32 flags; __u32 vm_id; __u32 handle; #define DRM_XE_GEM_CPU_CACHING_WB 1; #define DRM_XE_GEM_CPU_CACHING_WC 2; __u16 cpu_caching; __u16 pad[3]; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``size`` Size of the object to be created, must match region (system or vram) minimum alignment (:c:type:`min_page_size`). ``placement`` A mask of memory instances of where BO can be placed. Each index in this mask refers directly to the struct drm_xe_query_mem_regions' instance, no assumptions should be made about order. The type of each region is described by struct drm_xe_query_mem_regions' mem_class. ``flags`` Flags for the GEM object, see DRM_XE_GEM_CREATE_FLAG_* ``vm_id`` Attached VM, if any If a VM is specified, this BO must: 1. Only ever be bound to that VM. 2. Cannot be exported as a PRIME fd. ``handle`` Returned handle for the object. Object handles are nonzero. ``cpu_caching`` The CPU caching mode to select for this object. If mmapping the object the mode selected here will also be used. The exception is when mapping system memory (including data evicted to system) on discrete GPUs. The caching mode selected will then be overridden to DRM_XE_GEM_CPU_CACHING_WB, and coherency between GPU- and CPU is guaranteed. The caching mode of existing CPU-mappings will be updated transparently to user-space clients. ``pad`` MBZ ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj)}(hXstruct drm_xe_gem_create { #define DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY 0; #define DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE 0; __u64 extensions; __u64 size; __u32 placement; #define DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING (1 << 0); #define DRM_XE_GEM_CREATE_FLAG_SCANOUT (1 << 1); #define DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM (1 << 2); #define DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION (1 << 3); __u32 flags; __u32 vm_id; __u32 handle; #define DRM_XE_GEM_CPU_CACHING_WB 1; #define DRM_XE_GEM_CPU_CACHING_WC 2; __u16 cpu_caching; __u16 pad[3]; __u64 reserved[2]; };h]hXstruct drm_xe_gem_create { #define DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY 0; #define DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE 0; __u64 extensions; __u64 size; __u32 placement; #define DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING (1 << 0); #define DRM_XE_GEM_CREATE_FLAG_SCANOUT (1 << 1); #define DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM (1 << 2); #define DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION (1 << 3); __u32 flags; __u32 vm_id; __u32 handle; #define DRM_XE_GEM_CPU_CACHING_WB 1; #define DRM_XE_GEM_CPU_CACHING_WC 2; __u16 cpu_caching; __u16 pad[3]; __u64 reserved[2]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM'hjubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hj/h]h extensions}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMOhj)ubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMOhjEubah}(h]h ]h"]h$]h&]uh1jShj)ubeh}(h]h ]h"]h$]h&]uh1j<hjDhMOhj&ubj=)}(h{``size`` Size of the object to be created, must match region (system or vram) minimum alignment (:c:type:`min_page_size`). h](jC)}(h``size``h]j)}(hjhh]hsize}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMThjbubjT)}(hhh]h)}(hqSize of the object to be created, must match region (system or vram) minimum alignment (:c:type:`min_page_size`).h](hXSize of the object to be created, must match region (system or vram) minimum alignment (}(hjhhhNhNubh)}(h:c:type:`min_page_size`h]j)}(hjh]h min_page_size}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ min_page_sizeuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMShjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMShj~ubah}(h]h ]h"]h$]h&]uh1jShjbubeh}(h]h ]h"]h$]h&]uh1j<hj}hMThj&ubj=)}(hX``placement`` A mask of memory instances of where BO can be placed. Each index in this mask refers directly to the struct drm_xe_query_mem_regions' instance, no assumptions should be made about order. The type of each region is described by struct drm_xe_query_mem_regions' mem_class. h](jC)}(h ``placement``h]j)}(hjh]h placement}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM]hjubjT)}(hhh]h)}(hXA mask of memory instances of where BO can be placed. Each index in this mask refers directly to the struct drm_xe_query_mem_regions' instance, no assumptions should be made about order. The type of each region is described by struct drm_xe_query_mem_regions' mem_class.h]hXA mask of memory instances of where BO can be placed. Each index in this mask refers directly to the struct drm_xe_query_mem_regions’ instance, no assumptions should be made about order. The type of each region is described by struct drm_xe_query_mem_regions’ mem_class.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMYhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM]hj&ubj=)}(hA``flags`` Flags for the GEM object, see DRM_XE_GEM_CREATE_FLAG_* h](jC)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMfhjubjT)}(hhh]h)}(h6Flags for the GEM object, see DRM_XE_GEM_CREATE_FLAG_*h]h6Flags for the GEM object, see DRM_XE_GEM_CREATE_FLAG_*}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMfhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMfhj&ubj=)}(h``vm_id`` Attached VM, if any If a VM is specified, this BO must: 1. Only ever be bound to that VM. 2. Cannot be exported as a PRIME fd. h](jC)}(h ``vm_id``h]j)}(hj8h]hvm_id}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMphj2ubjT)}(hhh](h)}(hAttached VM, if anyh]hAttached VM, if any}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMkhjNubh)}(h#If a VM is specified, this BO must:h]h#If a VM is specified, this BO must:}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMmhjNubj)}(hG1. Only ever be bound to that VM. 2. Cannot be exported as a PRIME fd. h]j4)}(hhh](h)}(hOnly ever be bound to that VM.h]h)}(hjxh]hOnly ever be bound to that VM.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMohjvubah}(h]h ]h"]h$]h&]uh1hhjsubh)}(h"Cannot be exported as a PRIME fd. h]h)}(h!Cannot be exported as a PRIME fd.h]h!Cannot be exported as a PRIME fd.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMphjubah}(h]h ]h"]h$]h&]uh1hhjsubeh}(h]h ]h"]h$]h&]j5j5j5hj5j5uh1j4hjoubah}(h]h ]h"]h$]h&]uh1jhjhMohjNubeh}(h]h ]h"]h$]h&]uh1jShj2ubeh}(h]h ]h"]h$]h&]uh1j<hjMhMphj&ubj=)}(hH``handle`` Returned handle for the object. Object handles are nonzero. h](jC)}(h ``handle``h]j)}(hjh]hhandle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMwhjubjT)}(hhh](h)}(hReturned handle for the object.h]hReturned handle for the object.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMuhjubh)}(hObject handles are nonzero.h]hObject handles are nonzero.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMwhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMwhj&ubj=)}(hX``cpu_caching`` The CPU caching mode to select for this object. If mmapping the object the mode selected here will also be used. The exception is when mapping system memory (including data evicted to system) on discrete GPUs. The caching mode selected will then be overridden to DRM_XE_GEM_CPU_CACHING_WB, and coherency between GPU- and CPU is guaranteed. The caching mode of existing CPU-mappings will be updated transparently to user-space clients. h](jC)}(h``cpu_caching``h]j)}(hj h]h cpu_caching}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hXThe CPU caching mode to select for this object. If mmapping the object the mode selected here will also be used. The exception is when mapping system memory (including data evicted to system) on discrete GPUs. The caching mode selected will then be overridden to DRM_XE_GEM_CPU_CACHING_WB, and coherency between GPU- and CPU is guaranteed. The caching mode of existing CPU-mappings will be updated transparently to user-space clients.Hh]hXThe CPU caching mode to select for this object. If mmapping the object the mode selected here will also be used. The exception is when mapping system memory (including data evicted to system) on discrete GPUs. The caching mode selected will then be overridden to DRM_XE_GEM_CPU_CACHING_WB, and coherency between GPU- and CPU is guaranteed. The caching mode of existing CPU-mappings will be updated transparently to user-space clients.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM~hj"ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj!hMhj&ubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjFh]hpad}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj@ubjT)}(hhh]h)}(hMBZh]hMBZ}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jShj@ubeh}(h]h ]h"]h$]h&]uh1j<hj[hMhj&ubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjh]hreserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjyubjT)}(hhh]h)}(hReservedh]hReserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjyubeh}(h]h ]h"]h$]h&]uh1j<hjhMhj&ubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj8)}(hhh]j=)}(hX'The **flags** can be: - ``DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING`` - Modify the GEM object allocation strategy by deferring physical memory allocation until the object is either bound to a virtual memory region via VM_BIND or accessed by the CPU. As a result, no backing memory is reserved at the time of GEM object creation. - ``DRM_XE_GEM_CREATE_FLAG_SCANOUT`` - Indicates that the GEM object is intended for scanout via the display engine. When set, kernel ensures that the allocation is placed in a memory region compatible with the display engine requirements. This may impose restrictions on tiling, alignment, and memory placement to guarantee proper display functionality. - ``DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM`` - When using VRAM as a possible placement, ensure that the corresponding VRAM allocation will always use the CPU accessible part of VRAM. This is important for small-bar systems (on full-bar systems this gets turned into a noop). Note1: System memory can be used as an extra placement if the kernel should spill the allocation to system memory, if space can't be made available in the CPU accessible part of VRAM (giving the same behaviour as the i915 interface, see I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS). Note2: For clear-color CCS surfaces the kernel needs to read the clear-color value stored in the buffer, and on discrete platforms we need to use VRAM for display surfaces, therefore the kernel requires setting this flag for such objects, otherwise an error is thrown on small-bar systems. - ``DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION`` - Allows userspace to hint that compression (CCS) should be disabled for the buffer being created. This can avoid unnecessary memory operations and CCS state management. On pre-Xe2 platforms, this flag is currently rejected as compression control is not supported via PAT index. On Xe2+ platforms, compression is controlled via PAT entries. If this flag is set, the driver will reject any VM bind that requests a PAT index enabling compression for this BO. h](jC)}(hThe **flags** can be:h](hThe }(hjhhhNhNubj)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh can be:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM/hjubjT)}(hhh]h)}(hhh](h)}(hX+``DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING`` - Modify the GEM object allocation strategy by deferring physical memory allocation until the object is either bound to a virtual memory region via VM_BIND or accessed by the CPU. As a result, no backing memory is reserved at the time of GEM object creation.h]h)}(hX+``DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING`` - Modify the GEM object allocation strategy by deferring physical memory allocation until the object is either bound to a virtual memory region via VM_BIND or accessed by the CPU. As a result, no backing memory is reserved at the time of GEM object creation.h](j)}(h(``DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING``h]h$DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhX - Modify the GEM object allocation strategy by deferring physical memory allocation until the object is either bound to a virtual memory region via VM_BIND or accessed by the CPU. As a result, no backing memory is reserved at the time of GEM object creation.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hX```DRM_XE_GEM_CREATE_FLAG_SCANOUT`` - Indicates that the GEM object is intended for scanout via the display engine. When set, kernel ensures that the allocation is placed in a memory region compatible with the display engine requirements. This may impose restrictions on tiling, alignment, and memory placement to guarantee proper display functionality.h]h)}(hX```DRM_XE_GEM_CREATE_FLAG_SCANOUT`` - Indicates that the GEM object is intended for scanout via the display engine. When set, kernel ensures that the allocation is placed in a memory region compatible with the display engine requirements. This may impose restrictions on tiling, alignment, and memory placement to guarantee proper display functionality.h](j)}(h"``DRM_XE_GEM_CREATE_FLAG_SCANOUT``h]hDRM_XE_GEM_CREATE_FLAG_SCANOUT}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubhX> - Indicates that the GEM object is intended for scanout via the display engine. When set, kernel ensures that the allocation is placed in a memory region compatible with the display engine requirements. This may impose restrictions on tiling, alignment, and memory placement to guarantee proper display functionality.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj-ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hXN``DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM`` - When using VRAM as a possible placement, ensure that the corresponding VRAM allocation will always use the CPU accessible part of VRAM. This is important for small-bar systems (on full-bar systems this gets turned into a noop). Note1: System memory can be used as an extra placement if the kernel should spill the allocation to system memory, if space can't be made available in the CPU accessible part of VRAM (giving the same behaviour as the i915 interface, see I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS). Note2: For clear-color CCS surfaces the kernel needs to read the clear-color value stored in the buffer, and on discrete platforms we need to use VRAM for display surfaces, therefore the kernel requires setting this flag for such objects, otherwise an error is thrown on small-bar systems.h]h)}(hXN``DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM`` - When using VRAM as a possible placement, ensure that the corresponding VRAM allocation will always use the CPU accessible part of VRAM. This is important for small-bar systems (on full-bar systems this gets turned into a noop). Note1: System memory can be used as an extra placement if the kernel should spill the allocation to system memory, if space can't be made available in the CPU accessible part of VRAM (giving the same behaviour as the i915 interface, see I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS). Note2: For clear-color CCS surfaces the kernel needs to read the clear-color value stored in the buffer, and on discrete platforms we need to use VRAM for display surfaces, therefore the kernel requires setting this flag for such objects, otherwise an error is thrown on small-bar systems.h](j)}(h-``DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM``h]h)DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubhX# - When using VRAM as a possible placement, ensure that the corresponding VRAM allocation will always use the CPU accessible part of VRAM. This is important for small-bar systems (on full-bar systems this gets turned into a noop). Note1: System memory can be used as an extra placement if the kernel should spill the allocation to system memory, if space can’t be made available in the CPU accessible part of VRAM (giving the same behaviour as the i915 interface, see I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS). Note2: For clear-color CCS surfaces the kernel needs to read the clear-color value stored in the buffer, and on discrete platforms we need to use VRAM for display surfaces, therefore the kernel requires setting this flag for such objects, otherwise an error is thrown on small-bar systems.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjTubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hX``DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION`` - Allows userspace to hint that compression (CCS) should be disabled for the buffer being created. This can avoid unnecessary memory operations and CCS state management. On pre-Xe2 platforms, this flag is currently rejected as compression control is not supported via PAT index. On Xe2+ platforms, compression is controlled via PAT entries. If this flag is set, the driver will reject any VM bind that requests a PAT index enabling compression for this BO. h]h)}(hX``DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION`` - Allows userspace to hint that compression (CCS) should be disabled for the buffer being created. This can avoid unnecessary memory operations and CCS state management. On pre-Xe2 platforms, this flag is currently rejected as compression control is not supported via PAT index. On Xe2+ platforms, compression is controlled via PAT entries. If this flag is set, the driver will reject any VM bind that requests a PAT index enabling compression for this BO.h](j)}(h)``DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION``h]h%DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX - Allows userspace to hint that compression (CCS) should be disabled for the buffer being created. This can avoid unnecessary memory operations and CCS state management. On pre-Xe2 platforms, this flag is currently rejected as compression control is not supported via PAT index. On Xe2+ platforms, compression is controlled via PAT entries. If this flag is set, the driver will reject any VM bind that requests a PAT index enabling compression for this BO.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM(hj{ubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jQ jR uh1hhj&hMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM/hjubah}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM1hjhhubj8)}(hhh](j=)}(hOn dGPU platforms, there is currently no change in behavior with this flag, but future improvements may leverage it. The current benefit is primarily applicable to iGPU platforms. h](jC)}(h@On dGPU platforms, there is currently no change in behavior withh]h@On dGPU platforms, there is currently no change in behavior with}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM4hjubjT)}(hhh]h)}(hrthis flag, but future improvements may leverage it. The current benefit is primarily applicable to iGPU platforms.h]hrthis flag, but future improvements may leverage it. The current benefit is primarily applicable to iGPU platforms.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM3hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM4hjubj=)}(hX**cpu_caching** supports the following values: - ``DRM_XE_GEM_CPU_CACHING_WB`` - Allocate the pages with write-back caching. On iGPU this can't be used for scanout surfaces. Currently not allowed for objects placed in VRAM. - ``DRM_XE_GEM_CPU_CACHING_WC`` - Allocate the pages as write-combined. This is uncached. Scanout surfaces should likely use this. All objects that can be placed in VRAM must use this. h](jC)}(h.**cpu_caching** supports the following values:h](j)}(h**cpu_caching**h]h cpu_caching}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh supports the following values:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM<hjubjT)}(hhh]h)}(hhh](h)}(h``DRM_XE_GEM_CPU_CACHING_WB`` - Allocate the pages with write-back caching. On iGPU this can't be used for scanout surfaces. Currently not allowed for objects placed in VRAM.h]h)}(h``DRM_XE_GEM_CPU_CACHING_WB`` - Allocate the pages with write-back caching. On iGPU this can't be used for scanout surfaces. Currently not allowed for objects placed in VRAM.h](j)}(h``DRM_XE_GEM_CPU_CACHING_WB``h]hDRM_XE_GEM_CPU_CACHING_WB}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh - Allocate the pages with write-back caching. On iGPU this can’t be used for scanout surfaces. Currently not allowed for objects placed in VRAM.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM7hj-ubah}(h]h ]h"]h$]h&]uh1hhj*ubh)}(h``DRM_XE_GEM_CPU_CACHING_WC`` - Allocate the pages as write-combined. This is uncached. Scanout surfaces should likely use this. All objects that can be placed in VRAM must use this. h]h)}(h``DRM_XE_GEM_CPU_CACHING_WC`` - Allocate the pages as write-combined. This is uncached. Scanout surfaces should likely use this. All objects that can be placed in VRAM must use this.h](j)}(h``DRM_XE_GEM_CPU_CACHING_WC``h]hDRM_XE_GEM_CPU_CACHING_WC}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh - Allocate the pages as write-combined. This is uncached. Scanout surfaces should likely use this. All objects that can be placed in VRAM must use this.}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM:hjTubah}(h]h ]h"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjMhM7hj'ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj&hM<hjubeh}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubh)}(hThis ioctl supports setting the following properties via the ``DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY`` extension, which uses the generic :c:type:`struct drm_xe_ext_set_property `:h](h=This ioctl supports setting the following properties via the }(hjhhhNhNubj)}(h,``DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY``h]h(DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# extension, which uses the generic }(hjhhhNhNubh)}(hB:c:type:`struct drm_xe_ext_set_property `h]j)}(hjh]hstruct drm_xe_ext_set_property}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_ext_set_propertyuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM>hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM>hjhhubj)}(hX=- ``DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE`` - set the type of PXP session this object will be used with. Valid values are listed in enum drm_xe_pxp_session_type. ``DRM_XE_PXP_TYPE_NONE`` is the default behavior, so there is no need to explicitly set that. Objects used with session of type ``DRM_XE_PXP_TYPE_HWDRM`` will be marked as invalid if a PXP invalidation event occurs after their creation. Attempting to flip an invalid object will cause a black frame to be displayed instead. Submissions with invalid objects mapped in the VM will be rejected. h]h)}(hhh]h)}(hX-``DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE`` - set the type of PXP session this object will be used with. Valid values are listed in enum drm_xe_pxp_session_type. ``DRM_XE_PXP_TYPE_NONE`` is the default behavior, so there is no need to explicitly set that. Objects used with session of type ``DRM_XE_PXP_TYPE_HWDRM`` will be marked as invalid if a PXP invalidation event occurs after their creation. Attempting to flip an invalid object will cause a black frame to be displayed instead. Submissions with invalid objects mapped in the VM will be rejected. h]h)}(hX)``DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE`` - set the type of PXP session this object will be used with. Valid values are listed in enum drm_xe_pxp_session_type. ``DRM_XE_PXP_TYPE_NONE`` is the default behavior, so there is no need to explicitly set that. Objects used with session of type ``DRM_XE_PXP_TYPE_HWDRM`` will be marked as invalid if a PXP invalidation event occurs after their creation. Attempting to flip an invalid object will cause a black frame to be displayed instead. Submissions with invalid objects mapped in the VM will be rejected.h](j)}(h+``DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE``h]h'DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhw - set the type of PXP session this object will be used with. Valid values are listed in enum drm_xe_pxp_session_type. }(hjhhhNhNubj)}(h``DRM_XE_PXP_TYPE_NONE``h]hDRM_XE_PXP_TYPE_NONE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhh is the default behavior, so there is no need to explicitly set that. Objects used with session of type }(hjhhhNhNubj)}(h``DRM_XE_PXP_TYPE_HWDRM``h]hDRM_XE_PXP_TYPE_HWDRM}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh will be marked as invalid if a PXP invalidation event occurs after their creation. Attempting to flip an invalid object will cause a black frame to be displayed instead. Submissions with invalid objects mapped in the VM will be rejected.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMBhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jQ jR uh1hhj"hMBhjubah}(h]h ]h"]h$]h&]uh1jhj"hMBhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_xe_gem_mmap_offset (C struct)c.drm_xe_gem_mmap_offsethNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_gem_mmap_offseth]j)}(hstruct drm_xe_gem_mmap_offseth](j)}(hjh]hstruct}(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjJhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMNubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhhj[hMNubj!)}(hdrm_xe_gem_mmap_offseth]j')}(hjHh]hdrm_xe_gem_mmap_offset}(hjnhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjJhhhj[hMNubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjFhhhj[hMNubah}(h]jAah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj[hMNhjChhubjU)}(hhh]h)}(h/Input of :c:type:`DRM_IOCTL_XE_GEM_MMAP_OFFSET`h](h Input of }(hjhhhNhNubh)}(h&:c:type:`DRM_IOCTL_XE_GEM_MMAP_OFFSET`h]j)}(hjh]hDRM_IOCTL_XE_GEM_MMAP_OFFSET}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jjHsbc.drm_xe_gem_mmap_offsetasbjQDRM_IOCTL_XE_GEM_MMAP_OFFSETuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjChhhj[hMNubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_gem_mmap_offset { __u64 extensions; __u32 handle; #define DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER (1 << 0); __u32 flags; __u64 offset; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``handle`` Handle for the object being mapped. ``flags`` Flags ``offset`` The fake offset to use for subsequent mmap call ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj)}(hstruct drm_xe_gem_mmap_offset { __u64 extensions; __u32 handle; #define DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER (1 << 0); __u32 flags; __u64 offset; __u64 reserved[2]; };h]hstruct drm_xe_gem_mmap_offset { __u64 extensions; __u32 handle; #define DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER (1 << 0); __u32 flags; __u64 offset; __u64 reserved[2]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hj#h]h extensions}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj9ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj8hMhjubj=)}(h/``handle`` Handle for the object being mapped. h](jC)}(h ``handle``h]j)}(hj\h]hhandle}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjVubjT)}(hhh]h)}(h#Handle for the object being mapped.h]h#Handle for the object being mapped.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjrubah}(h]h ]h"]h$]h&]uh1jShjVubeh}(h]h ]h"]h$]h&]uh1j<hjqhMhjubj=)}(h``flags`` Flags h](jC)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hFlagsh]hFlags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h;``offset`` The fake offset to use for subsequent mmap call h](jC)}(h ``offset``h]j)}(hjh]hoffset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h/The fake offset to use for subsequent mmap callh]h/The fake offset to use for subsequent mmap call}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjh]hreserved}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hReservedh]hReserved}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjJh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj8)}(hhh]j=)}(hXUThe **flags** can be: - ``DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER`` - For user to query special offset for use in mmap ioctl. Writing to the returned mmap address will generate a PCI memory barrier with low overhead (avoiding IOCTL call as well as writing to VRAM which would also add overhead), acting like an MI_MEM_FENCE instruction. h](jC)}(hThe **flags** can be:h](hThe }(hjghhhNhNubj)}(h **flags**h]hflags}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh can be:}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjcubjT)}(hhh]h)}(hhh]h)}(hX5``DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER`` - For user to query special offset for use in mmap ioctl. Writing to the returned mmap address will generate a PCI memory barrier with low overhead (avoiding IOCTL call as well as writing to VRAM which would also add overhead), acting like an MI_MEM_FENCE instruction. h]h)}(hX4``DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER`` - For user to query special offset for use in mmap ioctl. Writing to the returned mmap address will generate a PCI memory barrier with low overhead (avoiding IOCTL call as well as writing to VRAM which would also add overhead), acting like an MI_MEM_FENCE instruction.h](j)}(h'``DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER``h]h#DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX  - For user to query special offset for use in mmap ioctl. Writing to the returned mmap address will generate a PCI memory barrier with low overhead (avoiding IOCTL call as well as writing to VRAM which would also add overhead), acting like an MI_MEM_FENCE instruction.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jQ jR uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjcubeh}(h]h ]h"]h$]h&]uh1j<hjhMhj`ubah}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hX5The mmap size can be at most 4K, due to HW limitations. As a result this interface is only supported on CPU architectures that support 4K page size. The mmap_offset ioctl will detect this and gracefully return an error, where userspace is expected to have a different fallback method for triggering a barrier.h]hX5The mmap size can be at most 4K, due to HW limitations. As a result this interface is only supported on CPU architectures that support 4K page size. The mmap_offset ioctl will detect this and gracefully return an error, where userspace is expected to have a different fallback method for triggering a barrier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(h&Roughly the usage would be as follows:h]h&Roughly the usage would be as follows:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hXstruct drm_xe_gem_mmap_offset mmo = { .handle = 0, // must be set to 0 .flags = DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER, }; err = ioctl(fd, DRM_IOCTL_XE_GEM_MMAP_OFFSET, &mmo); map = mmap(NULL, size, PROT_WRITE, MAP_SHARED, fd, mmo.offset); map[i] = 0xdeadbeef; // issue barrierh]hXstruct drm_xe_gem_mmap_offset mmo = { .handle = 0, // must be set to 0 .flags = DRM_XE_MMAP_OFFSET_FLAG_PCI_BARRIER, }; err = ioctl(fd, DRM_IOCTL_XE_GEM_MMAP_OFFSET, &mmo); map = mmap(NULL, size, PROT_WRITE, MAP_SHARED, fd, mmo.offset); map[i] = 0xdeadbeef; // issue barrier}hjsbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_vm_create (C struct)c.drm_xe_vm_createhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_vm_createh]j)}(hstruct drm_xe_vm_createh](j)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj(hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj9hMubj!)}(hdrm_xe_vm_createh]j')}(hj&h]hdrm_xe_vm_create}(hjLhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjHubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj(hhhj9hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj$hhhj9hMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj9hMhj!hhubjU)}(hhh]h)}(h)Input of :c:type:`DRM_IOCTL_XE_VM_CREATE`h](h Input of }(hjnhhhNhNubh)}(h :c:type:`DRM_IOCTL_XE_VM_CREATE`h]j)}(hjxh]hDRM_IOCTL_XE_VM_CREATE}(hjzhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jj&sbc.drm_xe_vm_createasbjQDRM_IOCTL_XE_VM_CREATEuh1hhjhKhjnubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjkhhubah}(h]h ]h"]h$]h&]uh1jThj!hhhj9hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_vm_create { __u64 extensions; #define DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE (1 << 0); #define DRM_XE_VM_CREATE_FLAG_LR_MODE (1 << 1); #define DRM_XE_VM_CREATE_FLAG_FAULT_MODE (1 << 2); #define DRM_XE_VM_CREATE_FLAG_NO_VM_OVERCOMMIT (1 << 3); __u32 flags; __u32 vm_id; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``flags`` Flags ``vm_id`` Returned VM ID ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj)}(hXSstruct drm_xe_vm_create { __u64 extensions; #define DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE (1 << 0); #define DRM_XE_VM_CREATE_FLAG_LR_MODE (1 << 1); #define DRM_XE_VM_CREATE_FLAG_FAULT_MODE (1 << 2); #define DRM_XE_VM_CREATE_FLAG_NO_VM_OVERCOMMIT (1 << 3); __u32 flags; __u32 vm_id; __u64 reserved[2]; };h]hXSstruct drm_xe_vm_create { __u64 extensions; #define DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE (1 << 0); #define DRM_XE_VM_CREATE_FLAG_LR_MODE (1 << 1); #define DRM_XE_VM_CREATE_FLAG_FAULT_MODE (1 << 2); #define DRM_XE_VM_CREATE_FLAG_NO_VM_OVERCOMMIT (1 << 3); __u32 flags; __u32 vm_id; __u64 reserved[2]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjh]h extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``flags`` Flags h](jC)}(h ``flags``h]j)}(hj:h]hflags}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj4ubjT)}(hhh]h)}(hFlagsh]hFlags}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jShj4ubeh}(h]h ]h"]h$]h&]uh1j<hjOhMhjubj=)}(h``vm_id`` Returned VM ID h](jC)}(h ``vm_id``h]j)}(hjsh]hvm_id}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjmubjT)}(hhh]h)}(hReturned VM IDh]hReturned VM ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjmubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjh]hreserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hReservedh]hReserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj8)}(hhh]j=)}(hXThe **flags** can be: - ``DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE`` - Map the whole virtual address space of the VM to scratch page. A vm_bind would overwrite the scratch page mapping. This flag is mutually exclusive with the ``DRM_XE_VM_CREATE_FLAG_FAULT_MODE`` flag, with an exception on Xe2 and Xe3 platforms. - ``DRM_XE_VM_CREATE_FLAG_LR_MODE`` - An LR, or Long Running VM accepts exec submissions to its exec_queues that don't have an upper time limit on the job execution time. But exec submissions to these don't allow any of the sync types DRM_XE_SYNC_TYPE_SYNCOBJ, DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ, used as out-syncobjs, that is, together with sync flag DRM_XE_SYNC_FLAG_SIGNAL. LR VMs can be created in recoverable page-fault mode using DRM_XE_VM_CREATE_FLAG_FAULT_MODE, if the device supports it. If that flag is omitted, the UMD can not rely on the slightly different per-VM overcommit semantics that are enabled by DRM_XE_VM_CREATE_FLAG_FAULT_MODE (see below), but KMD may still enable recoverable pagefaults if supported by the device. - ``DRM_XE_VM_CREATE_FLAG_FAULT_MODE`` - Requires also DRM_XE_VM_CREATE_FLAG_LR_MODE. It allows memory to be allocated on demand when accessed, and also allows per-VM overcommit of memory. The xe driver internally uses recoverable pagefaults to implement this. - ``DRM_XE_VM_CREATE_FLAG_NO_VM_OVERCOMMIT`` - Requires also DRM_XE_VM_CREATE_FLAG_FAULT_MODE. This disallows per-VM overcommit but only during a :c:type:`DRM_IOCTL_XE_VM_BIND` operation with the ``DRM_XE_VM_BIND_FLAG_IMMEDIATE`` flag set. This may be useful for user-space naively probing the amount of available memory. h](jC)}(hThe **flags** can be:h](hThe }(hj hhhNhNubj)}(h **flags**h]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh can be:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hhh](h)}(hX``DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE`` - Map the whole virtual address space of the VM to scratch page. A vm_bind would overwrite the scratch page mapping. This flag is mutually exclusive with the ``DRM_XE_VM_CREATE_FLAG_FAULT_MODE`` flag, with an exception on Xe2 and Xe3 platforms.h]h)}(hX``DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE`` - Map the whole virtual address space of the VM to scratch page. A vm_bind would overwrite the scratch page mapping. This flag is mutually exclusive with the ``DRM_XE_VM_CREATE_FLAG_FAULT_MODE`` flag, with an exception on Xe2 and Xe3 platforms.h](j)}(h&``DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE``h]h"DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh - Map the whole virtual address space of the VM to scratch page. A vm_bind would overwrite the scratch page mapping. This flag is mutually exclusive with the }(hj7hhhNhNubj)}(h$``DRM_XE_VM_CREATE_FLAG_FAULT_MODE``h]h DRM_XE_VM_CREATE_FLAG_FAULT_MODE}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh2 flag, with an exception on Xe2 and Xe3 platforms.}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj3ubah}(h]h ]h"]h$]h&]uh1hhj0ubh)}(hX``DRM_XE_VM_CREATE_FLAG_LR_MODE`` - An LR, or Long Running VM accepts exec submissions to its exec_queues that don't have an upper time limit on the job execution time. But exec submissions to these don't allow any of the sync types DRM_XE_SYNC_TYPE_SYNCOBJ, DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ, used as out-syncobjs, that is, together with sync flag DRM_XE_SYNC_FLAG_SIGNAL. LR VMs can be created in recoverable page-fault mode using DRM_XE_VM_CREATE_FLAG_FAULT_MODE, if the device supports it. If that flag is omitted, the UMD can not rely on the slightly different per-VM overcommit semantics that are enabled by DRM_XE_VM_CREATE_FLAG_FAULT_MODE (see below), but KMD may still enable recoverable pagefaults if supported by the device.h]h)}(hX``DRM_XE_VM_CREATE_FLAG_LR_MODE`` - An LR, or Long Running VM accepts exec submissions to its exec_queues that don't have an upper time limit on the job execution time. But exec submissions to these don't allow any of the sync types DRM_XE_SYNC_TYPE_SYNCOBJ, DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ, used as out-syncobjs, that is, together with sync flag DRM_XE_SYNC_FLAG_SIGNAL. LR VMs can be created in recoverable page-fault mode using DRM_XE_VM_CREATE_FLAG_FAULT_MODE, if the device supports it. If that flag is omitted, the UMD can not rely on the slightly different per-VM overcommit semantics that are enabled by DRM_XE_VM_CREATE_FLAG_FAULT_MODE (see below), but KMD may still enable recoverable pagefaults if supported by the device.h](j)}(h!``DRM_XE_VM_CREATE_FLAG_LR_MODE``h]hDRM_XE_VM_CREATE_FLAG_LR_MODE}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubhX - An LR, or Long Running VM accepts exec submissions to its exec_queues that don’t have an upper time limit on the job execution time. But exec submissions to these don’t allow any of the sync types DRM_XE_SYNC_TYPE_SYNCOBJ, DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ, used as out-syncobjs, that is, together with sync flag DRM_XE_SYNC_FLAG_SIGNAL. LR VMs can be created in recoverable page-fault mode using DRM_XE_VM_CREATE_FLAG_FAULT_MODE, if the device supports it. If that flag is omitted, the UMD can not rely on the slightly different per-VM overcommit semantics that are enabled by DRM_XE_VM_CREATE_FLAG_FAULT_MODE (see below), but KMD may still enable recoverable pagefaults if supported by the device.}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjlubah}(h]h ]h"]h$]h&]uh1hhj0ubh)}(hX``DRM_XE_VM_CREATE_FLAG_FAULT_MODE`` - Requires also DRM_XE_VM_CREATE_FLAG_LR_MODE. It allows memory to be allocated on demand when accessed, and also allows per-VM overcommit of memory. The xe driver internally uses recoverable pagefaults to implement this.h]h)}(hX``DRM_XE_VM_CREATE_FLAG_FAULT_MODE`` - Requires also DRM_XE_VM_CREATE_FLAG_LR_MODE. It allows memory to be allocated on demand when accessed, and also allows per-VM overcommit of memory. The xe driver internally uses recoverable pagefaults to implement this.h](j)}(h$``DRM_XE_VM_CREATE_FLAG_FAULT_MODE``h]h DRM_XE_VM_CREATE_FLAG_FAULT_MODE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - Requires also DRM_XE_VM_CREATE_FLAG_LR_MODE. It allows memory to be allocated on demand when accessed, and also allows per-VM overcommit of memory. The xe driver internally uses recoverable pagefaults to implement this.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhj0ubh)}(hXC``DRM_XE_VM_CREATE_FLAG_NO_VM_OVERCOMMIT`` - Requires also DRM_XE_VM_CREATE_FLAG_FAULT_MODE. This disallows per-VM overcommit but only during a :c:type:`DRM_IOCTL_XE_VM_BIND` operation with the ``DRM_XE_VM_BIND_FLAG_IMMEDIATE`` flag set. This may be useful for user-space naively probing the amount of available memory. h]h)}(hX?``DRM_XE_VM_CREATE_FLAG_NO_VM_OVERCOMMIT`` - Requires also DRM_XE_VM_CREATE_FLAG_FAULT_MODE. This disallows per-VM overcommit but only during a :c:type:`DRM_IOCTL_XE_VM_BIND` operation with the ``DRM_XE_VM_BIND_FLAG_IMMEDIATE`` flag set. This may be useful for user-space naively probing the amount of available memory.h](j)}(h*``DRM_XE_VM_CREATE_FLAG_NO_VM_OVERCOMMIT``h]h&DRM_XE_VM_CREATE_FLAG_NO_VM_OVERCOMMIT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhf - Requires also DRM_XE_VM_CREATE_FLAG_FAULT_MODE. This disallows per-VM overcommit but only during a }(hjhhhNhNubh)}(h:c:type:`DRM_IOCTL_XE_VM_BIND`h]j)}(hjh]hDRM_IOCTL_XE_VM_BIND}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_VM_BINDuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh operation with the }(hjhhhNhNubj)}(h!``DRM_XE_VM_BIND_FLAG_IMMEDIATE``h]hDRM_XE_VM_BIND_FLAG_IMMEDIATE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh\ flag set. This may be useful for user-space naively probing the amount of available memory.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1hhj0ubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjehMhj-ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj,hMhjubah}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_vm_destroy (C struct)c.drm_xe_vm_destroyhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_vm_destroyh]j)}(hstruct drm_xe_vm_destroyh](j)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjChhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjThMubj!)}(hdrm_xe_vm_destroyh]j')}(hjAh]hdrm_xe_vm_destroy}(hjghhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjcubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjChhhjThMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj?hhhjThMubah}(h]j:ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjThMhj<hhubjU)}(hhh]h)}(h*Input of :c:type:`DRM_IOCTL_XE_VM_DESTROY`h](h Input of }(hjhhhNhNubh)}(h!:c:type:`DRM_IOCTL_XE_VM_DESTROY`h]j)}(hjh]hDRM_IOCTL_XE_VM_DESTROY}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jjAsbc.drm_xe_vm_destroyasbjQDRM_IOCTL_XE_VM_DESTROYuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThj<hhhjThMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(h**Definition**:: struct drm_xe_vm_destroy { __u32 vm_id; __u32 pad; __u64 reserved[2]; }; **Members** ``vm_id`` VM ID ``pad`` MBZ ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj)}(hTstruct drm_xe_vm_destroy { __u32 vm_id; __u32 pad; __u64 reserved[2]; };h]hTstruct drm_xe_vm_destroy { __u32 vm_id; __u32 pad; __u64 reserved[2]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj8)}(hhh](j=)}(h``vm_id`` VM ID h](jC)}(h ``vm_id``h]j)}(hjh]hvm_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hVM IDh]hVM ID}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj2ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj1hMhjubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjUh]hpad}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjOubjT)}(hhh]h)}(hMBZh]hMBZ}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjkubah}(h]h ]h"]h$]h&]uh1jShjOubeh}(h]h ]h"]h$]h&]uh1j<hjjhMhjubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjh]hreserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hReservedh]hReserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_vm_bind_op (C struct)c.drm_xe_vm_bind_ophNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_vm_bind_oph]j)}(hstruct drm_xe_vm_bind_oph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_xe_vm_bind_oph]j')}(hjh]hdrm_xe_vm_bind_op}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(hrun bind operationsh]hrun bind operations}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj'hhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjBjxjBjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_vm_bind_op { __u64 extensions; __u32 obj; __u16 pat_index; __u16 pad; union { __u64 obj_offset; __u64 userptr; __s64 cpu_addr_mirror_offset; }; __u64 range; __u64 addr; #define DRM_XE_VM_BIND_OP_MAP 0x0; #define DRM_XE_VM_BIND_OP_UNMAP 0x1; #define DRM_XE_VM_BIND_OP_MAP_USERPTR 0x2; #define DRM_XE_VM_BIND_OP_UNMAP_ALL 0x3; #define DRM_XE_VM_BIND_OP_PREFETCH 0x4; __u32 op; #define DRM_XE_VM_BIND_FLAG_READONLY (1 << 0); #define DRM_XE_VM_BIND_FLAG_IMMEDIATE (1 << 1); #define DRM_XE_VM_BIND_FLAG_NULL (1 << 2); #define DRM_XE_VM_BIND_FLAG_DUMPABLE (1 << 3); #define DRM_XE_VM_BIND_FLAG_CHECK_PXP (1 << 4); #define DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR (1 << 5); #define DRM_XE_VM_BIND_FLAG_MADVISE_AUTORESET (1 << 6); #define DRM_XE_VM_BIND_FLAG_DECOMPRESS (1 << 7); __u32 flags; #define DRM_XE_CONSULT_MEM_ADVISE_PREF_LOC -1; __u32 prefetch_mem_region_instance; __u32 pad2; __u64 reserved[3]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``obj`` GEM object to operate on, MBZ for MAP_USERPTR, MBZ for UNMAP ``pat_index`` The platform defined **pat_index** to use for this mapping. The index basically maps to some predefined memory attributes, including things like caching, coherency, compression etc. The exact meaning of the pat_index is platform specific and defined in the Bspec and PRMs. When the KMD sets up the binding the index here is encoded into the ppGTT PTE. For coherency the **pat_index** needs to be at least 1way coherent when drm_xe_gem_create.cpu_caching is DRM_XE_GEM_CPU_CACHING_WB. The KMD will extract the coherency mode from the **pat_index** and reject if there is a mismatch (see note below for pre-MTL platforms). Note: On pre-MTL platforms there is only a caching mode and no explicit coherency mode, but on such hardware there is always a shared-LLC (or is dgpu) so all GT memory accesses are coherent with CPU caches even with the caching mode set as uncached. It's only the display engine that is incoherent (on dgpu it must be in VRAM which is always mapped as WC on the CPU). However to keep the uapi somewhat consistent with newer platforms the KMD groups the different cache levels into the following coherency buckets on all pre-MTL platforms: ppGTT UC -> COH_NONE ppGTT WC -> COH_NONE ppGTT WT -> COH_NONE ppGTT WB -> COH_AT_LEAST_1WAY In practice UC/WC/WT should only ever be used for scanout surfaces on such platforms (or perhaps in general for dma-buf if shared with another device) since it is only the display engine that is actually incoherent. Everything else should typically use WB given that we have a shared-LLC. On MTL+ this completely changes and the HW defines the coherency mode as part of the **pat_index**, where incoherent GT access is possible. Note: For userptr and externally imported dma-buf the kernel expects either 1WAY or 2WAY for the **pat_index**. Starting from NVL-P, for userptr, svm, madvise and externally imported dma-buf the kernel expects either 2WAY or 1WAY and XA **pat_index**. For DRM_XE_VM_BIND_FLAG_NULL bindings there are no KMD restrictions on the **pat_index**. For such mappings there is no actual memory being mapped (the address in the PTE is invalid), so the various PAT memory attributes likely do not apply. Simply leaving as zero is one option (still a valid pat_index). Same applies to DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR bindings as for such mapping there is no actual memory being mapped. ``pad`` MBZ ``{unnamed_union}`` anonymous ``obj_offset`` Offset into the object, MBZ for CLEAR_RANGE, ignored for unbind ``userptr`` user pointer to bind on ``cpu_addr_mirror_offset`` Offset from GPU **addr** to create CPU address mirror mappings. MBZ with current level of support (e.g. 1 to 1 mapping between GPU and CPU mappings only supported). ``range`` Number of bytes from the object to bind to addr, MBZ for UNMAP_ALL ``addr`` Address to operate on, MBZ for UNMAP_ALL ``op`` Bind operation to perform ``flags`` Bind flags ``prefetch_mem_region_instance`` Memory region to prefetch VMA to. It is a region instance, not a mask. To be used only with ``DRM_XE_VM_BIND_OP_PREFETCH`` operation. ``pad2`` MBZ ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh:}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjFubj)}(hXstruct drm_xe_vm_bind_op { __u64 extensions; __u32 obj; __u16 pat_index; __u16 pad; union { __u64 obj_offset; __u64 userptr; __s64 cpu_addr_mirror_offset; }; __u64 range; __u64 addr; #define DRM_XE_VM_BIND_OP_MAP 0x0; #define DRM_XE_VM_BIND_OP_UNMAP 0x1; #define DRM_XE_VM_BIND_OP_MAP_USERPTR 0x2; #define DRM_XE_VM_BIND_OP_UNMAP_ALL 0x3; #define DRM_XE_VM_BIND_OP_PREFETCH 0x4; __u32 op; #define DRM_XE_VM_BIND_FLAG_READONLY (1 << 0); #define DRM_XE_VM_BIND_FLAG_IMMEDIATE (1 << 1); #define DRM_XE_VM_BIND_FLAG_NULL (1 << 2); #define DRM_XE_VM_BIND_FLAG_DUMPABLE (1 << 3); #define DRM_XE_VM_BIND_FLAG_CHECK_PXP (1 << 4); #define DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR (1 << 5); #define DRM_XE_VM_BIND_FLAG_MADVISE_AUTORESET (1 << 6); #define DRM_XE_VM_BIND_FLAG_DECOMPRESS (1 << 7); __u32 flags; #define DRM_XE_CONSULT_MEM_ADVISE_PREF_LOC -1; __u32 prefetch_mem_region_instance; __u32 pad2; __u64 reserved[3]; };h]hXstruct drm_xe_vm_bind_op { __u64 extensions; __u32 obj; __u16 pat_index; __u16 pad; union { __u64 obj_offset; __u64 userptr; __s64 cpu_addr_mirror_offset; }; __u64 range; __u64 addr; #define DRM_XE_VM_BIND_OP_MAP 0x0; #define DRM_XE_VM_BIND_OP_UNMAP 0x1; #define DRM_XE_VM_BIND_OP_MAP_USERPTR 0x2; #define DRM_XE_VM_BIND_OP_UNMAP_ALL 0x3; #define DRM_XE_VM_BIND_OP_PREFETCH 0x4; __u32 op; #define DRM_XE_VM_BIND_FLAG_READONLY (1 << 0); #define DRM_XE_VM_BIND_FLAG_IMMEDIATE (1 << 1); #define DRM_XE_VM_BIND_FLAG_NULL (1 << 2); #define DRM_XE_VM_BIND_FLAG_DUMPABLE (1 << 3); #define DRM_XE_VM_BIND_FLAG_CHECK_PXP (1 << 4); #define DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR (1 << 5); #define DRM_XE_VM_BIND_FLAG_MADVISE_AUTORESET (1 << 6); #define DRM_XE_VM_BIND_FLAG_DECOMPRESS (1 << 7); __u32 flags; #define DRM_XE_CONSULT_MEM_ADVISE_PREF_LOC -1; __u32 prefetch_mem_region_instance; __u32 pad2; __u64 reserved[3]; };}hjgsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjFubh)}(h **Members**h]j)}(hjxh]hMembers}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM%hjFubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjh]h extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM:hjubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM:hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM:hjubj=)}(hE``obj`` GEM object to operate on, MBZ for MAP_USERPTR, MBZ for UNMAP h](jC)}(h``obj``h]j)}(hjh]hobj}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM>hjubjT)}(hhh]h)}(hhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM>hjubj=)}(hXg ``pat_index`` The platform defined **pat_index** to use for this mapping. The index basically maps to some predefined memory attributes, including things like caching, coherency, compression etc. The exact meaning of the pat_index is platform specific and defined in the Bspec and PRMs. When the KMD sets up the binding the index here is encoded into the ppGTT PTE. For coherency the **pat_index** needs to be at least 1way coherent when drm_xe_gem_create.cpu_caching is DRM_XE_GEM_CPU_CACHING_WB. The KMD will extract the coherency mode from the **pat_index** and reject if there is a mismatch (see note below for pre-MTL platforms). Note: On pre-MTL platforms there is only a caching mode and no explicit coherency mode, but on such hardware there is always a shared-LLC (or is dgpu) so all GT memory accesses are coherent with CPU caches even with the caching mode set as uncached. It's only the display engine that is incoherent (on dgpu it must be in VRAM which is always mapped as WC on the CPU). However to keep the uapi somewhat consistent with newer platforms the KMD groups the different cache levels into the following coherency buckets on all pre-MTL platforms: ppGTT UC -> COH_NONE ppGTT WC -> COH_NONE ppGTT WT -> COH_NONE ppGTT WB -> COH_AT_LEAST_1WAY In practice UC/WC/WT should only ever be used for scanout surfaces on such platforms (or perhaps in general for dma-buf if shared with another device) since it is only the display engine that is actually incoherent. Everything else should typically use WB given that we have a shared-LLC. On MTL+ this completely changes and the HW defines the coherency mode as part of the **pat_index**, where incoherent GT access is possible. Note: For userptr and externally imported dma-buf the kernel expects either 1WAY or 2WAY for the **pat_index**. Starting from NVL-P, for userptr, svm, madvise and externally imported dma-buf the kernel expects either 2WAY or 1WAY and XA **pat_index**. For DRM_XE_VM_BIND_FLAG_NULL bindings there are no KMD restrictions on the **pat_index**. For such mappings there is no actual memory being mapped (the address in the PTE is invalid), so the various PAT memory attributes likely do not apply. Simply leaving as zero is one option (still a valid pat_index). Same applies to DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR bindings as for such mapping there is no actual memory being mapped. h](jC)}(h ``pat_index``h]j)}(hj h]h pat_index}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMphjubjT)}(hhh](h)}(hXaThe platform defined **pat_index** to use for this mapping. The index basically maps to some predefined memory attributes, including things like caching, coherency, compression etc. The exact meaning of the pat_index is platform specific and defined in the Bspec and PRMs. When the KMD sets up the binding the index here is encoded into the ppGTT PTE.h](hThe platform defined }(hj"hhhNhNubj)}(h **pat_index**h]h pat_index}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubhX? to use for this mapping. The index basically maps to some predefined memory attributes, including things like caching, coherency, compression etc. The exact meaning of the pat_index is platform specific and defined in the Bspec and PRMs. When the KMD sets up the binding the index here is encoded into the ppGTT PTE.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMChjubh)}(hX For coherency the **pat_index** needs to be at least 1way coherent when drm_xe_gem_create.cpu_caching is DRM_XE_GEM_CPU_CACHING_WB. The KMD will extract the coherency mode from the **pat_index** and reject if there is a mismatch (see note below for pre-MTL platforms).h](hFor coherency the }(hjChhhNhNubj)}(h **pat_index**h]h pat_index}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubh needs to be at least 1way coherent when drm_xe_gem_create.cpu_caching is DRM_XE_GEM_CPU_CACHING_WB. The KMD will extract the coherency mode from the }(hjChhhNhNubj)}(h **pat_index**h]h pat_index}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubhJ and reject if there is a mismatch (see note below for pre-MTL platforms).}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMJhjubh)}(hXNote: On pre-MTL platforms there is only a caching mode and no explicit coherency mode, but on such hardware there is always a shared-LLC (or is dgpu) so all GT memory accesses are coherent with CPU caches even with the caching mode set as uncached. It's only the display engine that is incoherent (on dgpu it must be in VRAM which is always mapped as WC on the CPU). However to keep the uapi somewhat consistent with newer platforms the KMD groups the different cache levels into the following coherency buckets on all pre-MTL platforms:h]hXNote: On pre-MTL platforms there is only a caching mode and no explicit coherency mode, but on such hardware there is always a shared-LLC (or is dgpu) so all GT memory accesses are coherent with CPU caches even with the caching mode set as uncached. It’s only the display engine that is incoherent (on dgpu it must be in VRAM which is always mapped as WC on the CPU). However to keep the uapi somewhat consistent with newer platforms the KMD groups the different cache levels into the following coherency buckets on all pre-MTL platforms:}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMOhjubj)}(h]ppGTT UC -> COH_NONE ppGTT WC -> COH_NONE ppGTT WT -> COH_NONE ppGTT WB -> COH_AT_LEAST_1WAY h]h)}(h\ppGTT UC -> COH_NONE ppGTT WC -> COH_NONE ppGTT WT -> COH_NONE ppGTT WB -> COH_AT_LEAST_1WAYh]h\ppGTT UC -> COH_NONE ppGTT WC -> COH_NONE ppGTT WT -> COH_NONE ppGTT WB -> COH_AT_LEAST_1WAY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMXhjubah}(h]h ]h"]h$]h&]uh1jhjhMXhjubh)}(hXIn practice UC/WC/WT should only ever be used for scanout surfaces on such platforms (or perhaps in general for dma-buf if shared with another device) since it is only the display engine that is actually incoherent. Everything else should typically use WB given that we have a shared-LLC. On MTL+ this completely changes and the HW defines the coherency mode as part of the **pat_index**, where incoherent GT access is possible.h](hXxIn practice UC/WC/WT should only ever be used for scanout surfaces on such platforms (or perhaps in general for dma-buf if shared with another device) since it is only the display engine that is actually incoherent. Everything else should typically use WB given that we have a shared-LLC. On MTL+ this completely changes and the HW defines the coherency mode as part of the }(hjhhhNhNubj)}(h **pat_index**h]h pat_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh), where incoherent GT access is possible.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM]hjubh)}(hNote: For userptr and externally imported dma-buf the kernel expects either 1WAY or 2WAY for the **pat_index**. Starting from NVL-P, for userptr, svm, madvise and externally imported dma-buf the kernel expects either 2WAY or 1WAY and XA **pat_index**.h](haNote: For userptr and externally imported dma-buf the kernel expects either 1WAY or 2WAY for the }(hjhhhNhNubj)}(h **pat_index**h]h pat_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. Starting from NVL-P, for userptr, svm, madvise and externally imported dma-buf the kernel expects either 2WAY or 1WAY and XA }(hjhhhNhNubj)}(h **pat_index**h]h pat_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMehjubh)}(hXFor DRM_XE_VM_BIND_FLAG_NULL bindings there are no KMD restrictions on the **pat_index**. For such mappings there is no actual memory being mapped (the address in the PTE is invalid), so the various PAT memory attributes likely do not apply. Simply leaving as zero is one option (still a valid pat_index). Same applies to DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR bindings as for such mapping there is no actual memory being mapped.h](hKFor DRM_XE_VM_BIND_FLAG_NULL bindings there are no KMD restrictions on the }(hjhhhNhNubj)}(h **pat_index**h]h pat_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhXS. For such mappings there is no actual memory being mapped (the address in the PTE is invalid), so the various PAT memory attributes likely do not apply. Simply leaving as zero is one option (still a valid pat_index). Same applies to DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR bindings as for such mapping there is no actual memory being mapped.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMjhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMphjubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hj%h]hpad}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMthjubjT)}(hhh]h)}(hMBZh]hMBZ}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMthj;ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj:hMthjubj=)}(h``{unnamed_union}`` anonymous h](jC)}(h``{unnamed_union}``h]j)}(hj^h]h{unnamed_union}}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjXubjT)}(hhh]h)}(h anonymoush]h anonymous}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshKhjtubah}(h]h ]h"]h$]h&]uh1jShjXubeh}(h]h ]h"]h$]h&]uh1j<hjshKhjubj=)}(hO``obj_offset`` Offset into the object, MBZ for CLEAR_RANGE, ignored for unbind h](jC)}(h``obj_offset``h]j)}(hjh]h obj_offset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMzhjubjT)}(hhh]h)}(h?Offset into the object, MBZ for CLEAR_RANGE, ignored for unbindh]h?Offset into the object, MBZ for CLEAR_RANGE, ignored for unbind}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMyhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMzhjubj=)}(h$``userptr`` user pointer to bind on h](jC)}(h ``userptr``h]j)}(hjh]huserptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM~hjubjT)}(hhh]h)}(huser pointer to bind onh]huser pointer to bind on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM~hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM~hjubj=)}(h``cpu_addr_mirror_offset`` Offset from GPU **addr** to create CPU address mirror mappings. MBZ with current level of support (e.g. 1 to 1 mapping between GPU and CPU mappings only supported). h](jC)}(h``cpu_addr_mirror_offset``h]j)}(hj h]hcpu_addr_mirror_offset}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hOffset from GPU **addr** to create CPU address mirror mappings. MBZ with current level of support (e.g. 1 to 1 mapping between GPU and CPU mappings only supported).h](hOffset from GPU }(hj#hhhNhNubj)}(h**addr**h]haddr}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh to create CPU address mirror mappings. MBZ with current level of support (e.g. 1 to 1 mapping between GPU and CPU mappings only supported).}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hM``range`` Number of bytes from the object to bind to addr, MBZ for UNMAP_ALL h](jC)}(h ``range``h]j)}(hjVh]hrange}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjPubjT)}(hhh]h)}(hBNumber of bytes from the object to bind to addr, MBZ for UNMAP_ALLh]hBNumber of bytes from the object to bind to addr, MBZ for UNMAP_ALL}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jShjPubeh}(h]h ]h"]h$]h&]uh1j<hjkhMhjubj=)}(h2``addr`` Address to operate on, MBZ for UNMAP_ALL h](jC)}(h``addr``h]j)}(hjh]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h(Address to operate on, MBZ for UNMAP_ALLh]h(Address to operate on, MBZ for UNMAP_ALL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h!``op`` Bind operation to perform h](jC)}(h``op``h]j)}(hjh]hop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hBind operation to performh]hBind operation to perform}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``flags`` Bind flags h](jC)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h Bind flagsh]h Bind flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``prefetch_mem_region_instance`` Memory region to prefetch VMA to. It is a region instance, not a mask. To be used only with ``DRM_XE_VM_BIND_OP_PREFETCH`` operation. h](jC)}(h ``prefetch_mem_region_instance``h]j)}(hj:h]hprefetch_mem_region_instance}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj4ubjT)}(hhh]h)}(hMemory region to prefetch VMA to. It is a region instance, not a mask. To be used only with ``DRM_XE_VM_BIND_OP_PREFETCH`` operation.h](h\Memory region to prefetch VMA to. It is a region instance, not a mask. To be used only with }(hjShhhNhNubj)}(h``DRM_XE_VM_BIND_OP_PREFETCH``h]hDRM_XE_VM_BIND_OP_PREFETCH}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh operation.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjPubah}(h]h ]h"]h$]h&]uh1jShj4ubeh}(h]h ]h"]h$]h&]uh1j<hjOhMhjubj=)}(h ``pad2`` MBZ h](jC)}(h``pad2``h]j)}(hjh]hpad2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjh]hreserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hReservedh]hReserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjFubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj8)}(hhh](j=)}(hThe **op** can be: - ``DRM_XE_VM_BIND_OP_MAP`` - ``DRM_XE_VM_BIND_OP_UNMAP`` - ``DRM_XE_VM_BIND_OP_MAP_USERPTR`` - ``DRM_XE_VM_BIND_OP_UNMAP_ALL`` - ``DRM_XE_VM_BIND_OP_PREFETCH`` h](jC)}(hThe **op** can be:h](hThe }(hjhhhNhNubj)}(h**op**h]hop}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh can be:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hhh](h)}(h``DRM_XE_VM_BIND_OP_MAP``h]h)}(hjHh]j)}(hjHh]hDRM_XE_VM_BIND_OP_MAP}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjFubah}(h]h ]h"]h$]h&]uh1hhjCubh)}(h``DRM_XE_VM_BIND_OP_UNMAP``h]h)}(hjih]j)}(hjih]hDRM_XE_VM_BIND_OP_UNMAP}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjgubah}(h]h ]h"]h$]h&]uh1hhjCubh)}(h!``DRM_XE_VM_BIND_OP_MAP_USERPTR``h]h)}(hjh]j)}(hjh]hDRM_XE_VM_BIND_OP_MAP_USERPTR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjCubh)}(h``DRM_XE_VM_BIND_OP_UNMAP_ALL``h]h)}(hjh]j)}(hjh]hDRM_XE_VM_BIND_OP_UNMAP_ALL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjCubh)}(h``DRM_XE_VM_BIND_OP_PREFETCH`` h]h)}(h``DRM_XE_VM_BIND_OP_PREFETCH``h]j)}(hjh]hDRM_XE_VM_BIND_OP_PREFETCH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj?hMhjubah}(h]h ]h"]h$]h&]uh1hhjCubeh}(h]h ]h"]h$]h&]jQ jR uh1hhj`hMhj@ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj?hMhjubj=)}(hXand the **flags** can be: - ``DRM_XE_VM_BIND_FLAG_READONLY`` - Setup the page tables as read-only to ensure write protection - ``DRM_XE_VM_BIND_FLAG_IMMEDIATE`` - On a faulting VM, do the MAP operation immediately rather than deferring the MAP to the page fault handler. This is implied on a non-faulting VM as there is no fault handler to defer to. - ``DRM_XE_VM_BIND_FLAG_NULL`` - When the NULL flag is set, the page tables are setup with a special bit which indicates writes are dropped and all reads return zero. In the future, the NULL flags will only be valid for DRM_XE_VM_BIND_OP_MAP operations, the BO handle MBZ, and the BO offset MBZ. This flag is intended to implement VK sparse bindings. - ``DRM_XE_VM_BIND_FLAG_CHECK_PXP`` - If the object is encrypted via PXP, reject the binding if the encryption key is no longer valid. This flag has no effect on BOs that are not marked as using PXP. - ``DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR`` - When the CPU address mirror flag is set, no mappings are created rather the range is reserved for CPU address mirroring which will be populated on GPU page faults or prefetches. Only valid on VMs with DRM_XE_VM_CREATE_FLAG_FAULT_MODE set. The CPU address mirror flag is only valid for DRM_XE_VM_BIND_OP_MAP operations, the BO handle MBZ, and the BO offset MBZ. - ``DRM_XE_VM_BIND_FLAG_MADVISE_AUTORESET`` - Can be used in combination with ``DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR`` to reset madvises when the underlying CPU address space range is unmapped (typically with munmap(2) or brk(2)). The madvise values set with :c:type:`DRM_IOCTL_XE_MADVISE` are reset to the values that were present immediately after the :c:type:`DRM_IOCTL_XE_VM_BIND`. The reset GPU virtual address range is the intersection of the range bound using :c:type:`DRM_IOCTL_XE_VM_BIND` and the virtual CPU address space range unmapped. This functionality is present to mimic the behaviour of CPU address space madvises set using madvise(2), which are typically reset on unmap. h](jC)}(hand the **flags** can be:h](hand the }(hjhhhNhNubj)}(h **flags**h]hflags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh can be:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM%hjubjT)}(hhh]h)}(hhh](h)}(h```DRM_XE_VM_BIND_FLAG_READONLY`` - Setup the page tables as read-only to ensure write protectionh]h)}(h```DRM_XE_VM_BIND_FLAG_READONLY`` - Setup the page tables as read-only to ensure write protectionh](j)}(h ``DRM_XE_VM_BIND_FLAG_READONLY``h]hDRM_XE_VM_BIND_FLAG_READONLY}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh@ - Setup the page tables as read-only to ensure write protection}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj(ubah}(h]h ]h"]h$]h&]uh1hhj%ubh)}(h``DRM_XE_VM_BIND_FLAG_IMMEDIATE`` - On a faulting VM, do the MAP operation immediately rather than deferring the MAP to the page fault handler. This is implied on a non-faulting VM as there is no fault handler to defer to.h]h)}(h``DRM_XE_VM_BIND_FLAG_IMMEDIATE`` - On a faulting VM, do the MAP operation immediately rather than deferring the MAP to the page fault handler. This is implied on a non-faulting VM as there is no fault handler to defer to.h](j)}(h!``DRM_XE_VM_BIND_FLAG_IMMEDIATE``h]hDRM_XE_VM_BIND_FLAG_IMMEDIATE}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh - On a faulting VM, do the MAP operation immediately rather than deferring the MAP to the page fault handler. This is implied on a non-faulting VM as there is no fault handler to defer to.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjOubah}(h]h ]h"]h$]h&]uh1hhj%ubh)}(hX\``DRM_XE_VM_BIND_FLAG_NULL`` - When the NULL flag is set, the page tables are setup with a special bit which indicates writes are dropped and all reads return zero. In the future, the NULL flags will only be valid for DRM_XE_VM_BIND_OP_MAP operations, the BO handle MBZ, and the BO offset MBZ. This flag is intended to implement VK sparse bindings.h]h)}(hX\``DRM_XE_VM_BIND_FLAG_NULL`` - When the NULL flag is set, the page tables are setup with a special bit which indicates writes are dropped and all reads return zero. In the future, the NULL flags will only be valid for DRM_XE_VM_BIND_OP_MAP operations, the BO handle MBZ, and the BO offset MBZ. This flag is intended to implement VK sparse bindings.h](j)}(h``DRM_XE_VM_BIND_FLAG_NULL``h]hDRM_XE_VM_BIND_FLAG_NULL}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubhX@ - When the NULL flag is set, the page tables are setup with a special bit which indicates writes are dropped and all reads return zero. In the future, the NULL flags will only be valid for DRM_XE_VM_BIND_OP_MAP operations, the BO handle MBZ, and the BO offset MBZ. This flag is intended to implement VK sparse bindings.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjvubah}(h]h ]h"]h$]h&]uh1hhj%ubh)}(h``DRM_XE_VM_BIND_FLAG_CHECK_PXP`` - If the object is encrypted via PXP, reject the binding if the encryption key is no longer valid. This flag has no effect on BOs that are not marked as using PXP.h]h)}(h``DRM_XE_VM_BIND_FLAG_CHECK_PXP`` - If the object is encrypted via PXP, reject the binding if the encryption key is no longer valid. This flag has no effect on BOs that are not marked as using PXP.h](j)}(h!``DRM_XE_VM_BIND_FLAG_CHECK_PXP``h]hDRM_XE_VM_BIND_FLAG_CHECK_PXP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - If the object is encrypted via PXP, reject the binding if the encryption key is no longer valid. This flag has no effect on BOs that are not marked as using PXP.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhj%ubh)}(hX``DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR`` - When the CPU address mirror flag is set, no mappings are created rather the range is reserved for CPU address mirroring which will be populated on GPU page faults or prefetches. Only valid on VMs with DRM_XE_VM_CREATE_FLAG_FAULT_MODE set. The CPU address mirror flag is only valid for DRM_XE_VM_BIND_OP_MAP operations, the BO handle MBZ, and the BO offset MBZ.h]h)}(hX``DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR`` - When the CPU address mirror flag is set, no mappings are created rather the range is reserved for CPU address mirroring which will be populated on GPU page faults or prefetches. Only valid on VMs with DRM_XE_VM_CREATE_FLAG_FAULT_MODE set. The CPU address mirror flag is only valid for DRM_XE_VM_BIND_OP_MAP operations, the BO handle MBZ, and the BO offset MBZ.h](j)}(h'``DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR``h]h#DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhXk - When the CPU address mirror flag is set, no mappings are created rather the range is reserved for CPU address mirroring which will be populated on GPU page faults or prefetches. Only valid on VMs with DRM_XE_VM_CREATE_FLAG_FAULT_MODE set. The CPU address mirror flag is only valid for DRM_XE_VM_BIND_OP_MAP operations, the BO handle MBZ, and the BO offset MBZ.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhj%ubh)}(hX``DRM_XE_VM_BIND_FLAG_MADVISE_AUTORESET`` - Can be used in combination with ``DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR`` to reset madvises when the underlying CPU address space range is unmapped (typically with munmap(2) or brk(2)). The madvise values set with :c:type:`DRM_IOCTL_XE_MADVISE` are reset to the values that were present immediately after the :c:type:`DRM_IOCTL_XE_VM_BIND`. The reset GPU virtual address range is the intersection of the range bound using :c:type:`DRM_IOCTL_XE_VM_BIND` and the virtual CPU address space range unmapped. This functionality is present to mimic the behaviour of CPU address space madvises set using madvise(2), which are typically reset on unmap. h]h)}(hX``DRM_XE_VM_BIND_FLAG_MADVISE_AUTORESET`` - Can be used in combination with ``DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR`` to reset madvises when the underlying CPU address space range is unmapped (typically with munmap(2) or brk(2)). The madvise values set with :c:type:`DRM_IOCTL_XE_MADVISE` are reset to the values that were present immediately after the :c:type:`DRM_IOCTL_XE_VM_BIND`. The reset GPU virtual address range is the intersection of the range bound using :c:type:`DRM_IOCTL_XE_VM_BIND` and the virtual CPU address space range unmapped. This functionality is present to mimic the behaviour of CPU address space madvises set using madvise(2), which are typically reset on unmap.h](j)}(h)``DRM_XE_VM_BIND_FLAG_MADVISE_AUTORESET``h]h%DRM_XE_VM_BIND_FLAG_MADVISE_AUTORESET}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# - Can be used in combination with }(hjhhhNhNubj)}(h'``DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR``h]h#DRM_XE_VM_BIND_FLAG_CPU_ADDR_MIRROR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to reset madvises when the underlying CPU address space range is unmapped (typically with munmap(2) or brk(2)). The madvise values set with }(hjhhhNhNubh)}(h:c:type:`DRM_IOCTL_XE_MADVISE`h]j)}(hjh]hDRM_IOCTL_XE_MADVISE}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_MADVISEuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubhA are reset to the values that were present immediately after the }(hjhhhNhNubh)}(h:c:type:`DRM_IOCTL_XE_VM_BIND`h]j)}(hj=h]hDRM_IOCTL_XE_VM_BIND}(hj?hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_VM_BINDuh1hhj6hMhjubhS. The reset GPU virtual address range is the intersection of the range bound using }(hjhhhNhNubh)}(h:c:type:`DRM_IOCTL_XE_VM_BIND`h]j)}(hj`h]hDRM_IOCTL_XE_VM_BIND}(hjbhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_VM_BINDuh1hhj6hMhjubh and the virtual CPU address space range unmapped. This functionality is present to mimic the behaviour of CPU address space madvises set using madvise(2), which are typically reset on unmap.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hMhjubah}(h]h ]h"]h$]h&]uh1hhj%ubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjHhMhj"ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj!hM%hjubeh}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM'hjhhubj8)}(hhh](j=)}(hX(free(3) may or may not call munmap(2) and/or brk(2), and may thus not invoke autoreset. Neither will stack variables going out of scope. Therefore it's recommended to always explicitly reset the madvises when freeing the memory backing a region used in a :c:type:`DRM_IOCTL_XE_MADVISE` call. - ``DRM_XE_VM_BIND_FLAG_DECOMPRESS`` - Request on-device decompression for a MAP. When set on a MAP bind operation, request the driver schedule an on-device in-place decompression (via the migrate/resolve path) for the GPU mapping created by this bind. Only valid for DRM_XE_VM_BIND_OP_MAP; usage on other ops is rejected. The bind's pat_index must select the device's "no-compression" PAT. Only meaningful for VRAM-backed BOs on devices that support Flat CCS and the required HW generation XE2+. h](jC)}(hAfree(3) may or may not call munmap(2) and/or brk(2), and may thush]hAfree(3) may or may not call munmap(2) and/or brk(2), and may thus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM2hjubjT)}(hhh](j)}(hnot invoke autoreset. Neither will stack variables going out of scope. Therefore it's recommended to always explicitly reset the madvises when freeing the memory backing a region used in a :c:type:`DRM_IOCTL_XE_MADVISE` call. h]h)}(hnot invoke autoreset. Neither will stack variables going out of scope. Therefore it's recommended to always explicitly reset the madvises when freeing the memory backing a region used in a :c:type:`DRM_IOCTL_XE_MADVISE` call.h](hnot invoke autoreset. Neither will stack variables going out of scope. Therefore it’s recommended to always explicitly reset the madvises when freeing the memory backing a region used in a }(hjhhhNhNubh)}(h:c:type:`DRM_IOCTL_XE_MADVISE`h]j)}(hjh]hDRM_IOCTL_XE_MADVISE}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQDRM_IOCTL_XE_MADVISEuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM(hjubh call.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM(hjubah}(h]h ]h"]h$]h&]uh1jhjhM(hjubh)}(hhh]h)}(hX``DRM_XE_VM_BIND_FLAG_DECOMPRESS`` - Request on-device decompression for a MAP. When set on a MAP bind operation, request the driver schedule an on-device in-place decompression (via the migrate/resolve path) for the GPU mapping created by this bind. Only valid for DRM_XE_VM_BIND_OP_MAP; usage on other ops is rejected. The bind's pat_index must select the device's "no-compression" PAT. Only meaningful for VRAM-backed BOs on devices that support Flat CCS and the required HW generation XE2+. h]h)}(hX``DRM_XE_VM_BIND_FLAG_DECOMPRESS`` - Request on-device decompression for a MAP. When set on a MAP bind operation, request the driver schedule an on-device in-place decompression (via the migrate/resolve path) for the GPU mapping created by this bind. Only valid for DRM_XE_VM_BIND_OP_MAP; usage on other ops is rejected. The bind's pat_index must select the device's "no-compression" PAT. Only meaningful for VRAM-backed BOs on devices that support Flat CCS and the required HW generation XE2+.h](j)}(h"``DRM_XE_VM_BIND_FLAG_DECOMPRESS``h]hDRM_XE_VM_BIND_FLAG_DECOMPRESS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX - Request on-device decompression for a MAP. When set on a MAP bind operation, request the driver schedule an on-device in-place decompression (via the migrate/resolve path) for the GPU mapping created by this bind. Only valid for DRM_XE_VM_BIND_OP_MAP; usage on other ops is rejected. The bind’s pat_index must select the device’s “no-compression” PAT. Only meaningful for VRAM-backed BOs on devices that support Flat CCS and the required HW generation XE2+.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM,hjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jQ jR uh1hhj5hM,hjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM2hjubj=)}(hThe **prefetch_mem_region_instance** for ``DRM_XE_VM_BIND_OP_PREFETCH`` can also be: - ``DRM_XE_CONSULT_MEM_ADVISE_PREF_LOC``, which ensures prefetching occurs in the memory region advised by madvise. h](jC)}(hTThe **prefetch_mem_region_instance** for ``DRM_XE_VM_BIND_OP_PREFETCH`` can also be:h](hThe }(hjRhhhNhNubj)}(h **prefetch_mem_region_instance**h]hprefetch_mem_region_instance}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh for }(hjRhhhNhNubj)}(h``DRM_XE_VM_BIND_OP_PREFETCH``h]hDRM_XE_VM_BIND_OP_PREFETCH}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh can also be:}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM9hjNubjT)}(hhh]h)}(hhh]h)}(hu``DRM_XE_CONSULT_MEM_ADVISE_PREF_LOC``, which ensures prefetching occurs in the memory region advised by madvise. h]h)}(hq``DRM_XE_CONSULT_MEM_ADVISE_PREF_LOC``, which ensures prefetching occurs in the memory region advised by madvise.h](j)}(h&``DRM_XE_CONSULT_MEM_ADVISE_PREF_LOC``h]h"DRM_XE_CONSULT_MEM_ADVISE_PREF_LOC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhK, which ensures prefetching occurs in the memory region advised by madvise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM5hjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jQ jR uh1hhjhM5hjubah}(h]h ]h"]h$]h&]uh1jShjNubeh}(h]h ]h"]h$]h&]uh1j<hjhM9hjubeh}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_vm_bind (C struct)c.drm_xe_vm_bindhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_vm_bindh]j)}(hstruct drm_xe_vm_bindh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM;ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM;ubj!)}(hdrm_xe_vm_bindh]j')}(hjh]hdrm_xe_vm_bind}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhM;ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhM;ubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhM;hjhhubjU)}(hhh]h)}(h'Input of :c:type:`DRM_IOCTL_XE_VM_BIND`h](h Input of }(hj%hhhNhNubh)}(h:c:type:`DRM_IOCTL_XE_VM_BIND`h]j)}(hj/h]hDRM_IOCTL_XE_VM_BIND}(hj1hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jjsbc.drm_xe_vm_bindasbjQDRM_IOCTL_XE_VM_BINDuh1hhjhKhj%ubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj"hhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhM;ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjcjxjcjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_vm_bind { __u64 extensions; __u32 vm_id; __u32 exec_queue_id; __u32 pad; __u32 num_binds; union { struct drm_xe_vm_bind_op bind; __u64 vector_of_binds; }; __u32 pad2; __u32 num_syncs; __u64 syncs; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``vm_id`` The ID of the VM to bind to ``exec_queue_id`` exec_queue_id, must be of class DRM_XE_ENGINE_CLASS_VM_BIND and exec queue must have same vm_id. If zero, the default VM bind engine is used. ``pad`` MBZ ``num_binds`` number of binds in this IOCTL ``{unnamed_union}`` anonymous ``bind`` used if num_binds == 1 ``vector_of_binds`` userptr to array of struct drm_xe_vm_bind_op if num_binds > 1 ``pad2`` MBZ ``num_syncs`` amount of syncs to wait on ``syncs`` pointer to struct drm_xe_sync array ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubh:}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjgubj)}(hX$struct drm_xe_vm_bind { __u64 extensions; __u32 vm_id; __u32 exec_queue_id; __u32 pad; __u32 num_binds; union { struct drm_xe_vm_bind_op bind; __u64 vector_of_binds; }; __u32 pad2; __u32 num_syncs; __u64 syncs; __u64 reserved[2]; };h]hX$struct drm_xe_vm_bind { __u64 extensions; __u32 vm_id; __u32 exec_queue_id; __u32 pad; __u32 num_binds; union { struct drm_xe_vm_bind_op bind; __u64 vector_of_binds; }; __u32 pad2; __u32 num_syncs; __u64 syncs; __u64 reserved[2]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjgubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjgubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjh]h extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h&``vm_id`` The ID of the VM to bind to h](jC)}(h ``vm_id``h]j)}(hjh]hvm_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hThe ID of the VM to bind toh]hThe ID of the VM to bind to}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``exec_queue_id`` exec_queue_id, must be of class DRM_XE_ENGINE_CLASS_VM_BIND and exec queue must have same vm_id. If zero, the default VM bind engine is used. h](jC)}(h``exec_queue_id``h]j)}(hj*h]h exec_queue_id}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj$ubjT)}(hhh]h)}(hexec_queue_id, must be of class DRM_XE_ENGINE_CLASS_VM_BIND and exec queue must have same vm_id. If zero, the default VM bind engine is used.h]hexec_queue_id, must be of class DRM_XE_ENGINE_CLASS_VM_BIND and exec queue must have same vm_id. If zero, the default VM bind engine is used.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj@ubah}(h]h ]h"]h$]h&]uh1jShj$ubeh}(h]h ]h"]h$]h&]uh1j<hj?hMhjubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjdh]hpad}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj^ubjT)}(hhh]h)}(hMBZh]hMBZ}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjzubah}(h]h ]h"]h$]h&]uh1jShj^ubeh}(h]h ]h"]h$]h&]uh1j<hjyhMhjubj=)}(h,``num_binds`` number of binds in this IOCTL h](jC)}(h ``num_binds``h]j)}(hjh]h num_binds}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hnumber of binds in this IOCTLh]hnumber of binds in this IOCTL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``{unnamed_union}`` anonymous h](jC)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhjubjT)}(hhh]h)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhKhjubj=)}(h ``bind`` used if num_binds == 1 h](jC)}(h``bind``h]j)}(hjh]hbind}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubjT)}(hhh]h)}(hused if num_binds == 1h]hused if num_binds == 1}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj%ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj$hMhjubj=)}(hR``vector_of_binds`` userptr to array of struct drm_xe_vm_bind_op if num_binds > 1 h](jC)}(h``vector_of_binds``h]j)}(hjHh]hvector_of_binds}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjBubjT)}(hhh]h)}(h=userptr to array of struct drm_xe_vm_bind_op if num_binds > 1h]h=userptr to array of struct drm_xe_vm_bind_op if num_binds > 1}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj^ubah}(h]h ]h"]h$]h&]uh1jShjBubeh}(h]h ]h"]h$]h&]uh1j<hj]hMhjubj=)}(h ``pad2`` MBZ h](jC)}(h``pad2``h]j)}(hjh]hpad2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj|ubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShj|ubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h)``num_syncs`` amount of syncs to wait on h](jC)}(h ``num_syncs``h]j)}(hjh]h num_syncs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hamount of syncs to wait onh]hamount of syncs to wait on}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h.``syncs`` pointer to struct drm_xe_sync array h](jC)}(h ``syncs``h]j)}(hjh]hsyncs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h#pointer to struct drm_xe_sync arrayh]h#pointer to struct drm_xe_sync array}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj hMhjubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hj-h]hreserved}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj'ubjT)}(hhh]h)}(hReservedh]hReserved}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjCubah}(h]h ]h"]h$]h&]uh1jShj'ubeh}(h]h ]h"]h$]h&]uh1j<hjBhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjgubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjph]h Description}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hXBelow is an example of a minimal use of :c:type:`struct drm_xe_vm_bind ` to asynchronously bind the buffer `data` at address `BIND_ADDRESS` to illustrate `userptr`. It can be synchronized by using the example provided for :c:type:`struct drm_xe_sync `.h](h(Below is an example of a minimal use of }(hjhhhNhNubh)}(h0:c:type:`struct drm_xe_vm_bind `h]j)}(hjh]hstruct drm_xe_vm_bind}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_vm_binduh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh# to asynchronously bind the buffer }(hjhhhNhNubj )}(h`data`h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh at address }(hjhhhNhNubj )}(h`BIND_ADDRESS`h]h BIND_ADDRESS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh to illustrate }(hjhhhNhNubj )}(h `userptr`h]huserptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh;. It can be synchronized by using the example provided for }(hjhhhNhNubh)}(h*:c:type:`struct drm_xe_sync `h]j)}(hjh]hstruct drm_xe_sync}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ drm_xe_syncuh1hhjhMhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjhhubj)}(hXdata = aligned_alloc(ALIGNMENT, BO_SIZE); struct drm_xe_vm_bind bind = { .vm_id = vm, .num_binds = 1, .bind.obj = 0, .bind.obj_offset = to_user_pointer(data), .bind.range = BO_SIZE, .bind.addr = BIND_ADDRESS, .bind.op = DRM_XE_VM_BIND_OP_MAP_USERPTR, .bind.flags = 0, .num_syncs = 1, .syncs = &sync, .exec_queue_id = 0, }; ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);h]hXdata = aligned_alloc(ALIGNMENT, BO_SIZE); struct drm_xe_vm_bind bind = { .vm_id = vm, .num_binds = 1, .bind.obj = 0, .bind.obj_offset = to_user_pointer(data), .bind.range = BO_SIZE, .bind.addr = BIND_ADDRESS, .bind.op = DRM_XE_VM_BIND_OP_MAP_USERPTR, .bind.flags = 0, .num_syncs = 1, .syncs = &sync, .exec_queue_id = 0, }; ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);}hjsbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_xe_vm_get_property (C struct)c.drm_xe_vm_get_propertyhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_vm_get_propertyh]j)}(hstruct drm_xe_vm_get_propertyh](j)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhjGhMubj!)}(hdrm_xe_vm_get_propertyh]j')}(hj4h]hdrm_xe_vm_get_property}(hjZhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjVubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj6hhhjGhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj2hhhjGhMubah}(h]j-ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjGhMhj/hhubjU)}(hhh]h)}(h/Input of :c:type:`DRM_IOCTL_XE_VM_GET_PROPERTY`h](h Input of }(hj|hhhNhNubh)}(h&:c:type:`DRM_IOCTL_XE_VM_GET_PROPERTY`h]j)}(hjh]hDRM_IOCTL_XE_VM_GET_PROPERTY}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jj4sbc.drm_xe_vm_get_propertyasbjQDRM_IOCTL_XE_VM_GET_PROPERTYuh1hhjhKhj|ubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjyhhubah}(h]h ]h"]h$]h&]uh1jThj/hhhjGhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_vm_get_property { __u64 extensions; __u32 vm_id; #define DRM_XE_VM_GET_PROPERTY_FAULTS 0; __u32 property; __u32 size; __u32 pad; union { __u64 data; __u64 value; }; __u64 reserved[3]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``vm_id`` The ID of the VM to query the properties of ``property`` property to get ``size`` Size to allocate for **data** ``pad`` MBZ ``{unnamed_union}`` anonymous ``data`` Pointer to user-defined array of flexible size and type ``value`` Return value for scalar queries ``reserved`` MBZh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj)}(hXstruct drm_xe_vm_get_property { __u64 extensions; __u32 vm_id; #define DRM_XE_VM_GET_PROPERTY_FAULTS 0; __u32 property; __u32 size; __u32 pad; union { __u64 data; __u64 value; }; __u64 reserved[3]; };h]hXstruct drm_xe_vm_get_property { __u64 extensions; __u32 vm_id; #define DRM_XE_VM_GET_PROPERTY_FAULTS 0; __u32 property; __u32 size; __u32 pad; union { __u64 data; __u64 value; }; __u64 reserved[3]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM,hjubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjh]h extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM3hj ubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hM3hj%ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj$hM3hjubj=)}(h6``vm_id`` The ID of the VM to query the properties of h](jC)}(h ``vm_id``h]j)}(hjHh]hvm_id}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM6hjBubjT)}(hhh]h)}(h+The ID of the VM to query the properties ofh]h+The ID of the VM to query the properties of}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hM6hj^ubah}(h]h ]h"]h$]h&]uh1jShjBubeh}(h]h ]h"]h$]h&]uh1j<hj]hM6hjubj=)}(h``property`` property to get h](jC)}(h ``property``h]j)}(hjh]hproperty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM:hj{ubjT)}(hhh]h)}(hproperty to geth]hproperty to get}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM:hjubah}(h]h ]h"]h$]h&]uh1jShj{ubeh}(h]h ]h"]h$]h&]uh1j<hjhM:hjubj=)}(h'``size`` Size to allocate for **data** h](jC)}(h``size``h]j)}(hjh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM=hjubjT)}(hhh]h)}(hSize to allocate for **data**h](hSize to allocate for }(hjhhhNhNubj)}(h**data**h]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM=hjubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM@hjubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM@hjubj=)}(h``{unnamed_union}`` anonymous h](jC)}(h``{unnamed_union}``h]j)}(hj:h]h{unnamed_union}}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhj4ubjT)}(hhh]h)}(h anonymoush]h anonymous}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhKhjPubah}(h]h ]h"]h$]h&]uh1jShj4ubeh}(h]h ]h"]h$]h&]uh1j<hjOhKhjubj=)}(hA``data`` Pointer to user-defined array of flexible size and type h](jC)}(h``data``h]j)}(hjsh]hdata}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMDhjmubjT)}(hhh]h)}(h7Pointer to user-defined array of flexible size and typeh]h7Pointer to user-defined array of flexible size and type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMDhjubah}(h]h ]h"]h$]h&]uh1jShjmubeh}(h]h ]h"]h$]h&]uh1j<hjhMDhjubj=)}(h*``value`` Return value for scalar queries h](jC)}(h ``value``h]j)}(hjh]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMFhjubjT)}(hhh]h)}(hReturn value for scalar queriesh]hReturn value for scalar queries}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMFhjubj=)}(h``reserved`` MBZh](jC)}(h ``reserved``h]j)}(hjh]hreserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMIhjubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMJhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMIhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMMhjhhubh)}(hThe user provides a VM and a property to query among DRM_XE_VM_GET_PROPERTY_*, and sets the values in the vm_id and property members, respectively. This determines both the VM to get the property of, as well as the property to report.h]hThe user provides a VM and a property to query among DRM_XE_VM_GET_PROPERTY_*, and sets the values in the vm_id and property members, respectively. This determines both the VM to get the property of, as well as the property to report.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hXIf size is set to 0, the driver fills it with the required size for the requested property. The user is expected here to allocate memory for the property structure and to provide a pointer to the allocated memory using the data member. For some properties, this may be zero, in which case, the value of the property will be saved to the value member and size will remain zero on return.h]hXIf size is set to 0, the driver fills it with the required size for the requested property. The user is expected here to allocate memory for the property structure and to provide a pointer to the allocated memory using the data member. For some properties, this may be zero, in which case, the value of the property will be saved to the value member and size will remain zero on return.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(heIf size is not zero, then the IOCTL will attempt to copy the requested property into the data member.h]heIf size is not zero, then the IOCTL will attempt to copy the requested property into the data member.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM%hjhhubh)}(hXThe IOCTL will return -ENOENT if the VM could not be identified from the provided VM ID, or -EINVAL if the IOCTL fails for any other reason, such as providing an invalid size for the given property or if the property data could not be copied to the memory allocated to the data member.h]hXThe IOCTL will return -ENOENT if the VM could not be identified from the provided VM ID, or -EINVAL if the IOCTL fails for any other reason, such as providing an invalid size for the given property or if the property data could not be copied to the memory allocated to the data member.6}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM(hjhhubj8)}(hhh]j=)}(hCThe property member can be: - ``DRM_XE_VM_GET_PROPERTY_FAULTS`` h](jC)}(hThe property member can be:h]hThe property member can be:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM1hj}ubjT)}(hhh]h)}(hhh]h)}(h%``DRM_XE_VM_GET_PROPERTY_FAULTS`` h]h)}(h!``DRM_XE_VM_GET_PROPERTY_FAULTS``h]j)}(hjh]hDRM_XE_VM_GET_PROPERTY_FAULTS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM.hjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jQ jR uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1jShj}ubeh}(h]h ]h"]h$]h&]uh1j<hjhM1hjzubah}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_xe_exec_queue_create (C struct)c.drm_xe_exec_queue_createhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_exec_queue_createh]j)}(hstruct drm_xe_exec_queue_createh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM3ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM3ubj!)}(hdrm_xe_exec_queue_createh]j')}(hjh]hdrm_xe_exec_queue_create}(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhM3ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhM3ubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhM3hjhhubjU)}(hhh]h)}(h1Input of :c:type:`DRM_IOCTL_XE_EXEC_QUEUE_CREATE`h](h Input of }(hj+hhhNhNubh)}(h(:c:type:`DRM_IOCTL_XE_EXEC_QUEUE_CREATE`h]j)}(hj5h]hDRM_IOCTL_XE_EXEC_QUEUE_CREATE}(hj7hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jjsbc.drm_xe_exec_queue_createasbjQDRM_IOCTL_XE_EXEC_QUEUE_CREATEuh1hhjhKhj+ubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMNhj(hhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhM3ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjijxjijyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_exec_queue_create { #define DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY 0; #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY 0; #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE 1; #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE 2; #define DRM_XE_EXEC_QUEUE_SET_HANG_REPLAY_STATE 3; #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_GROUP 4; #define DRM_XE_MULTI_GROUP_CREATE (1ull << 63); #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_QUEUE_PRIORITY 5; #define DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX 6; __u64 extensions; __u16 width; __u16 num_placements; __u32 vm_id; #define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT (1 << 0); __u32 flags; __u32 exec_queue_id; __u64 instances; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``width`` submission width (number BB per exec) for this exec queue ``num_placements`` number of valid placements for this exec queue ``vm_id`` VM to use for this exec queue ``flags`` flags to use for this exec queue ``exec_queue_id`` Returned exec queue ID ``instances`` user pointer to a 2-d array of struct drm_xe_engine_class_instance length = width (i) * num_placements (j) index = j + i * width ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh:}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMRhjmubj)}(hXZstruct drm_xe_exec_queue_create { #define DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY 0; #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY 0; #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE 1; #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE 2; #define DRM_XE_EXEC_QUEUE_SET_HANG_REPLAY_STATE 3; #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_GROUP 4; #define DRM_XE_MULTI_GROUP_CREATE (1ull << 63); #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_QUEUE_PRIORITY 5; #define DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX 6; __u64 extensions; __u16 width; __u16 num_placements; __u32 vm_id; #define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT (1 << 0); __u32 flags; __u32 exec_queue_id; __u64 instances; __u64 reserved[2]; };h]hXZstruct drm_xe_exec_queue_create { #define DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY 0; #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY 0; #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE 1; #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE 2; #define DRM_XE_EXEC_QUEUE_SET_HANG_REPLAY_STATE 3; #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_GROUP 4; #define DRM_XE_MULTI_GROUP_CREATE (1ull << 63); #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_QUEUE_PRIORITY 5; #define DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX 6; __u64 extensions; __u16 width; __u16 num_placements; __u32 vm_id; #define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT (1 << 0); __u32 flags; __u32 exec_queue_id; __u64 instances; __u64 reserved[2]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMThjmubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMihjmubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjh]h extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hD``width`` submission width (number BB per exec) for this exec queue h](jC)}(h ``width``h]j)}(hjh]hwidth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h9submission width (number BB per exec) for this exec queueh]h9submission width (number BB per exec) for this exec queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj hMhjubj=)}(hB``num_placements`` number of valid placements for this exec queue h](jC)}(h``num_placements``h]j)}(hj0h]hnum_placements}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj*ubjT)}(hhh]h)}(h.number of valid placements for this exec queueh]h.number of valid placements for this exec queue}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjFubah}(h]h ]h"]h$]h&]uh1jShj*ubeh}(h]h ]h"]h$]h&]uh1j<hjEhMhjubj=)}(h(``vm_id`` VM to use for this exec queue h](jC)}(h ``vm_id``h]j)}(hjih]hvm_id}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjcubjT)}(hhh]h)}(hVM to use for this exec queueh]hVM to use for this exec queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhjubah}(h]h ]h"]h$]h&]uh1jShjcubeh}(h]h ]h"]h$]h&]uh1j<hj~hMhjubj=)}(h+``flags`` flags to use for this exec queue h](jC)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h flags to use for this exec queueh]h flags to use for this exec queue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h)``exec_queue_id`` Returned exec queue ID h](jC)}(h``exec_queue_id``h]j)}(hjh]h exec_queue_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hReturned exec queue IDh]hReturned exec queue ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``instances`` user pointer to a 2-d array of struct drm_xe_engine_class_instance length = width (i) * num_placements (j) index = j + i * width h](jC)}(h ``instances``h]j)}(hjh]h instances}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh](h)}(hBuser pointer to a 2-d array of struct drm_xe_engine_class_instanceh]hBuser pointer to a 2-d array of struct drm_xe_engine_class_instance}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj*ubh)}(h=length = width (i) * num_placements (j) index = j + i * widthh]h=length = width (i) * num_placements (j) index = j + i * width}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj*ubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj)hMhjubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hj]h]hreserved}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjWubjT)}(hhh]h)}(hReservedh]hReserved}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjsubah}(h]h ]h"]h$]h&]uh1jShjWubeh}(h]h ]h"]h$]h&]uh1j<hjrhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjmubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hThis ioctl supports setting the following properties via the ``DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY`` extension, which uses the generic :c:type:`struct drm_xe_ext_set_property `:h](h=This ioctl supports setting the following properties via the }(hjhhhNhNubj)}(h,``DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY``h]h(DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# extension, which uses the generic }(hjhhhNhNubh)}(hB:c:type:`struct drm_xe_ext_set_property `h]j)}(hjh]hstruct drm_xe_ext_set_property}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_ext_set_propertyuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMOhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMOhjhhubj)}(hX- ``DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY`` - set the queue priority. CAP_SYS_NICE is required to set a value above normal. - ``DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE`` - set the queue timeslice duration in microseconds. - ``DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE`` - set the type of PXP session this queue will be used with. Valid values are listed in enum drm_xe_pxp_session_type. ``DRM_XE_PXP_TYPE_NONE`` is the default behavior, so there is no need to explicitly set that. When a queue of type ``DRM_XE_PXP_TYPE_HWDRM`` is created, the PXP default HWDRM session (``DRM_XE_PXP_HWDRM_DEFAULT_SESSION``) will be started, if it isn't already running. The user is expected to query the PXP status via the query ioctl (see ``DRM_XE_DEVICE_QUERY_PXP_STATUS``) and to wait for PXP to be ready before attempting to create a queue with this property. When a queue is created before PXP is ready, the ioctl will return -EBUSY if init is still in progress or -EIO if init failed. Given that going into a power-saving state kills PXP HWDRM sessions, runtime PM will be blocked while queues of this type are alive. All PXP queues will be killed if a PXP invalidation event occurs. - ``DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_GROUP`` - Create a multi-queue group or add secondary queues to a multi-queue group. If the extension's 'value' field has ``DRM_XE_MULTI_GROUP_CREATE`` flag set, then a new multi-queue group is created with this queue as the primary queue (Q0). Otherwise, the queue gets added to the multi-queue group whose primary queue's exec_queue_id is specified in the lower 32 bits of the 'value' field. All the other non-relevant bits of extension's 'value' field while adding the primary or the secondary queues of the group must be set to 0. - ``DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_QUEUE_PRIORITY`` - Set the queue priority within the multi-queue group. Current valid priority values are 0–2 (default is 1), with higher values indicating higher priority. - ``DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX`` - Set the queue to enable render color cache keying on BTP+BTI instead of just BTI (only valid for render queues). h]h)}(hhh](h)}(h{``DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY`` - set the queue priority. CAP_SYS_NICE is required to set a value above normal.h]h)}(h{``DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY`` - set the queue priority. CAP_SYS_NICE is required to set a value above normal.h](j)}(h+``DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY``h]h'DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhP - set the queue priority. CAP_SYS_NICE is required to set a value above normal.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMShjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h```DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE`` - set the queue timeslice duration in microseconds.h]h)}(h```DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE`` - set the queue timeslice duration in microseconds.h](j)}(h,``DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE``h]h(DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh4 - set the queue timeslice duration in microseconds.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMUhj(ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hX``DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE`` - set the type of PXP session this queue will be used with. Valid values are listed in enum drm_xe_pxp_session_type. ``DRM_XE_PXP_TYPE_NONE`` is the default behavior, so there is no need to explicitly set that. When a queue of type ``DRM_XE_PXP_TYPE_HWDRM`` is created, the PXP default HWDRM session (``DRM_XE_PXP_HWDRM_DEFAULT_SESSION``) will be started, if it isn't already running. The user is expected to query the PXP status via the query ioctl (see ``DRM_XE_DEVICE_QUERY_PXP_STATUS``) and to wait for PXP to be ready before attempting to create a queue with this property. When a queue is created before PXP is ready, the ioctl will return -EBUSY if init is still in progress or -EIO if init failed. Given that going into a power-saving state kills PXP HWDRM sessions, runtime PM will be blocked while queues of this type are alive. All PXP queues will be killed if a PXP invalidation event occurs.h]h)}(hX``DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE`` - set the type of PXP session this queue will be used with. Valid values are listed in enum drm_xe_pxp_session_type. ``DRM_XE_PXP_TYPE_NONE`` is the default behavior, so there is no need to explicitly set that. When a queue of type ``DRM_XE_PXP_TYPE_HWDRM`` is created, the PXP default HWDRM session (``DRM_XE_PXP_HWDRM_DEFAULT_SESSION``) will be started, if it isn't already running. The user is expected to query the PXP status via the query ioctl (see ``DRM_XE_DEVICE_QUERY_PXP_STATUS``) and to wait for PXP to be ready before attempting to create a queue with this property. When a queue is created before PXP is ready, the ioctl will return -EBUSY if init is still in progress or -EIO if init failed. Given that going into a power-saving state kills PXP HWDRM sessions, runtime PM will be blocked while queues of this type are alive. All PXP queues will be killed if a PXP invalidation event occurs.h](j)}(h+``DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE``h]h'DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubhv - set the type of PXP session this queue will be used with. Valid values are listed in enum drm_xe_pxp_session_type. }(hjShhhNhNubj)}(h``DRM_XE_PXP_TYPE_NONE``h]hDRM_XE_PXP_TYPE_NONE}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh[ is the default behavior, so there is no need to explicitly set that. When a queue of type }(hjShhhNhNubj)}(h``DRM_XE_PXP_TYPE_HWDRM``h]hDRM_XE_PXP_TYPE_HWDRM}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh, is created, the PXP default HWDRM session (}(hjShhhNhNubj)}(h$``DRM_XE_PXP_HWDRM_DEFAULT_SESSION``h]h DRM_XE_PXP_HWDRM_DEFAULT_SESSION}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubhx) will be started, if it isn’t already running. The user is expected to query the PXP status via the query ioctl (see }(hjShhhNhNubj)}(h"``DRM_XE_DEVICE_QUERY_PXP_STATUS``h]hDRM_XE_DEVICE_QUERY_PXP_STATUS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubhX) and to wait for PXP to be ready before attempting to create a queue with this property. When a queue is created before PXP is ready, the ioctl will return -EBUSY if init is still in progress or -EIO if init failed. Given that going into a power-saving state kills PXP HWDRM sessions, runtime PM will be blocked while queues of this type are alive. All PXP queues will be killed if a PXP invalidation event occurs.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMWhjOubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hX=``DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_GROUP`` - Create a multi-queue group or add secondary queues to a multi-queue group. If the extension's 'value' field has ``DRM_XE_MULTI_GROUP_CREATE`` flag set, then a new multi-queue group is created with this queue as the primary queue (Q0). Otherwise, the queue gets added to the multi-queue group whose primary queue's exec_queue_id is specified in the lower 32 bits of the 'value' field. All the other non-relevant bits of extension's 'value' field while adding the primary or the secondary queues of the group must be set to 0.h]h)}(hX=``DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_GROUP`` - Create a multi-queue group or add secondary queues to a multi-queue group. If the extension's 'value' field has ``DRM_XE_MULTI_GROUP_CREATE`` flag set, then a new multi-queue group is created with this queue as the primary queue (Q0). Otherwise, the queue gets added to the multi-queue group whose primary queue's exec_queue_id is specified in the lower 32 bits of the 'value' field. All the other non-relevant bits of extension's 'value' field while adding the primary or the secondary queues of the group must be set to 0.h](j)}(h.``DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_GROUP``h]h*DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_GROUP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhy - Create a multi-queue group or add secondary queues to a multi-queue group. If the extension’s ‘value’ field has }(hjhhhNhNubj)}(h``DRM_XE_MULTI_GROUP_CREATE``h]hDRM_XE_MULTI_GROUP_CREATE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhX flag set, then a new multi-queue group is created with this queue as the primary queue (Q0). Otherwise, the queue gets added to the multi-queue group whose primary queue’s exec_queue_id is specified in the lower 32 bits of the ‘value’ field. All the other non-relevant bits of extension’s ‘value’ field while adding the primary or the secondary queues of the group must be set to 0.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMehjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h``DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_QUEUE_PRIORITY`` - Set the queue priority within the multi-queue group. Current valid priority values are 0–2 (default is 1), with higher values indicating higher priority.h]h)}(h``DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_QUEUE_PRIORITY`` - Set the queue priority within the multi-queue group. Current valid priority values are 0–2 (default is 1), with higher values indicating higher priority.h](j)}(h7``DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_QUEUE_PRIORITY``h]h3DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_QUEUE_PRIORITY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh - Set the queue priority within the multi-queue group. Current valid priority values are 0–2 (default is 1), with higher values indicating higher priority.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMmhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h``DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX`` - Set the queue to enable render color cache keying on BTP+BTI instead of just BTI (only valid for render queues). h]h)}(h``DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX`` - Set the queue to enable render color cache keying on BTP+BTI instead of just BTI (only valid for render queues).h](j)}(h6``DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX``h]h2DRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubhs - Set the queue to enable render color cache keying on BTP+BTI instead of just BTI (only valid for render queues).}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMphjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jQ jR uh1hhj!hMShjubah}(h]h ]h"]h$]h&]uh1jhj!hMShjhhubh)}(hThe example below shows how to use :c:type:`struct drm_xe_exec_queue_create ` to create a simple exec_queue (no parallel submission) of class ``DRM_XE_ENGINE_CLASS_RENDER``.h](h#The example below shows how to use }(hjQhhhNhNubh)}(hD:c:type:`struct drm_xe_exec_queue_create `h]j)}(hj[h]hstruct drm_xe_exec_queue_create}(hj]hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_exec_queue_createuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMthjQubhA to create a simple exec_queue (no parallel submission) of class }(hjQhhhNhNubj)}(h``DRM_XE_ENGINE_CLASS_RENDER``h]hDRM_XE_ENGINE_CLASS_RENDER}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjxhMthjhhubj)}(hX\struct drm_xe_engine_class_instance instance = { .engine_class = DRM_XE_ENGINE_CLASS_RENDER, }; struct drm_xe_exec_queue_create exec_queue_create = { .extensions = 0, .vm_id = vm, .width = 1, .num_placements = 1, .instances = to_user_pointer(&instance), }; ioctl(fd, DRM_IOCTL_XE_EXEC_QUEUE_CREATE, &exec_queue_create);h]hX\struct drm_xe_engine_class_instance instance = { .engine_class = DRM_XE_ENGINE_CLASS_RENDER, }; struct drm_xe_exec_queue_create exec_queue_create = { .extensions = 0, .vm_id = vm, .width = 1, .num_placements = 1, .instances = to_user_pointer(&instance), }; ioctl(fd, DRM_IOCTL_XE_EXEC_QUEUE_CREATE, &exec_queue_create);}hjsbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMxhjhhubh)}(hAllow users to provide a hint to kernel for cases demanding low latency profile. Please note it will have impact on power consumption. User can indicate low latency hint with flag while creating exec queue as mentioned below:h]hAllow users to provide a hint to kernel for cases demanding low latency profile. Please note it will have impact on power consumption. User can indicate low latency hint with flag while creating exec queue as mentioned below:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hX*struct drm_xe_exec_queue_create exec_queue_create = { .flags = DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT, .extensions = 0, .vm_id = vm, .width = 1, .num_placements = 1, .instances = to_user_pointer(&instance), }; ioctl(fd, DRM_IOCTL_XE_EXEC_QUEUE_CREATE, &exec_queue_create);h]hX*struct drm_xe_exec_queue_create exec_queue_create = { .flags = DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT, .extensions = 0, .vm_id = vm, .width = 1, .num_placements = 1, .instances = to_user_pointer(&instance), }; ioctl(fd, DRM_IOCTL_XE_EXEC_QUEUE_CREATE, &exec_queue_create);}hjsbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_xe_exec_queue_destroy (C struct)c.drm_xe_exec_queue_destroyhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_exec_queue_destroyh]j)}(h struct drm_xe_exec_queue_destroyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_xe_exec_queue_destroyh]j')}(hjh]hdrm_xe_exec_queue_destroy}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(h2Input of :c:type:`DRM_IOCTL_XE_EXEC_QUEUE_DESTROY`h](h Input of }(hjhhhNhNubh)}(h):c:type:`DRM_IOCTL_XE_EXEC_QUEUE_DESTROY`h]j)}(hj)h]hDRM_IOCTL_XE_EXEC_QUEUE_DESTROY}(hj+hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jjsbc.drm_xe_exec_queue_destroyasbjQDRM_IOCTL_XE_EXEC_QUEUE_DESTROYuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj]jxj]jyjzj{uh1jhhhjhjhM ubj})}(h**Definition**:: struct drm_xe_exec_queue_destroy { __u32 exec_queue_id; __u32 pad; __u64 reserved[2]; }; **Members** ``exec_queue_id`` Exec queue ID ``pad`` MBZ ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh:}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjaubj)}(hdstruct drm_xe_exec_queue_destroy { __u32 exec_queue_id; __u32 pad; __u64 reserved[2]; };h]hdstruct drm_xe_exec_queue_destroy { __u32 exec_queue_id; __u32 pad; __u64 reserved[2]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjaubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjaubj8)}(hhh](j=)}(h ``exec_queue_id`` Exec queue ID h](jC)}(h``exec_queue_id``h]j)}(hjh]h exec_queue_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h Exec queue IDh]h Exec queue ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjh]hpad}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hj$h]hreserved}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hReservedh]hReserved}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj:ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj9hMhjubeh}(h]h ]h"]h$]h&]uh1j7hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_xe_exec_queue_get_property (C struct) c.drm_xe_exec_queue_get_propertyhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_exec_queue_get_propertyh]j)}(h%struct drm_xe_exec_queue_get_propertyh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjzhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjhMubj!)}(hdrm_xe_exec_queue_get_propertyh]j')}(hjxh]hdrm_xe_exec_queue_get_property}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjzhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjvhhhjhMubah}(h]jqah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjshhubjU)}(hhh]h)}(h7Input of :c:type:`DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY`h](h Input of }(hjhhhNhNubh)}(h.:c:type:`DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY`h]j)}(hjh]h$DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jjxsb c.drm_xe_exec_queue_get_propertyasbjQ$DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTYuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjshhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_exec_queue_get_property { __u64 extensions; __u32 exec_queue_id; #define DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN 0; __u32 property; __u64 value; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``exec_queue_id`` Exec queue ID ``property`` property to get ``value`` property value ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubj)}(hstruct drm_xe_exec_queue_get_property { __u64 extensions; __u32 exec_queue_id; #define DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN 0; __u32 property; __u64 value; __u64 reserved[2]; };h]hstruct drm_xe_exec_queue_get_property { __u64 extensions; __u32 exec_queue_id; #define DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN 0; __u32 property; __u64 value; __u64 reserved[2]; };}hj# sbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubh)}(h **Members**h]j)}(hj4 h]hMembers}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2 ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjS h]h extensions}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjM ubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh hMhji ubah}(h]h ]h"]h$]h&]uh1jShjM ubeh}(h]h ]h"]h$]h&]uh1j<hjh hMhjJ ubj=)}(h ``exec_queue_id`` Exec queue ID h](jC)}(h``exec_queue_id``h]j)}(hj h]h exec_queue_id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubjT)}(hhh]h)}(h Exec queue IDh]h Exec queue ID}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hMhjJ ubj=)}(h``property`` property to get h](jC)}(h ``property``h]j)}(hj h]hproperty}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubjT)}(hhh]h)}(hproperty to geth]hproperty to get}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hMhjJ ubj=)}(h``value`` property value h](jC)}(h ``value``h]j)}(hj h]hvalue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubjT)}(hhh]h)}(hproperty valueh]hproperty value}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hMhjJ ubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hj7 h]hreserved}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5 ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj1 ubjT)}(hhh]h)}(hReservedh]hReserved}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjM ubah}(h]h ]h"]h$]h&]uh1jShj1 ubeh}(h]h ]h"]h$]h&]uh1j<hjL hMhjJ ubeh}(h]h ]h"]h$]h&]uh1j7hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjz h]h Description}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj8)}(hhh]j=)}(hEThe **property** can be: - ``DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN`` h](jC)}(hThe **property** can be:h](hThe }(hj hhhNhNubj)}(h **property**h]hproperty}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh can be:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubjT)}(hhh]h)}(hhh]h)}(h*``DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN`` h]h)}(h&``DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN``h]j)}(hj h]h"DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]jQ jR uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hMhj ubah}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_sync (C struct) c.drm_xe_synchNtauh1jhjhhhjhM ubj)}(hhh](j)}(h drm_xe_synch]j)}(hstruct drm_xe_synch](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj!)}(h drm_xe_synch]j')}(hj h]h drm_xe_sync}(hj1 hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj- ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj hhhj hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj hhhj hMubah}(h]j ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj hMhj hhubjU)}(hhh]h)}(h sync objecth]h sync object}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjP hhubah}(h]h ]h"]h$]h&]uh1jThj hhhj hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjk jxjk jyjzj{uh1jhhhjhjhM ubj})}(hXr**Definition**:: struct drm_xe_sync { __u64 extensions; #define DRM_XE_SYNC_TYPE_SYNCOBJ 0x0; #define DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ 0x1; #define DRM_XE_SYNC_TYPE_USER_FENCE 0x2; __u32 type; #define DRM_XE_SYNC_FLAG_SIGNAL (1 << 0); __u32 flags; union { __u32 handle; __u64 addr; }; __u64 timeline_value; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``type`` Type of this sync object ``flags`` Sync Flags ``{unnamed_union}`` anonymous ``handle`` Handle for the object ``addr`` Address of user fence. When sync is passed in via exec IOCTL this is a GPU address in the VM. When sync is passed in via VM bind IOCTL this is a user pointer. In either case, it is the user's responsibility that this address is present and mapped when the user fence is signalled. Must be qword aligned. ``timeline_value`` Input for the timeline sync object. Needs to be different than 0 when used with ``DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ``. ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs ubh:}(hjs hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjo ubj)}(hXstruct drm_xe_sync { __u64 extensions; #define DRM_XE_SYNC_TYPE_SYNCOBJ 0x0; #define DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ 0x1; #define DRM_XE_SYNC_TYPE_USER_FENCE 0x2; __u32 type; #define DRM_XE_SYNC_FLAG_SIGNAL (1 << 0); __u32 flags; union { __u32 handle; __u64 addr; }; __u64 timeline_value; __u64 reserved[2]; };h]hXstruct drm_xe_sync { __u64 extensions; #define DRM_XE_SYNC_TYPE_SYNCOBJ 0x0; #define DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ 0x1; #define DRM_XE_SYNC_TYPE_USER_FENCE 0x2; __u32 type; #define DRM_XE_SYNC_FLAG_SIGNAL (1 << 0); __u32 flags; union { __u32 handle; __u64 addr; }; __u64 timeline_value; __u64 reserved[2]; };}hj sbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjo ubh)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjo ubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hj h]h extensions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hMhj ubj=)}(h"``type`` Type of this sync object h](jC)}(h``type``h]j)}(hj h]htype}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubjT)}(hhh]h)}(hType of this sync objecth]hType of this sync object}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hMhj ubj=)}(h``flags`` Sync Flags h](jC)}(h ``flags``h]j)}(hj2 h]hflags}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj, ubjT)}(hhh]h)}(h Sync Flagsh]h Sync Flags}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG hMhjH ubah}(h]h ]h"]h$]h&]uh1jShj, ubeh}(h]h ]h"]h$]h&]uh1j<hjG hMhj ubj=)}(h``{unnamed_union}`` anonymous h](jC)}(h``{unnamed_union}``h]j)}(hjk h]h{unnamed_union}}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhje ubjT)}(hhh]h)}(h anonymoush]h anonymous}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jShje ubeh}(h]h ]h"]h$]h&]uh1j<hj hKhj ubj=)}(h!``handle`` Handle for the object h](jC)}(h ``handle``h]j)}(hj h]hhandle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubjT)}(hhh]h)}(hHandle for the objecth]hHandle for the object}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hMhj ubj=)}(hX9``addr`` Address of user fence. When sync is passed in via exec IOCTL this is a GPU address in the VM. When sync is passed in via VM bind IOCTL this is a user pointer. In either case, it is the user's responsibility that this address is present and mapped when the user fence is signalled. Must be qword aligned. h](jC)}(h``addr``h]j)}(hj h]haddr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM%hj ubjT)}(hhh]h)}(hX/Address of user fence. When sync is passed in via exec IOCTL this is a GPU address in the VM. When sync is passed in via VM bind IOCTL this is a user pointer. In either case, it is the user's responsibility that this address is present and mapped when the user fence is signalled. Must be qword aligned.h]hX1Address of user fence. When sync is passed in via exec IOCTL this is a GPU address in the VM. When sync is passed in via VM bind IOCTL this is a user pointer. In either case, it is the user’s responsibility that this address is present and mapped when the user fence is signalled. Must be qword aligned.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hM%hj ubj=)}(h``timeline_value`` Input for the timeline sync object. Needs to be different than 0 when used with ``DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ``. h](jC)}(h``timeline_value``h]j)}(hj h]htimeline_value}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM,hj ubjT)}(hhh]h)}(hvInput for the timeline sync object. Needs to be different than 0 when used with ``DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ``.h](hPInput for the timeline sync object. Needs to be different than 0 when used with }(hj0 hhhNhNubj)}(h%``DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ``h]h!DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubh.}(hj0 hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM+hj- ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj, hM,hj ubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjc h]hreserved}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM/hj] ubjT)}(hhh]h)}(hReservedh]hReserved}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM0hjy ubah}(h]h ]h"]h$]h&]uh1jShj] ubeh}(h]h ]h"]h$]h&]uh1j<hjx hM/hj ubeh}(h]h ]h"]h$]h&]uh1j7hjo ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM3hjhhubj8)}(hhh](j=)}(h~The **type** can be: - ``DRM_XE_SYNC_TYPE_SYNCOBJ`` - ``DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ`` - ``DRM_XE_SYNC_TYPE_USER_FENCE`` h](jC)}(hThe **type** can be:h](hThe }(hj hhhNhNubj)}(h**type**h]htype}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh can be:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubjT)}(hhh]h)}(hhh](h)}(h``DRM_XE_SYNC_TYPE_SYNCOBJ``h]h)}(hj h]j)}(hj h]hDRM_XE_SYNC_TYPE_SYNCOBJ}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubah}(h]h ]h"]h$]h&]uh1hhj ubh)}(h%``DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ``h]h)}(hj h]j)}(hj h]h!DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubah}(h]h ]h"]h$]h&]uh1hhj ubh)}(h ``DRM_XE_SYNC_TYPE_USER_FENCE`` h]h)}(h``DRM_XE_SYNC_TYPE_USER_FENCE``h]j)}(hj2h]hDRM_XE_SYNC_TYPE_USER_FENCE}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhj hMhj,ubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj hMhj ubj=)}(h8and the **flags** can be: - ``DRM_XE_SYNC_FLAG_SIGNAL`` h](jC)}(hand the **flags** can be:h](hand the }(hjchhhNhNubj)}(h **flags**h]hflags}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubh can be:}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj_ubjT)}(hhh]h)}(hhh]h)}(h``DRM_XE_SYNC_FLAG_SIGNAL`` h]h)}(h``DRM_XE_SYNC_FLAG_SIGNAL``h]j)}(hjh]hDRM_XE_SYNC_FLAG_SIGNAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jQ jR uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShj_ubeh}(h]h ]h"]h$]h&]uh1j<hjhMhj ubeh}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubh)}(hLA minimal use of :c:type:`struct drm_xe_sync ` looks like this:h](hA minimal use of }(hjhhhNhNubh)}(h*:c:type:`struct drm_xe_sync `h]j)}(hjh]hstruct drm_xe_sync}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ drm_xe_syncuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh looks like this:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjhhubj)}(hXstruct drm_xe_sync sync = { .flags = DRM_XE_SYNC_FLAG_SIGNAL, .type = DRM_XE_SYNC_TYPE_SYNCOBJ, }; struct drm_syncobj_create syncobj_create = { 0 }; ioctl(fd, DRM_IOCTL_SYNCOBJ_CREATE, &syncobj_create); sync.handle = syncobj_create.handle; ... use of &sync in drm_xe_exec or drm_xe_vm_bind ... struct drm_syncobj_wait wait = { .handles = &sync.handle, .timeout_nsec = INT64_MAX, .count_handles = 1, .flags = 0, .first_signaled = 0, .pad = 0, }; ioctl(fd, DRM_IOCTL_SYNCOBJ_WAIT, &wait);h]hXstruct drm_xe_sync sync = { .flags = DRM_XE_SYNC_FLAG_SIGNAL, .type = DRM_XE_SYNC_TYPE_SYNCOBJ, }; struct drm_syncobj_create syncobj_create = { 0 }; ioctl(fd, DRM_IOCTL_SYNCOBJ_CREATE, &syncobj_create); sync.handle = syncobj_create.handle; ... use of &sync in drm_xe_exec or drm_xe_vm_bind ... struct drm_syncobj_wait wait = { .handles = &sync.handle, .timeout_nsec = INT64_MAX, .count_handles = 1, .flags = 0, .first_signaled = 0, .pad = 0, }; ioctl(fd, DRM_IOCTL_SYNCOBJ_WAIT, &wait);}hjsbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_exec (C struct) c.drm_xe_exechNtauh1jhjhhhjhM ubj)}(hhh](j)}(h drm_xe_exech]j)}(hstruct drm_xe_exech](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj+hMubj!)}(h drm_xe_exech]j')}(hjh]h drm_xe_exec}(hj>hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj:ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhj+hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhj+hMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj+hMhjhhubjU)}(hhh]h)}(h$Input of :c:type:`DRM_IOCTL_XE_EXEC`h](h Input of }(hj`hhhNhNubh)}(h:c:type:`DRM_IOCTL_XE_EXEC`h]j)}(hjjh]hDRM_IOCTL_XE_EXEC}(hjlhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jjsb c.drm_xe_execasbjQDRM_IOCTL_XE_EXECuh1hhjhKhj`ubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM4hj]hhubah}(h]h ]h"]h$]h&]uh1jThjhhhj+hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_exec { __u64 extensions; __u32 exec_queue_id; #define DRM_XE_MAX_SYNCS 1024; __u32 num_syncs; __u64 syncs; __u64 address; __u16 num_batch_buffer; __u16 pad[3]; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``exec_queue_id`` Exec queue ID for the batch buffer ``num_syncs`` Amount of struct drm_xe_sync in array. ``syncs`` Pointer to struct drm_xe_sync array. ``address`` address of batch buffer if num_batch_buffer == 1 or an array of batch buffer addresses ``num_batch_buffer`` number of batch buffer in this exec, must match the width of the engine ``pad`` MBZ ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM8hjubj)}(hstruct drm_xe_exec { __u64 extensions; __u32 exec_queue_id; #define DRM_XE_MAX_SYNCS 1024; __u32 num_syncs; __u64 syncs; __u64 address; __u16 num_batch_buffer; __u16 pad[3]; __u64 reserved[2]; };h]hstruct drm_xe_exec { __u64 extensions; __u32 exec_queue_id; #define DRM_XE_MAX_SYNCS 1024; __u32 num_syncs; __u64 syncs; __u64 address; __u16 num_batch_buffer; __u16 pad[3]; __u64 reserved[2]; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM:hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMFhjubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjh]h extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMIhjubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMIhj ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMIhjubj=)}(h5``exec_queue_id`` Exec queue ID for the batch buffer h](jC)}(h``exec_queue_id``h]j)}(hj,h]h exec_queue_id}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMLhj&ubjT)}(hhh]h)}(h"Exec queue ID for the batch bufferh]h"Exec queue ID for the batch buffer}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMLhjBubah}(h]h ]h"]h$]h&]uh1jShj&ubeh}(h]h ]h"]h$]h&]uh1j<hjAhMLhjubj=)}(h5``num_syncs`` Amount of struct drm_xe_sync in array. h](jC)}(h ``num_syncs``h]j)}(hjeh]h num_syncs}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMPhj_ubjT)}(hhh]h)}(h&Amount of struct drm_xe_sync in array.h]h&Amount of struct drm_xe_sync in array.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMPhj{ubah}(h]h ]h"]h$]h&]uh1jShj_ubeh}(h]h ]h"]h$]h&]uh1j<hjzhMPhjubj=)}(h/``syncs`` Pointer to struct drm_xe_sync array. h](jC)}(h ``syncs``h]j)}(hjh]hsyncs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMShjubjT)}(hhh]h)}(h$Pointer to struct drm_xe_sync array.h]h$Pointer to struct drm_xe_sync array.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMShjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMShjubj=)}(hc``address`` address of batch buffer if num_batch_buffer == 1 or an array of batch buffer addresses h](jC)}(h ``address``h]j)}(hjh]haddress}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMXhjubjT)}(hhh]h)}(hVaddress of batch buffer if num_batch_buffer == 1 or an array of batch buffer addressesh]hVaddress of batch buffer if num_batch_buffer == 1 or an array of batch buffer addresses}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMWhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMXhjubj=)}(h]``num_batch_buffer`` number of batch buffer in this exec, must match the width of the engine h](jC)}(h``num_batch_buffer``h]j)}(hjh]hnum_batch_buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM^hj ubjT)}(hhh]h)}(hGnumber of batch buffer in this exec, must match the width of the engineh]hGnumber of batch buffer in this exec, must match the width of the engine}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM]hj'ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj&hM^hjubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjKh]hpad}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMbhjEubjT)}(hhh]h)}(hMBZh]hMBZ}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMbhjaubah}(h]h ]h"]h$]h&]uh1jShjEubeh}(h]h ]h"]h$]h&]uh1j<hj`hMbhjubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjh]hreserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMdhj~ubjT)}(hhh]h)}(hReservedh]hReserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMehjubah}(h]h ]h"]h$]h&]uh1jShj~ubeh}(h]h ]h"]h$]h&]uh1j<hjhMdhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhhjhhubh)}(hXThis is an example to use :c:type:`struct drm_xe_exec ` for execution of the object at BIND_ADDRESS (see example in :c:type:`struct drm_xe_vm_bind `) by an exec_queue (see example in :c:type:`struct drm_xe_exec_queue_create `). It can be synchronized by using the example provided for :c:type:`struct drm_xe_sync `.h](hThis is an example to use }(hjhhhNhNubh)}(h*:c:type:`struct drm_xe_exec `h]j)}(hjh]hstruct drm_xe_exec}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ drm_xe_execuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM5hjubh= for execution of the object at BIND_ADDRESS (see example in }(hjhhhNhNubh)}(h0:c:type:`struct drm_xe_vm_bind `h]j)}(hj h]hstruct drm_xe_vm_bind}(hj hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_vm_binduh1hhjhM5hjubh#) by an exec_queue (see example in }(hjhhhNhNubh)}(hD:c:type:`struct drm_xe_exec_queue_create `h]j)}(hj.h]hstruct drm_xe_exec_queue_create}(hj0hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_exec_queue_createuh1hhjhM5hjubh<). It can be synchronized by using the example provided for }(hjhhhNhNubh)}(h*:c:type:`struct drm_xe_sync `h]j)}(hjQh]hstruct drm_xe_sync}(hjShhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ drm_xe_syncuh1hhjhM5hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM5hjhhubj)}(hstruct drm_xe_exec exec = { .exec_queue_id = exec_queue, .syncs = &sync, .num_syncs = 1, .address = BIND_ADDRESS, .num_batch_buffer = 1, }; ioctl(fd, DRM_IOCTL_XE_EXEC, &exec);h]hstruct drm_xe_exec exec = { .exec_queue_id = exec_queue, .syncs = &sync, .num_syncs = 1, .address = BIND_ADDRESS, .num_batch_buffer = 1, }; ioctl(fd, DRM_IOCTL_XE_EXEC, &exec);}hjxsbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM:hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_xe_wait_user_fence (C struct)c.drm_xe_wait_user_fencehNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_wait_user_fenceh]j)}(hstruct drm_xe_wait_user_fenceh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMHubj!)}(hdrm_xe_wait_user_fenceh]j')}(hjh]hdrm_xe_wait_user_fence}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMHubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMHubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMHhjhhubjU)}(hhh]h)}(h/Input of :c:type:`DRM_IOCTL_XE_WAIT_USER_FENCE`h](h Input of }(hjhhhNhNubh)}(h&:c:type:`DRM_IOCTL_XE_WAIT_USER_FENCE`h]j)}(hjh]hDRM_IOCTL_XE_WAIT_USER_FENCE}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jjsbc.drm_xe_wait_user_fenceasbjQDRM_IOCTL_XE_WAIT_USER_FENCEuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMihjhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMHubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj!jxj!jyjzj{uh1jhhhjhjhM ubj})}(hXy**Definition**:: struct drm_xe_wait_user_fence { __u64 extensions; __u64 addr; #define DRM_XE_UFENCE_WAIT_OP_EQ 0x0; #define DRM_XE_UFENCE_WAIT_OP_NEQ 0x1; #define DRM_XE_UFENCE_WAIT_OP_GT 0x2; #define DRM_XE_UFENCE_WAIT_OP_GTE 0x3; #define DRM_XE_UFENCE_WAIT_OP_LT 0x4; #define DRM_XE_UFENCE_WAIT_OP_LTE 0x5; __u16 op; #define DRM_XE_UFENCE_WAIT_FLAG_ABSTIME (1 << 0); __u16 flags; __u32 pad; __u64 value; __u64 mask; __s64 timeout; __u32 exec_queue_id; __u32 pad2; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``addr`` user pointer address to wait on, must be qword aligned ``op`` wait operation (type of comparison) ``flags`` wait flags ``pad`` MBZ ``value`` compare value ``mask`` comparison mask ``timeout`` how long to wait before bailing, value in nanoseconds. Without DRM_XE_UFENCE_WAIT_FLAG_ABSTIME flag set (relative timeout) it contains timeout expressed in nanoseconds to wait (fence will expire at now() + timeout). When DRM_XE_UFENCE_WAIT_FLAG_ABSTIME flag is set (absolute timeout) wait will end at timeout (uses system CLOCK_MONOTONIC). Passing negative timeout leads to never ending wait. On relative timeout this value is updated with timeout left (for restarting the call in case of signal delivery). On absolute timeout this value stays intact (restarted call still expire at the same point of time). ``exec_queue_id`` exec_queue_id returned from xe_exec_queue_create_ioctl ``pad2`` MBZ ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh:}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMmhj%ubj)}(hX*struct drm_xe_wait_user_fence { __u64 extensions; __u64 addr; #define DRM_XE_UFENCE_WAIT_OP_EQ 0x0; #define DRM_XE_UFENCE_WAIT_OP_NEQ 0x1; #define DRM_XE_UFENCE_WAIT_OP_GT 0x2; #define DRM_XE_UFENCE_WAIT_OP_GTE 0x3; #define DRM_XE_UFENCE_WAIT_OP_LT 0x4; #define DRM_XE_UFENCE_WAIT_OP_LTE 0x5; __u16 op; #define DRM_XE_UFENCE_WAIT_FLAG_ABSTIME (1 << 0); __u16 flags; __u32 pad; __u64 value; __u64 mask; __s64 timeout; __u32 exec_queue_id; __u32 pad2; __u64 reserved[2]; };h]hX*struct drm_xe_wait_user_fence { __u64 extensions; __u64 addr; #define DRM_XE_UFENCE_WAIT_OP_EQ 0x0; #define DRM_XE_UFENCE_WAIT_OP_NEQ 0x1; #define DRM_XE_UFENCE_WAIT_OP_GT 0x2; #define DRM_XE_UFENCE_WAIT_OP_GTE 0x3; #define DRM_XE_UFENCE_WAIT_OP_LT 0x4; #define DRM_XE_UFENCE_WAIT_OP_LTE 0x5; __u16 op; #define DRM_XE_UFENCE_WAIT_FLAG_ABSTIME (1 << 0); __u16 flags; __u32 pad; __u64 value; __u64 mask; __s64 timeout; __u32 exec_queue_id; __u32 pad2; __u64 reserved[2]; };}hjFsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMohj%ubh)}(h **Members**h]j)}(hjWh]hMembers}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj%ubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjvh]h extensions}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjpubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjpubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjmubj=)}(h@``addr`` user pointer address to wait on, must be qword aligned h](jC)}(h``addr``h]j)}(hjh]haddr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h6user pointer address to wait on, must be qword alignedh]h6user pointer address to wait on, must be qword aligned}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjmubj=)}(h+``op`` wait operation (type of comparison) h](jC)}(h``op``h]j)}(hjh]hop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h#wait operation (type of comparison)h]h#wait operation (type of comparison)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjmubj=)}(h``flags`` wait flags h](jC)}(h ``flags``h]j)}(hj!h]hflags}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h wait flagsh]h wait flags}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj6hMhjmubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjZh]hpad}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjTubjT)}(hhh]h)}(hMBZh]hMBZ}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjpubah}(h]h ]h"]h$]h&]uh1jShjTubeh}(h]h ]h"]h$]h&]uh1j<hjohMhjmubj=)}(h``value`` compare value h](jC)}(h ``value``h]j)}(hjh]hvalue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h compare valueh]h compare value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjmubj=)}(h``mask`` comparison mask h](jC)}(h``mask``h]j)}(hjh]hmask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hcomparison maskh]hcomparison mask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjmubj=)}(hXm``timeout`` how long to wait before bailing, value in nanoseconds. Without DRM_XE_UFENCE_WAIT_FLAG_ABSTIME flag set (relative timeout) it contains timeout expressed in nanoseconds to wait (fence will expire at now() + timeout). When DRM_XE_UFENCE_WAIT_FLAG_ABSTIME flag is set (absolute timeout) wait will end at timeout (uses system CLOCK_MONOTONIC). Passing negative timeout leads to never ending wait. On relative timeout this value is updated with timeout left (for restarting the call in case of signal delivery). On absolute timeout this value stays intact (restarted call still expire at the same point of time). h](jC)}(h ``timeout``h]j)}(hjh]htimeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh](h)}(hXhow long to wait before bailing, value in nanoseconds. Without DRM_XE_UFENCE_WAIT_FLAG_ABSTIME flag set (relative timeout) it contains timeout expressed in nanoseconds to wait (fence will expire at now() + timeout). When DRM_XE_UFENCE_WAIT_FLAG_ABSTIME flag is set (absolute timeout) wait will end at timeout (uses system CLOCK_MONOTONIC). Passing negative timeout leads to never ending wait.h]hXhow long to wait before bailing, value in nanoseconds. Without DRM_XE_UFENCE_WAIT_FLAG_ABSTIME flag set (relative timeout) it contains timeout expressed in nanoseconds to wait (fence will expire at now() + timeout). When DRM_XE_UFENCE_WAIT_FLAG_ABSTIME flag is set (absolute timeout) wait will end at timeout (uses system CLOCK_MONOTONIC). Passing negative timeout leads to never ending wait.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubh)}(hOn relative timeout this value is updated with timeout left (for restarting the call in case of signal delivery). On absolute timeout this value stays intact (restarted call still expire at the same point of time).h]hOn relative timeout this value is updated with timeout left (for restarting the call in case of signal delivery). On absolute timeout this value stays intact (restarted call still expire at the same point of time).}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjmubj=)}(hI``exec_queue_id`` exec_queue_id returned from xe_exec_queue_create_ioctl h](jC)}(h``exec_queue_id``h]j)}(hjNh]h exec_queue_id}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjHubjT)}(hhh]h)}(h6exec_queue_id returned from xe_exec_queue_create_ioctlh]h6exec_queue_id returned from xe_exec_queue_create_ioctl}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjdubah}(h]h ]h"]h$]h&]uh1jShjHubeh}(h]h ]h"]h$]h&]uh1j<hjchMhjmubj=)}(h ``pad2`` MBZ h](jC)}(h``pad2``h]j)}(hjh]hpad2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hMBZh]hMBZ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjmubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjh]hreserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hReservedh]hReserved}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjmubeh}(h]h ]h"]h$]h&]uh1j7hj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(h|Wait on user fence, XE will wake-up on every HW engine interrupt in the instances list and check if user fence is complete::h]h{Wait on user fence, XE will wake-up on every HW engine interrupt in the instances list and check if user fence is complete:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMjhjhhubj)}(h (*addr & MASK) OP (VALUE & MASK)h]h (*addr & MASK) OP (VALUE & MASK)}hj(sbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMmhjhhubh)}(h4Returns to user on user fence completion or timeout.h]h4Returns to user on user fence completion or timeout.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMohjhhubj8)}(hhh](j=)}(hThe **op** can be: - ``DRM_XE_UFENCE_WAIT_OP_EQ`` - ``DRM_XE_UFENCE_WAIT_OP_NEQ`` - ``DRM_XE_UFENCE_WAIT_OP_GT`` - ``DRM_XE_UFENCE_WAIT_OP_GTE`` - ``DRM_XE_UFENCE_WAIT_OP_LT`` - ``DRM_XE_UFENCE_WAIT_OP_LTE`` h](jC)}(hThe **op** can be:h](hThe }(hjMhhhNhNubj)}(h**op**h]hop}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh can be:}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMwhjIubjT)}(hhh]h)}(hhh](h)}(h``DRM_XE_UFENCE_WAIT_OP_EQ``h]h)}(hjvh]j)}(hjvh]hDRM_XE_UFENCE_WAIT_OP_EQ}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMrhjtubah}(h]h ]h"]h$]h&]uh1hhjqubh)}(h``DRM_XE_UFENCE_WAIT_OP_NEQ``h]h)}(hjh]j)}(hjh]hDRM_XE_UFENCE_WAIT_OP_NEQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMshjubah}(h]h ]h"]h$]h&]uh1hhjqubh)}(h``DRM_XE_UFENCE_WAIT_OP_GT``h]h)}(hjh]j)}(hjh]hDRM_XE_UFENCE_WAIT_OP_GT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMthjubah}(h]h ]h"]h$]h&]uh1hhjqubh)}(h``DRM_XE_UFENCE_WAIT_OP_GTE``h]h)}(hjh]j)}(hjh]hDRM_XE_UFENCE_WAIT_OP_GTE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMuhjubah}(h]h ]h"]h$]h&]uh1hhjqubh)}(h``DRM_XE_UFENCE_WAIT_OP_LT``h]h)}(hjh]j)}(hjh]hDRM_XE_UFENCE_WAIT_OP_LT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMvhjubah}(h]h ]h"]h$]h&]uh1hhjqubh)}(h``DRM_XE_UFENCE_WAIT_OP_LTE`` h]h)}(h``DRM_XE_UFENCE_WAIT_OP_LTE``h]j)}(hjh]hDRM_XE_UFENCE_WAIT_OP_LTE}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjmhMwhjubah}(h]h ]h"]h$]h&]uh1hhjqubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjhMrhjnubah}(h]h ]h"]h$]h&]uh1jShjIubeh}(h]h ]h"]h$]h&]uh1j<hjmhMwhjFubj=)}(h@and the **flags** can be: - ``DRM_XE_UFENCE_WAIT_FLAG_ABSTIME`` h](jC)}(hand the **flags** can be:h](hand the }(hjPhhhNhNubj)}(h **flags**h]hflags}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh can be:}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMzhjLubjT)}(hhh]h)}(hhh]h)}(h$``DRM_XE_UFENCE_WAIT_FLAG_ABSTIME`` h]h)}(h#``DRM_XE_UFENCE_WAIT_FLAG_ABSTIME``h]j)}(hj}h]hDRM_XE_UFENCE_WAIT_FLAG_ABSTIME}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhjphMzhjwubah}(h]h ]h"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&]jQ jR uh1hhjphMzhjqubah}(h]h ]h"]h$]h&]uh1jShjLubeh}(h]h ]h"]h$]h&]uh1j<hjphMzhjFubj=)}(hThe **mask** values can be for example: - 0xffu for u8 - 0xffffu for u16 - 0xffffffffu for u32 - 0xffffffffffffffffu for u64 h](jC)}(h'The **mask** values can be for example:h](hThe }(hjhhhNhNubj)}(h**mask**h]hmask}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh values can be for example:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hhh](h)}(h 0xffu for u8h]h)}(hjh]h 0xffu for u8}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM}hjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h0xffffu for u16h]h)}(hjh]h0xffffu for u16}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM~hjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h0xffffffffu for u32h]h)}(hjh]h0xffffffffu for u32}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(h0xffffffffffffffffu for u64 h]h)}(h0xffffffffffffffffu for u64h]h0xffffffffffffffffu for u64}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjhM}hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjFubeh}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_xe_observation_type (C enum)c.drm_xe_observation_typehNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_observation_typeh]j)}(henum drm_xe_observation_typeh](j)}(hjh]henum}(hjghhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjchhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjthMubj!)}(hdrm_xe_observation_typeh]j')}(hjah]hdrm_xe_observation_type}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjchhhjthMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj_hhhjthMubah}(h]jZah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjthMhj\hhubjU)}(hhh]h)}(hObservation stream typesh]hObservation stream types}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThj\hhhjthMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(h**Constants** ``DRM_XE_OBSERVATION_TYPE_OA`` OA observation stream type ``DRM_XE_OBSERVATION_TYPE_EU_STALL`` EU stall sampling observation stream typeh](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj8)}(hhh](j=)}(h:``DRM_XE_OBSERVATION_TYPE_OA`` OA observation stream type h](jC)}(h``DRM_XE_OBSERVATION_TYPE_OA``h]j)}(hjh]hDRM_XE_OBSERVATION_TYPE_OA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hOA observation stream typeh]hOA observation stream type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hN``DRM_XE_OBSERVATION_TYPE_EU_STALL`` EU stall sampling observation stream typeh](jC)}(h$``DRM_XE_OBSERVATION_TYPE_EU_STALL``h]j)}(hj#h]h DRM_XE_OBSERVATION_TYPE_EU_STALL}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h)EU stall sampling observation stream typeh]h)EU stall sampling observation stream type}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj9ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj8hMhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_observation_op (C enum)c.drm_xe_observation_ophNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_observation_oph]j)}(henum drm_xe_observation_oph](j)}(hjh]henum}(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjyhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyhhhjhMubj!)}(hdrm_xe_observation_oph]j')}(hjwh]hdrm_xe_observation_op}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjyhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjuhhhjhMubah}(h]jpah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjrhhubjU)}(hhh]h)}(hObservation stream opsh]hObservation stream ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jThjrhhhjhMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjhjhM ubj})}(h**Constants** ``DRM_XE_OBSERVATION_OP_STREAM_OPEN`` Open an observation stream ``DRM_XE_OBSERVATION_OP_ADD_CONFIG`` Add observation stream config ``DRM_XE_OBSERVATION_OP_REMOVE_CONFIG`` Remove observation stream configh](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubj8)}(hhh](j=)}(hA``DRM_XE_OBSERVATION_OP_STREAM_OPEN`` Open an observation stream h](jC)}(h%``DRM_XE_OBSERVATION_OP_STREAM_OPEN``h]j)}(hjh]h!DRM_XE_OBSERVATION_OP_STREAM_OPEN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hOpen an observation streamh]hOpen an observation stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hC``DRM_XE_OBSERVATION_OP_ADD_CONFIG`` Add observation stream config h](jC)}(h$``DRM_XE_OBSERVATION_OP_ADD_CONFIG``h]j)}(hj9h]h DRM_XE_OBSERVATION_OP_ADD_CONFIG}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj3ubjT)}(hhh]h)}(hAdd observation stream configh]hAdd observation stream config}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjOubah}(h]h ]h"]h$]h&]uh1jShj3ubeh}(h]h ]h"]h$]h&]uh1j<hjNhMhjubj=)}(hH``DRM_XE_OBSERVATION_OP_REMOVE_CONFIG`` Remove observation stream configh](jC)}(h'``DRM_XE_OBSERVATION_OP_REMOVE_CONFIG``h]j)}(hjrh]h#DRM_XE_OBSERVATION_OP_REMOVE_CONFIG}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjlubjT)}(hhh]h)}(h Remove observation stream configh]h Remove observation stream config}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjlubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_xe_observation_param (C struct)c.drm_xe_observation_paramhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_observation_paramh]j)}(hstruct drm_xe_observation_paramh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_xe_observation_paramh]j')}(hjh]hdrm_xe_observation_param}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(h+Input of :c:type:`DRM_IOCTL_XE_OBSERVATION`h](h Input of }(hjhhhNhNubh)}(h":c:type:`DRM_IOCTL_XE_OBSERVATION`h]j)}(hjh]hDRM_IOCTL_XE_OBSERVATION}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jjsbc.drm_xe_observation_paramasbjQDRM_IOCTL_XE_OBSERVATIONuh1hhjhKhjubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjLjxjLjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_observation_param { __u64 extensions; __u64 observation_type; __u64 observation_op; __u64 param; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``observation_type`` observation stream type, of :c:type:`enum drm_xe_observation_type ` ``observation_op`` observation stream op, of :c:type:`enum drm_xe_observation_op ` ``param`` Pointer to actual stream paramsh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh:}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjPubj)}(hstruct drm_xe_observation_param { __u64 extensions; __u64 observation_type; __u64 observation_op; __u64 param; };h]hstruct drm_xe_observation_param { __u64 extensions; __u64 observation_type; __u64 observation_op; __u64 param; };}hjqsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjPubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjPubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjh]h extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hr``observation_type`` observation stream type, of :c:type:`enum drm_xe_observation_type ` h](jC)}(h``observation_type``h]j)}(hjh]hobservation_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h\observation stream type, of :c:type:`enum drm_xe_observation_type `h](hobservation stream type, of }(hjhhhNhNubh)}(h@:c:type:`enum drm_xe_observation_type `h]j)}(hjh]henum drm_xe_observation_type}(hjhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_observation_typeuh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hj``observation_op`` observation stream op, of :c:type:`enum drm_xe_observation_op ` h](jC)}(h``observation_op``h]j)}(hj2h]hobservation_op}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj,ubjT)}(hhh]h)}(hVobservation stream op, of :c:type:`enum drm_xe_observation_op `h](hobservation stream op, of }(hjKhhhNhNubh)}(h<:c:type:`enum drm_xe_observation_op `h]j)}(hjUh]henum drm_xe_observation_op}(hjWhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_observation_opuh1hhjGhMhjKubeh}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jShj,ubeh}(h]h ]h"]h$]h&]uh1j<hjGhMhjubj=)}(h)``param`` Pointer to actual stream paramsh](jC)}(h ``param``h]j)}(hjh]hparam}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hPointer to actual stream paramsh]hPointer to actual stream params}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hThe observation layer enables multiplexing observation streams of multiple types. The actual params for a particular stream operation are supplied via the **param** pointer (use __copy_from_user to get these params).h](hThe observation layer enables multiplexing observation streams of multiple types. The actual params for a particular stream operation are supplied via the }(hjhhhNhNubj)}(h **param**h]hparam}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh4 pointer (use __copy_from_user to get these params).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_xe_observation_ioctls (C enum)c.drm_xe_observation_ioctlshNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_observation_ioctlsh]j)}(henum drm_xe_observation_ioctlsh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj*hMubj!)}(hdrm_xe_observation_ioctlsh]j')}(hjh]hdrm_xe_observation_ioctls}(hj=hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj9ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhj*hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhj*hMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj*hMhjhhubjU)}(hhh]h)}(hObservation stream fd ioctlsh]hObservation stream fd ioctls}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj\hhubah}(h]h ]h"]h$]h&]uh1jThjhhhj*hMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjwjxjwjyjzj{uh1jhhhjhjhM ubj})}(hX**Constants** ``DRM_XE_OBSERVATION_IOCTL_ENABLE`` Enable data capture for an observation stream ``DRM_XE_OBSERVATION_IOCTL_DISABLE`` Disable data capture for an observation stream ``DRM_XE_OBSERVATION_IOCTL_CONFIG`` Change observation stream configuration ``DRM_XE_OBSERVATION_IOCTL_STATUS`` Return observation stream status ``DRM_XE_OBSERVATION_IOCTL_INFO`` Return observation stream infoh](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj{ubj8)}(hhh](j=)}(hR``DRM_XE_OBSERVATION_IOCTL_ENABLE`` Enable data capture for an observation stream h](jC)}(h#``DRM_XE_OBSERVATION_IOCTL_ENABLE``h]j)}(hjh]hDRM_XE_OBSERVATION_IOCTL_ENABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h-Enable data capture for an observation streamh]h-Enable data capture for an observation stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hT``DRM_XE_OBSERVATION_IOCTL_DISABLE`` Disable data capture for an observation stream h](jC)}(h$``DRM_XE_OBSERVATION_IOCTL_DISABLE``h]j)}(hjh]h DRM_XE_OBSERVATION_IOCTL_DISABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(h.Disable data capture for an observation streamh]h.Disable data capture for an observation stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hL``DRM_XE_OBSERVATION_IOCTL_CONFIG`` Change observation stream configuration h](jC)}(h#``DRM_XE_OBSERVATION_IOCTL_CONFIG``h]j)}(hjh]hDRM_XE_OBSERVATION_IOCTL_CONFIG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubjT)}(hhh]h)}(h'Change observation stream configurationh]h'Change observation stream configuration}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj'hMhjubj=)}(hE``DRM_XE_OBSERVATION_IOCTL_STATUS`` Return observation stream status h](jC)}(h#``DRM_XE_OBSERVATION_IOCTL_STATUS``h]j)}(hjKh]hDRM_XE_OBSERVATION_IOCTL_STATUS}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjEubjT)}(hhh]h)}(h Return observation stream statush]h Return observation stream status}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jShjEubeh}(h]h ]h"]h$]h&]uh1j<hj`hMhjubj=)}(h@``DRM_XE_OBSERVATION_IOCTL_INFO`` Return observation stream infoh](jC)}(h!``DRM_XE_OBSERVATION_IOCTL_INFO``h]j)}(hjh]hDRM_XE_OBSERVATION_IOCTL_INFO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj~ubjT)}(hhh]h)}(hReturn observation stream infoh]hReturn observation stream info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShj~ubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hdInformation exchanged between userspace and kernel for observation fd ioctls is stream type specifich]hdInformation exchanged between userspace and kernel for observation fd ioctls is stream type specific}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_oa_unit_type (C enum)c.drm_xe_oa_unit_typehNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_oa_unit_typeh]j)}(henum drm_xe_oa_unit_typeh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_xe_oa_unit_typeh]j')}(hjh]hdrm_xe_oa_unit_type}(hj%hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj!ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(h OA unit typesh]h OA unit types}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjDhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwj_jxj_jyjzj{uh1jhhhjhjhM ubj})}(hX**Constants** ``DRM_XE_OA_UNIT_TYPE_OAG`` OAG OA unit. OAR/OAC are considered sub-types of OAG. For OAR/OAC, use OAG. ``DRM_XE_OA_UNIT_TYPE_OAM`` OAM OA unit ``DRM_XE_OA_UNIT_TYPE_OAM_SAG`` OAM_SAG OA unit ``DRM_XE_OA_UNIT_TYPE_MERT`` MERT OA unith](h)}(h **Constants**h]j)}(hjih]h Constants}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjcubj8)}(hhh](j=)}(hh``DRM_XE_OA_UNIT_TYPE_OAG`` OAG OA unit. OAR/OAC are considered sub-types of OAG. For OAR/OAC, use OAG. h](jC)}(h``DRM_XE_OA_UNIT_TYPE_OAG``h]j)}(hjh]hDRM_XE_OA_UNIT_TYPE_OAG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubjT)}(hhh]h)}(hKOAG OA unit. OAR/OAC are considered sub-types of OAG. For OAR/OAC, use OAG.h]hKOAG OA unit. OAR/OAC are considered sub-types of OAG. For OAR/OAC, use OAG.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h(``DRM_XE_OA_UNIT_TYPE_OAM`` OAM OA unit h](jC)}(h``DRM_XE_OA_UNIT_TYPE_OAM``h]j)}(hjh]hDRM_XE_OA_UNIT_TYPE_OAM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjubjT)}(hhh]h)}(h OAM OA unith]h OAM OA unit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM hjubj=)}(h0``DRM_XE_OA_UNIT_TYPE_OAM_SAG`` OAM_SAG OA unit h](jC)}(h``DRM_XE_OA_UNIT_TYPE_OAM_SAG``h]j)}(hjh]hDRM_XE_OA_UNIT_TYPE_OAM_SAG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjubjT)}(hhh]h)}(hOAM_SAG OA unith]hOAM_SAG OA unit}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj hM hjubj=)}(h)``DRM_XE_OA_UNIT_TYPE_MERT`` MERT OA unith](jC)}(h``DRM_XE_OA_UNIT_TYPE_MERT``h]j)}(hj4 h]hDRM_XE_OA_UNIT_TYPE_MERT}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2 ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj. ubjT)}(hhh]h)}(h MERT OA unith]h MERT OA unit}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjJ ubah}(h]h ]h"]h$]h&]uh1jShj. ubeh}(h]h ]h"]h$]h&]uh1j<hjI hMhjubeh}(h]h ]h"]h$]h&]uh1j7hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_oa_unit (C struct)c.drm_xe_oa_unithNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_oa_unith]j)}(hstruct drm_xe_oa_unith](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj!)}(hdrm_xe_oa_unith]j')}(hj h]hdrm_xe_oa_unit}(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj hhhj hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj hhhj hMubah}(h]j ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj hMhj hhubjU)}(hhh]h)}(hdescribe OA unith]hdescribe OA unit}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jThj hhhj hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj jxj jyjzj{uh1jhhhjhjhM ubj})}(hXI**Definition**:: struct drm_xe_oa_unit { __u64 extensions; __u32 oa_unit_id; __u32 oa_unit_type; __u64 capabilities; #define DRM_XE_OA_CAPS_BASE (1 << 0); #define DRM_XE_OA_CAPS_SYNCS (1 << 1); #define DRM_XE_OA_CAPS_OA_BUFFER_SIZE (1 << 2); #define DRM_XE_OA_CAPS_WAIT_NUM_REPORTS (1 << 3); #define DRM_XE_OA_CAPS_OAM (1 << 4); #define DRM_XE_OA_CAPS_OA_UNIT_GT_ID (1 << 5); __u64 oa_timestamp_freq; __u16 gt_id; __u16 reserved1[3]; __u64 reserved[3]; __u64 num_engines; struct drm_xe_engine_class_instance eci[]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``oa_unit_id`` OA unit ID ``oa_unit_type`` OA unit type of :c:type:`enum drm_xe_oa_unit_type ` ``capabilities`` OA capabilities bit-mask ``oa_timestamp_freq`` OA timestamp freq ``gt_id`` gt id for this OA unit ``reserved1`` MBZ ``reserved`` MBZ ``num_engines`` number of engines in **eci** array ``eci`` engines attached to this OA unith](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubj)}(hXEstruct drm_xe_oa_unit { __u64 extensions; __u32 oa_unit_id; __u32 oa_unit_type; __u64 capabilities; #define DRM_XE_OA_CAPS_BASE (1 << 0); #define DRM_XE_OA_CAPS_SYNCS (1 << 1); #define DRM_XE_OA_CAPS_OA_BUFFER_SIZE (1 << 2); #define DRM_XE_OA_CAPS_WAIT_NUM_REPORTS (1 << 3); #define DRM_XE_OA_CAPS_OAM (1 << 4); #define DRM_XE_OA_CAPS_OA_UNIT_GT_ID (1 << 5); __u64 oa_timestamp_freq; __u16 gt_id; __u16 reserved1[3]; __u64 reserved[3]; __u64 num_engines; struct drm_xe_engine_class_instance eci[]; };h]hXEstruct drm_xe_oa_unit { __u64 extensions; __u32 oa_unit_id; __u32 oa_unit_type; __u64 capabilities; #define DRM_XE_OA_CAPS_BASE (1 << 0); #define DRM_XE_OA_CAPS_SYNCS (1 << 1); #define DRM_XE_OA_CAPS_OA_BUFFER_SIZE (1 << 2); #define DRM_XE_OA_CAPS_WAIT_NUM_REPORTS (1 << 3); #define DRM_XE_OA_CAPS_OAM (1 << 4); #define DRM_XE_OA_CAPS_OA_UNIT_GT_ID (1 << 5); __u64 oa_timestamp_freq; __u16 gt_id; __u16 reserved1[3]; __u64 reserved[3]; __u64 num_engines; struct drm_xe_engine_class_instance eci[]; };}hj !sbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj ubh)}(h **Members**h]j)}(hj!h]hMembers}(hj !hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM,hj ubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hj=!h]h extensions}(hj?!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;!ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj7!ubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hjV!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR!hMhjS!ubah}(h]h ]h"]h$]h&]uh1jShj7!ubeh}(h]h ]h"]h$]h&]uh1j<hjR!hMhj4!ubj=)}(h``oa_unit_id`` OA unit ID h](jC)}(h``oa_unit_id``h]j)}(hjv!h]h oa_unit_id}(hjx!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt!ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjp!ubjT)}(hhh]h)}(h OA unit IDh]h OA unit ID}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jShjp!ubeh}(h]h ]h"]h$]h&]uh1j<hj!hMhj4!ubj=)}(hZ``oa_unit_type`` OA unit type of :c:type:`enum drm_xe_oa_unit_type ` h](jC)}(h``oa_unit_type``h]j)}(hj!h]h oa_unit_type}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj!ubjT)}(hhh]h)}(hHOA unit type of :c:type:`enum drm_xe_oa_unit_type `h](hOA unit type of }(hj!hhhNhNubh)}(h8:c:type:`enum drm_xe_oa_unit_type `h]j)}(hj!h]henum drm_xe_oa_unit_type}(hj!hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_oa_unit_typeuh1hhj!hMhj!ubeh}(h]h ]h"]h$]h&]uh1hhj!hMhj!ubah}(h]h ]h"]h$]h&]uh1jShj!ubeh}(h]h ]h"]h$]h&]uh1j<hj!hMhj4!ubj=)}(h*``capabilities`` OA capabilities bit-mask h](jC)}(h``capabilities``h]j)}(hj"h]h capabilities}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj"ubjT)}(hhh]h)}(hOA capabilities bit-maskh]hOA capabilities bit-mask}(hj "hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM hj"ubah}(h]h ]h"]h$]h&]uh1jShj"ubeh}(h]h ]h"]h$]h&]uh1j<hj"hM hj4!ubj=)}(h(``oa_timestamp_freq`` OA timestamp freq h](jC)}(h``oa_timestamp_freq``h]j)}(hj@"h]hoa_timestamp_freq}(hjB"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>"ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM)hj:"ubjT)}(hhh]h)}(hOA timestamp freqh]hOA timestamp freq}(hjY"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU"hM)hjV"ubah}(h]h ]h"]h$]h&]uh1jShj:"ubeh}(h]h ]h"]h$]h&]uh1j<hjU"hM)hj4!ubj=)}(h!``gt_id`` gt id for this OA unit h](jC)}(h ``gt_id``h]j)}(hjy"h]hgt_id}(hj{"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw"ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM,hjs"ubjT)}(hhh]h)}(hgt id for this OA unith]hgt id for this OA unit}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM,hj"ubah}(h]h ]h"]h$]h&]uh1jShjs"ubeh}(h]h ]h"]h$]h&]uh1j<hj"hM,hj4!ubj=)}(h``reserved1`` MBZ h](jC)}(h ``reserved1``h]j)}(hj"h]h reserved1}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM/hj"ubjT)}(hhh]h)}(hMBZh]hMBZ}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hM/hj"ubah}(h]h ]h"]h$]h&]uh1jShj"ubeh}(h]h ]h"]h$]h&]uh1j<hj"hM/hj4!ubj=)}(h``reserved`` MBZ h](jC)}(h ``reserved``h]j)}(hj"h]hreserved}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM2hj"ubjT)}(hhh]h)}(hMBZh]hMBZ}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hM2hj#ubah}(h]h ]h"]h$]h&]uh1jShj"ubeh}(h]h ]h"]h$]h&]uh1j<hj#hM2hj4!ubj=)}(h3``num_engines`` number of engines in **eci** array h](jC)}(h``num_engines``h]j)}(hj$#h]h num_engines}(hj&#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"#ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM5hj#ubjT)}(hhh]h)}(h"number of engines in **eci** arrayh](hnumber of engines in }(hj=#hhhNhNubj)}(h**eci**h]heci}(hjE#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=#ubh array}(hj=#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9#hM5hj:#ubah}(h]h ]h"]h$]h&]uh1jShj#ubeh}(h]h ]h"]h$]h&]uh1j<hj9#hM5hj4!ubj=)}(h(``eci`` engines attached to this OA unith](jC)}(h``eci``h]j)}(hjo#h]heci}(hjq#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm#ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM7hji#ubjT)}(hhh]h)}(h engines attached to this OA unith]h engines attached to this OA unit}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM8hj#ubah}(h]h ]h"]h$]h&]uh1jShji#ubeh}(h]h ]h"]h$]h&]uh1j<hj#hM7hj4!ubeh}(h]h ]h"]h$]h&]uh1j7hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_xe_query_oa_units (C struct)c.drm_xe_query_oa_unitshNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_query_oa_unitsh]j)}(hstruct drm_xe_query_oa_unitsh](j)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM>ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hM>ubj!)}(hdrm_xe_query_oa_unitsh]j')}(hj#h]hdrm_xe_query_oa_units}(hj#hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj#ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj#hhhj#hM>ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj#hhhj#hM>ubah}(h]j#ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj#hM>hj#hhubjU)}(hhh]h)}(hdescribe OA unitsh]hdescribe OA units}(hj $hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM<hj$hhubah}(h]h ]h"]h$]h&]uh1jThj#hhhj#hM>ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj#$jxj#$jyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_query_oa_units { __u64 extensions; __u32 num_oa_units; __u32 pad; __u64 oa_units[]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``num_oa_units`` number of OA units returned in oau[] ``pad`` MBZ ``oa_units`` :c:type:`struct drm_xe_oa_unit ` array returned for this device. Written below as a u64 array to avoid problems with nested flexible arrays with some compilersh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj/$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+$ubh:}(hj+$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM@hj'$ubj)}(htstruct drm_xe_query_oa_units { __u64 extensions; __u32 num_oa_units; __u32 pad; __u64 oa_units[]; };h]htstruct drm_xe_query_oa_units { __u64 extensions; __u32 num_oa_units; __u32 pad; __u64 oa_units[]; };}hjH$sbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMBhj'$ubh)}(h **Members**h]j)}(hjY$h]hMembers}(hj[$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW$ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMIhj'$ubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjx$h]h extensions}(hjz$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv$ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMUhjr$ubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMUhj$ubah}(h]h ]h"]h$]h&]uh1jShjr$ubeh}(h]h ]h"]h$]h&]uh1j<hj$hMUhjo$ubj=)}(h6``num_oa_units`` number of OA units returned in oau[] h](jC)}(h``num_oa_units``h]j)}(hj$h]h num_oa_units}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMWhj$ubjT)}(hhh]h)}(h$number of OA units returned in oau[]h]h$number of OA units returned in oau[]}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMWhj$ubah}(h]h ]h"]h$]h&]uh1jShj$ubeh}(h]h ]h"]h$]h&]uh1j<hj$hMWhjo$ubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hj$h]hpad}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMYhj$ubjT)}(hhh]h)}(hMBZh]hMBZ}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMYhj%ubah}(h]h ]h"]h$]h&]uh1jShj$ubeh}(h]h ]h"]h$]h&]uh1j<hj$hMYhjo$ubj=)}(h``oa_units`` :c:type:`struct drm_xe_oa_unit ` array returned for this device. Written below as a u64 array to avoid problems with nested flexible arrays with some compilersh](jC)}(h ``oa_units``h]j)}(hj#%h]hoa_units}(hj%%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!%ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM]hj%ubjT)}(hhh]h)}(h:c:type:`struct drm_xe_oa_unit ` array returned for this device. Written below as a u64 array to avoid problems with nested flexible arrays with some compilersh](h)}(h0:c:type:`struct drm_xe_oa_unit `h]j)}(hjB%h]hstruct drm_xe_oa_unit}(hjD%hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj@%ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_oa_unituh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM\hj<%ubh array returned for this device. Written below as a u64 array to avoid problems with nested flexible arrays with some compilers}(hj<%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj_%hM\hj9%ubah}(h]h ]h"]h$]h&]uh1jShj%ubeh}(h]h ]h"]h$]h&]uh1j<hj8%hM]hjo$ubeh}(h]h ]h"]h$]h&]uh1j7hj'$ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMahjhhubh)}(hIf a query is made with a struct drm_xe_device_query where .query is equal to DRM_XE_DEVICE_QUERY_OA_UNITS, then the reply uses struct drm_xe_query_oa_units in .data.h]hIf a query is made with a struct drm_xe_device_query where .query is equal to DRM_XE_DEVICE_QUERY_OA_UNITS, then the reply uses struct drm_xe_query_oa_units in .data.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM=hjhhubh)}(h]OA unit properties for all OA units can be accessed using a code block such as the one below:h]h]OA unit properties for all OA units can be accessed using a code block such as the one below:}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMAhjhhubj)}(hXstruct drm_xe_query_oa_units *qoa; struct drm_xe_oa_unit *oau; u8 *poau; // malloc qoa and issue DRM_XE_DEVICE_QUERY_OA_UNITS. Then: poau = (u8 *)&qoa->oa_units[0]; for (int i = 0; i < qoa->num_oa_units; i++) { oau = (struct drm_xe_oa_unit *)poau; // Access 'struct drm_xe_oa_unit' fields here poau += sizeof(*oau) + oau->num_engines * sizeof(oau->eci[0]); }h]hXstruct drm_xe_query_oa_units *qoa; struct drm_xe_oa_unit *oau; u8 *poau; // malloc qoa and issue DRM_XE_DEVICE_QUERY_OA_UNITS. Then: poau = (u8 *)&qoa->oa_units[0]; for (int i = 0; i < qoa->num_oa_units; i++) { oau = (struct drm_xe_oa_unit *)poau; // Access 'struct drm_xe_oa_unit' fields here poau += sizeof(*oau) + oau->num_engines * sizeof(oau->eci[0]); }}hj%sbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMDhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_oa_format_type (C enum)c.drm_xe_oa_format_typehNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_oa_format_typeh]j)}(henum drm_xe_oa_format_typeh](j)}(hjh]henum}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj%hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMUubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj%hMUubj!)}(hdrm_xe_oa_format_typeh]j')}(hj%h]hdrm_xe_oa_format_type}(hj&hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj%ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj%hhhj%hMUubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj%hhhj%hMUubah}(h]j%ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj%hMUhj%hhubjU)}(hhh]h)}(h5OA format types as specified in PRM/Bspec 52198/60942h]h5OA format types as specified in PRM/Bspec 52198/60942}(hj$&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMchj!&hhubah}(h]h ]h"]h$]h&]uh1jThj%hhhj%hMUubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwj<&jxj<&jyjzj{uh1jhhhjhjhM ubj})}(hXF**Constants** ``DRM_XE_OA_FMT_TYPE_OAG`` OAG report format ``DRM_XE_OA_FMT_TYPE_OAR`` OAR report format ``DRM_XE_OA_FMT_TYPE_OAM`` OAM report format ``DRM_XE_OA_FMT_TYPE_OAC`` OAC report format ``DRM_XE_OA_FMT_TYPE_OAM_MPEC`` OAM SAMEDIA or OAM MPEC report format ``DRM_XE_OA_FMT_TYPE_PEC`` PEC report formath](h)}(h **Constants**h]j)}(hjF&h]h Constants}(hjH&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD&ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMghj@&ubj8)}(hhh](j=)}(h-``DRM_XE_OA_FMT_TYPE_OAG`` OAG report format h](jC)}(h``DRM_XE_OA_FMT_TYPE_OAG``h]j)}(hje&h]hDRM_XE_OA_FMT_TYPE_OAG}(hjg&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc&ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMjhj_&ubjT)}(hhh]h)}(hOAG report formath]hOAG report format}(hj~&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjz&hMjhj{&ubah}(h]h ]h"]h$]h&]uh1jShj_&ubeh}(h]h ]h"]h$]h&]uh1j<hjz&hMjhj\&ubj=)}(h-``DRM_XE_OA_FMT_TYPE_OAR`` OAR report format h](jC)}(h``DRM_XE_OA_FMT_TYPE_OAR``h]j)}(hj&h]hDRM_XE_OA_FMT_TYPE_OAR}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMmhj&ubjT)}(hhh]h)}(hOAR report formath]hOAR report format}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMmhj&ubah}(h]h ]h"]h$]h&]uh1jShj&ubeh}(h]h ]h"]h$]h&]uh1j<hj&hMmhj\&ubj=)}(h-``DRM_XE_OA_FMT_TYPE_OAM`` OAM report format h](jC)}(h``DRM_XE_OA_FMT_TYPE_OAM``h]j)}(hj&h]hDRM_XE_OA_FMT_TYPE_OAM}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMphj&ubjT)}(hhh]h)}(hOAM report formath]hOAM report format}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMphj&ubah}(h]h ]h"]h$]h&]uh1jShj&ubeh}(h]h ]h"]h$]h&]uh1j<hj&hMphj\&ubj=)}(h-``DRM_XE_OA_FMT_TYPE_OAC`` OAC report format h](jC)}(h``DRM_XE_OA_FMT_TYPE_OAC``h]j)}(hj'h]hDRM_XE_OA_FMT_TYPE_OAC}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMshj 'ubjT)}(hhh]h)}(hOAC report formath]hOAC report format}(hj)'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%'hMshj&'ubah}(h]h ]h"]h$]h&]uh1jShj 'ubeh}(h]h ]h"]h$]h&]uh1j<hj%'hMshj\&ubj=)}(hF``DRM_XE_OA_FMT_TYPE_OAM_MPEC`` OAM SAMEDIA or OAM MPEC report format h](jC)}(h``DRM_XE_OA_FMT_TYPE_OAM_MPEC``h]j)}(hjI'h]hDRM_XE_OA_FMT_TYPE_OAM_MPEC}(hjK'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG'ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMvhjC'ubjT)}(hhh]h)}(h%OAM SAMEDIA or OAM MPEC report formath]h%OAM SAMEDIA or OAM MPEC report format}(hjb'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^'hMvhj_'ubah}(h]h ]h"]h$]h&]uh1jShjC'ubeh}(h]h ]h"]h$]h&]uh1j<hj^'hMvhj\&ubj=)}(h,``DRM_XE_OA_FMT_TYPE_PEC`` PEC report formath](jC)}(h``DRM_XE_OA_FMT_TYPE_PEC``h]j)}(hj'h]hDRM_XE_OA_FMT_TYPE_PEC}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMxhj|'ubjT)}(hhh]h)}(hPEC report formath]hPEC report format}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMyhj'ubah}(h]h ]h"]h$]h&]uh1jShj|'ubeh}(h]h ]h"]h$]h&]uh1j<hj'hMxhj\&ubeh}(h]h ]h"]h$]h&]uh1j7hj@&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_oa_property_id (C enum)c.drm_xe_oa_property_idhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_oa_property_idh]j)}(henum drm_xe_oa_property_idh](j)}(hjh]henum}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM~ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj'hM~ubj!)}(hdrm_xe_oa_property_idh]j')}(hj'h]hdrm_xe_oa_property_id}(hj'hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj'ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj'hhhj'hM~ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj'hhhj'hM~ubah}(h]j'ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj'hM~hj'hhubjU)}(hhh]h)}(hOA stream property IDsh]hOA stream property IDs}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMvhj(hhubah}(h]h ]h"]h$]h&]uh1jThj'hhhj'hM~ubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwj6(jxj6(jyjzj{uh1jhhhjhjhM ubj})}(hX**Constants** ``DRM_XE_OA_PROPERTY_OA_UNIT_ID`` ID of the OA unit on which to open the OA stream, see oa_unit_id in :c:type:`struct drm_xe_oa_unit `. Defaults to 0 if not provided. ``DRM_XE_OA_PROPERTY_SAMPLE_OA`` A value of 1 requests inclusion of raw OA unit reports or stream samples in a global buffer attached to an OA unit. ``DRM_XE_OA_PROPERTY_OA_METRIC_SET`` OA metrics defining contents of OA reports, previously added via ``DRM_XE_OBSERVATION_OP_ADD_CONFIG``. ``DRM_XE_OA_PROPERTY_OA_FORMAT`` OA counter report format ``DRM_XE_OA_PROPERTY_OA_PERIOD_EXPONENT`` Requests periodic OA unit sampling with sampling frequency proportional to 2^(period_exponent + 1) ``DRM_XE_OA_PROPERTY_OA_DISABLED`` A value of 1 will open the OA stream in a DISABLED state (see ``DRM_XE_OBSERVATION_IOCTL_ENABLE``). ``DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID`` Open the stream for a specific exec_queue_id. OA queries can be executed on this exec queue. ``DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCE`` Optional engine instance to pass along with ``DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID`` or will default to 0. ``DRM_XE_OA_PROPERTY_NO_PREEMPT`` Allow preemption and timeslicing to be disabled for the stream exec queue. ``DRM_XE_OA_PROPERTY_NUM_SYNCS`` Number of syncs in the sync array specified in ``DRM_XE_OA_PROPERTY_SYNCS`` ``DRM_XE_OA_PROPERTY_SYNCS`` Pointer to :c:type:`struct drm_xe_sync ` array with array size specified via ``DRM_XE_OA_PROPERTY_NUM_SYNCS``. OA configuration will wait till input fences signal. Output fences will signal after the new OA configuration takes effect. For ``DRM_XE_SYNC_TYPE_USER_FENCE``, addr is a user pointer, similar to the VM bind case. ``DRM_XE_OA_PROPERTY_OA_BUFFER_SIZE`` Size of OA buffer to be allocated by the driver in bytes. Supported sizes are powers of 2 from 128 KiB to 128 MiB. When not specified, a 16 MiB OA buffer is allocated by default. ``DRM_XE_OA_PROPERTY_WAIT_NUM_REPORTS`` Number of reports to wait for before unblocking poll or readh](h)}(h **Constants**h]j)}(hj@(h]h Constants}(hjB(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>(ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMzhj:(ubj8)}(hhh](j=)}(h``DRM_XE_OA_PROPERTY_OA_UNIT_ID`` ID of the OA unit on which to open the OA stream, see oa_unit_id in :c:type:`struct drm_xe_oa_unit `. Defaults to 0 if not provided. h](jC)}(h!``DRM_XE_OA_PROPERTY_OA_UNIT_ID``h]j)}(hj_(h]hDRM_XE_OA_PROPERTY_OA_UNIT_ID}(hja(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj](ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjY(ubjT)}(hhh]h)}(hID of the OA unit on which to open the OA stream, see oa_unit_id in :c:type:`struct drm_xe_oa_unit `. Defaults to 0 if not provided.h](hDID of the OA unit on which to open the OA stream, see oa_unit_id in }(hjx(hhhNhNubh)}(h0:c:type:`struct drm_xe_oa_unit `h]j)}(hj(h]hstruct drm_xe_oa_unit}(hj(hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_oa_unituh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM}hjx(ubh . Defaults to 0 if not provided.}(hjx(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hM}hju(ubah}(h]h ]h"]h$]h&]uh1jShjY(ubeh}(h]h ]h"]h$]h&]uh1j<hjt(hMhjV(ubj=)}(h``DRM_XE_OA_PROPERTY_SAMPLE_OA`` A value of 1 requests inclusion of raw OA unit reports or stream samples in a global buffer attached to an OA unit. h](jC)}(h ``DRM_XE_OA_PROPERTY_SAMPLE_OA``h]j)}(hj(h]hDRM_XE_OA_PROPERTY_SAMPLE_OA}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj(ubjT)}(hhh]h)}(hsA value of 1 requests inclusion of raw OA unit reports or stream samples in a global buffer attached to an OA unit.h]hsA value of 1 requests inclusion of raw OA unit reports or stream samples in a global buffer attached to an OA unit.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj(ubah}(h]h ]h"]h$]h&]uh1jShj(ubeh}(h]h ]h"]h$]h&]uh1j<hj(hMhjV(ubj=)}(h``DRM_XE_OA_PROPERTY_OA_METRIC_SET`` OA metrics defining contents of OA reports, previously added via ``DRM_XE_OBSERVATION_OP_ADD_CONFIG``. h](jC)}(h$``DRM_XE_OA_PROPERTY_OA_METRIC_SET``h]j)}(hj(h]h DRM_XE_OA_PROPERTY_OA_METRIC_SET}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj(ubjT)}(hhh]h)}(hfOA metrics defining contents of OA reports, previously added via ``DRM_XE_OBSERVATION_OP_ADD_CONFIG``.h](hAOA metrics defining contents of OA reports, previously added via }(hj)hhhNhNubj)}(h$``DRM_XE_OBSERVATION_OP_ADD_CONFIG``h]h DRM_XE_OBSERVATION_OP_ADD_CONFIG}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj )ubah}(h]h ]h"]h$]h&]uh1jShj(ubeh}(h]h ]h"]h$]h&]uh1j<hj )hMhjV(ubj=)}(h:``DRM_XE_OA_PROPERTY_OA_FORMAT`` OA counter report format h](jC)}(h ``DRM_XE_OA_PROPERTY_OA_FORMAT``h]j)}(hjB)h]hDRM_XE_OA_PROPERTY_OA_FORMAT}(hjD)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@)ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj<)ubjT)}(hhh]h)}(hOA counter report formath]hOA counter report format}(hj[)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW)hMhjX)ubah}(h]h ]h"]h$]h&]uh1jShj<)ubeh}(h]h ]h"]h$]h&]uh1j<hjW)hMhjV(ubj=)}(h``DRM_XE_OA_PROPERTY_OA_PERIOD_EXPONENT`` Requests periodic OA unit sampling with sampling frequency proportional to 2^(period_exponent + 1) h](jC)}(h)``DRM_XE_OA_PROPERTY_OA_PERIOD_EXPONENT``h]j)}(hj{)h]h%DRM_XE_OA_PROPERTY_OA_PERIOD_EXPONENT}(hj})hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy)ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhju)ubjT)}(hhh]h)}(hbRequests periodic OA unit sampling with sampling frequency proportional to 2^(period_exponent + 1)h]hbRequests periodic OA unit sampling with sampling frequency proportional to 2^(period_exponent + 1)}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj)ubah}(h]h ]h"]h$]h&]uh1jShju)ubeh}(h]h ]h"]h$]h&]uh1j<hj)hMhjV(ubj=)}(h``DRM_XE_OA_PROPERTY_OA_DISABLED`` A value of 1 will open the OA stream in a DISABLED state (see ``DRM_XE_OBSERVATION_IOCTL_ENABLE``). h](jC)}(h"``DRM_XE_OA_PROPERTY_OA_DISABLED``h]j)}(hj)h]hDRM_XE_OA_PROPERTY_OA_DISABLED}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj)ubjT)}(hhh]h)}(hcA value of 1 will open the OA stream in a DISABLED state (see ``DRM_XE_OBSERVATION_IOCTL_ENABLE``).h](h>A value of 1 will open the OA stream in a DISABLED state (see }(hj)hhhNhNubj)}(h#``DRM_XE_OBSERVATION_IOCTL_ENABLE``h]hDRM_XE_OBSERVATION_IOCTL_ENABLE}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh).}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj)ubah}(h]h ]h"]h$]h&]uh1jShj)ubeh}(h]h ]h"]h$]h&]uh1j<hj)hMhjV(ubj=)}(h``DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID`` Open the stream for a specific exec_queue_id. OA queries can be executed on this exec queue. h](jC)}(h$``DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID``h]j)}(hj*h]h DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj)ubjT)}(hhh]h)}(h\Open the stream for a specific exec_queue_id. OA queries can be executed on this exec queue.h]h\Open the stream for a specific exec_queue_id. OA queries can be executed on this exec queue.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj*ubah}(h]h ]h"]h$]h&]uh1jShj)ubeh}(h]h ]h"]h$]h&]uh1j<hj*hMhjV(ubj=)}(h``DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCE`` Optional engine instance to pass along with ``DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID`` or will default to 0. h](jC)}(h)``DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCE``h]j)}(hj;*h]h%DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCE}(hj=*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9*ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj5*ubjT)}(hhh]h)}(hfOptional engine instance to pass along with ``DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID`` or will default to 0.h](h,Optional engine instance to pass along with }(hjT*hhhNhNubj)}(h$``DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID``h]h DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID}(hj\*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT*ubh or will default to 0.}(hjT*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjQ*ubah}(h]h ]h"]h$]h&]uh1jShj5*ubeh}(h]h ]h"]h$]h&]uh1j<hjP*hMhjV(ubj=)}(hm``DRM_XE_OA_PROPERTY_NO_PREEMPT`` Allow preemption and timeslicing to be disabled for the stream exec queue. h](jC)}(h!``DRM_XE_OA_PROPERTY_NO_PREEMPT``h]j)}(hj*h]hDRM_XE_OA_PROPERTY_NO_PREEMPT}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj*ubjT)}(hhh]h)}(hJAllow preemption and timeslicing to be disabled for the stream exec queue.h]hJAllow preemption and timeslicing to be disabled for the stream exec queue.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj*ubah}(h]h ]h"]h$]h&]uh1jShj*ubeh}(h]h ]h"]h$]h&]uh1j<hj*hMhjV(ubj=)}(hm``DRM_XE_OA_PROPERTY_NUM_SYNCS`` Number of syncs in the sync array specified in ``DRM_XE_OA_PROPERTY_SYNCS`` h](jC)}(h ``DRM_XE_OA_PROPERTY_NUM_SYNCS``h]j)}(hj*h]hDRM_XE_OA_PROPERTY_NUM_SYNCS}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj*ubjT)}(hhh]h)}(hKNumber of syncs in the sync array specified in ``DRM_XE_OA_PROPERTY_SYNCS``h](h/Number of syncs in the sync array specified in }(hj*hhhNhNubj)}(h``DRM_XE_OA_PROPERTY_SYNCS``h]hDRM_XE_OA_PROPERTY_SYNCS}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj*ubah}(h]h ]h"]h$]h&]uh1jShj*ubeh}(h]h ]h"]h$]h&]uh1j<hj*hMhjV(ubj=)}(hXo``DRM_XE_OA_PROPERTY_SYNCS`` Pointer to :c:type:`struct drm_xe_sync ` array with array size specified via ``DRM_XE_OA_PROPERTY_NUM_SYNCS``. OA configuration will wait till input fences signal. Output fences will signal after the new OA configuration takes effect. For ``DRM_XE_SYNC_TYPE_USER_FENCE``, addr is a user pointer, similar to the VM bind case. h](jC)}(h``DRM_XE_OA_PROPERTY_SYNCS``h]j)}(hj +h]hDRM_XE_OA_PROPERTY_SYNCS}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj+ubjT)}(hhh]h)}(hXQPointer to :c:type:`struct drm_xe_sync ` array with array size specified via ``DRM_XE_OA_PROPERTY_NUM_SYNCS``. OA configuration will wait till input fences signal. Output fences will signal after the new OA configuration takes effect. For ``DRM_XE_SYNC_TYPE_USER_FENCE``, addr is a user pointer, similar to the VM bind case.h](h Pointer to }(hj"+hhhNhNubh)}(h*:c:type:`struct drm_xe_sync `h]j)}(hj,+h]hstruct drm_xe_sync}(hj.+hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj*+ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQ drm_xe_syncuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj"+ubh% array with array size specified via }(hj"+hhhNhNubj)}(h ``DRM_XE_OA_PROPERTY_NUM_SYNCS``h]hDRM_XE_OA_PROPERTY_NUM_SYNCS}(hjN+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"+ubh. OA configuration will wait till input fences signal. Output fences will signal after the new OA configuration takes effect. For }(hj"+hhhNhNubj)}(h``DRM_XE_SYNC_TYPE_USER_FENCE``h]hDRM_XE_SYNC_TYPE_USER_FENCE}(hj`+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"+ubh6, addr is a user pointer, similar to the VM bind case.}(hj"+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjI+hMhj+ubah}(h]h ]h"]h$]h&]uh1jShj+ubeh}(h]h ]h"]h$]h&]uh1j<hj+hMhjV(ubj=)}(h``DRM_XE_OA_PROPERTY_OA_BUFFER_SIZE`` Size of OA buffer to be allocated by the driver in bytes. Supported sizes are powers of 2 from 128 KiB to 128 MiB. When not specified, a 16 MiB OA buffer is allocated by default. h](jC)}(h%``DRM_XE_OA_PROPERTY_OA_BUFFER_SIZE``h]j)}(hj+h]h!DRM_XE_OA_PROPERTY_OA_BUFFER_SIZE}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj+ubjT)}(hhh]h)}(hSize of OA buffer to be allocated by the driver in bytes. Supported sizes are powers of 2 from 128 KiB to 128 MiB. When not specified, a 16 MiB OA buffer is allocated by default.h]hSize of OA buffer to be allocated by the driver in bytes. Supported sizes are powers of 2 from 128 KiB to 128 MiB. When not specified, a 16 MiB OA buffer is allocated by default.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj+ubah}(h]h ]h"]h$]h&]uh1jShj+ubeh}(h]h ]h"]h$]h&]uh1j<hj+hMhjV(ubj=)}(hd``DRM_XE_OA_PROPERTY_WAIT_NUM_REPORTS`` Number of reports to wait for before unblocking poll or readh](jC)}(h'``DRM_XE_OA_PROPERTY_WAIT_NUM_REPORTS``h]j)}(hj+h]h#DRM_XE_OA_PROPERTY_WAIT_NUM_REPORTS}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj+ubjT)}(hhh]h)}(h` structs, with property values from :c:type:`enum drm_xe_oa_property_id ` and :c:type:`struct drm_xe_user_extension ` base.name set to ``DRM_XE_OA_EXTENSION_SET_PROPERTY``. The param field in :c:type:`struct drm_xe_observation_param ` points to the first :c:type:`struct drm_xe_ext_set_property ` struct.h](h*Stream params are specified as a chain of }(hj,hhhNhNubh)}(hB:c:type:`struct drm_xe_ext_set_property `h]j)}(hj&,h]hstruct drm_xe_ext_set_property}(hj(,hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj$,ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_ext_set_propertyuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMwhj,ubh$ structs, with property values from }(hj,hhhNhNubh)}(h<:c:type:`enum drm_xe_oa_property_id `h]j)}(hjJ,h]henum drm_xe_oa_property_id}(hjL,hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjH,ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_oa_property_iduh1hhjC,hMwhj,ubh and }(hj,hhhNhNubh)}(h>:c:type:`struct drm_xe_user_extension `h]j)}(hjm,h]hstruct drm_xe_user_extension}(hjo,hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjk,ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_user_extensionuh1hhjC,hMwhj,ubh base.name set to }(hj,hhhNhNubj)}(h$``DRM_XE_OA_EXTENSION_SET_PROPERTY``h]h DRM_XE_OA_EXTENSION_SET_PROPERTY}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh. The param field in }(hj,hhhNhNubh)}(hD:c:type:`struct drm_xe_observation_param `h]j)}(hj,h]hstruct drm_xe_observation_param}(hj,hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_observation_paramuh1hhjC,hMwhj,ubh points to the first }(hj,hhhNhNubh)}(hB:c:type:`struct drm_xe_ext_set_property `h]j)}(hj,h]hstruct drm_xe_ext_set_property}(hj,hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_ext_set_propertyuh1hhjC,hMwhj,ubh struct.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjC,hMwhjhhubh)}(hExactly the same mechanism is also used for stream reconfiguration using the ``DRM_XE_OBSERVATION_IOCTL_CONFIG`` observation stream fd ioctl, though only a subset of properties below can be specified for stream reconfiguration.h](hMExactly the same mechanism is also used for stream reconfiguration using the }(hj,hhhNhNubj)}(h#``DRM_XE_OBSERVATION_IOCTL_CONFIG``h]hDRM_XE_OBSERVATION_IOCTL_CONFIG}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubhs observation stream fd ioctl, though only a subset of properties below can be specified for stream reconfiguration.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM}hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_oa_config (C struct)c.drm_xe_oa_confighNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_oa_configh]j)}(hstruct drm_xe_oa_configh](j)}(hjh]hstruct}(hj&-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj"-hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hj4-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"-hhhj3-hMubj!)}(hdrm_xe_oa_configh]j')}(hj -h]hdrm_xe_oa_config}(hjF-hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjB-ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj"-hhhj3-hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj-hhhj3-hMubah}(h]j-ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj3-hMhj-hhubjU)}(hhh]h)}(hOA metric configurationh]hOA metric configuration}(hjh-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhje-hhubah}(h]h ]h"]h$]h&]uh1jThj-hhhj3-hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj-jxj-jyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_oa_config { __u64 extensions; char uuid[36]; __u32 n_regs; __u64 regs_ptr; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``uuid`` String formatted like "``08x-````04x-````04x-````04x-````012x``" ``n_regs`` Number of regs in **regs_ptr** ``regs_ptr`` Pointer to (register address, value) pairs for OA config registers. Expected length of buffer is: (2 * sizeof(u32) * **n_regs**).h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh:}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj-ubj)}(hkstruct drm_xe_oa_config { __u64 extensions; char uuid[36]; __u32 n_regs; __u64 regs_ptr; };h]hkstruct drm_xe_oa_config { __u64 extensions; char uuid[36]; __u32 n_regs; __u64 regs_ptr; };}hj-sbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj-ubh)}(h **Members**h]j)}(hj-h]hMembers}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj-ubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hj-h]h extensions}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj-ubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jShj-ubeh}(h]h ]h"]h$]h&]uh1j<hj-hMhj-ubj=)}(hJ``uuid`` String formatted like "``08x-````04x-````04x-````04x-````012x``" h](jC)}(h``uuid``h]j)}(hj.h]huuid}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj .ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj.ubjT)}(hhh]h)}(h@String formatted like "``08x-````04x-````04x-````04x-````012x``"h](hString formatted like “}(hj'.hhhNhNubj)}(h(``08x-````04x-````04x-````04x-````012x``h]h$08x-````04x-````04x-````04x-````012x}(hj/.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'.ubh”}(hj'.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#.hMhj$.ubah}(h]h ]h"]h$]h&]uh1jShj.ubeh}(h]h ]h"]h$]h&]uh1j<hj#.hMhj-ubj=)}(h*``n_regs`` Number of regs in **regs_ptr** h](jC)}(h ``n_regs``h]j)}(hjY.h]hn_regs}(hj[.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW.ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjS.ubjT)}(hhh]h)}(hNumber of regs in **regs_ptr**h](hNumber of regs in }(hjr.hhhNhNubj)}(h **regs_ptr**h]hregs_ptr}(hjz.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr.ubeh}(h]h ]h"]h$]h&]uh1hhjn.hMhjo.ubah}(h]h ]h"]h$]h&]uh1jShjS.ubeh}(h]h ]h"]h$]h&]uh1j<hjn.hMhj-ubj=)}(h``regs_ptr`` Pointer to (register address, value) pairs for OA config registers. Expected length of buffer is: (2 * sizeof(u32) * **n_regs**).h](jC)}(h ``regs_ptr``h]j)}(hj.h]hregs_ptr}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj.ubjT)}(hhh]h)}(hPointer to (register address, value) pairs for OA config registers. Expected length of buffer is: (2 * sizeof(u32) * **n_regs**).h](huPointer to (register address, value) pairs for OA config registers. Expected length of buffer is: (2 * sizeof(u32) * }(hj.hhhNhNubj)}(h **n_regs**h]hn_regs}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh).}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jShj.ubeh}(h]h ]h"]h$]h&]uh1j<hj.hMhj-ubeh}(h]h ]h"]h$]h&]uh1j7hj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubh)}(hMultiple OA configs can be added using ``DRM_XE_OBSERVATION_OP_ADD_CONFIG``. A particular config can be specified when opening an OA stream using ``DRM_XE_OA_PROPERTY_OA_METRIC_SET`` property.h](h'Multiple OA configs can be added using }(hj /hhhNhNubj)}(h$``DRM_XE_OBSERVATION_OP_ADD_CONFIG``h]h DRM_XE_OBSERVATION_OP_ADD_CONFIG}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj /ubhG. A particular config can be specified when opening an OA stream using }(hj /hhhNhNubj)}(h$``DRM_XE_OA_PROPERTY_OA_METRIC_SET``h]h DRM_XE_OA_PROPERTY_OA_METRIC_SET}(hj$/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj /ubh property.}(hj /hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_xe_oa_stream_status (C struct)c.drm_xe_oa_stream_statushNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_oa_stream_statush]j)}(hstruct drm_xe_oa_stream_statush](j)}(hjh]hstruct}(hjV/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjR/hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjd/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR/hhhjc/hMubj!)}(hdrm_xe_oa_stream_statush]j')}(hjP/h]hdrm_xe_oa_stream_status}(hjv/hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjr/ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjR/hhhjc/hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjN/hhhjc/hMubah}(h]jI/ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjc/hMhjK/hhubjU)}(hhh]h)}(hOA stream status returned from ``DRM_XE_OBSERVATION_IOCTL_STATUS`` observation stream fd ioctl. Userspace can call the ioctl to query stream status in response to EIO errno from observation fd read().h](hOA stream status returned from }(hj/hhhNhNubj)}(h#``DRM_XE_OBSERVATION_IOCTL_STATUS``h]hDRM_XE_OBSERVATION_IOCTL_STATUS}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh observation stream fd ioctl. Userspace can call the ioctl to query stream status in response to EIO errno from observation fd read().}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj/hhubah}(h]h ]h"]h$]h&]uh1jThjK/hhhjc/hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj/jxj/jyjzj{uh1jhhhjhjhM ubj})}(hX **Definition**:: struct drm_xe_oa_stream_status { __u64 extensions; __u64 oa_status; #define DRM_XE_OASTATUS_MMIO_TRG_Q_FULL (1 << 3); #define DRM_XE_OASTATUS_COUNTER_OVERFLOW (1 << 2); #define DRM_XE_OASTATUS_BUFFER_OVERFLOW (1 << 1); #define DRM_XE_OASTATUS_REPORT_LOST (1 << 0); __u64 reserved[3]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``oa_status`` OA stream status (see Bspec 46717/61226) ``reserved`` reserved for future useh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubh:}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj/ubj)}(hXMstruct drm_xe_oa_stream_status { __u64 extensions; __u64 oa_status; #define DRM_XE_OASTATUS_MMIO_TRG_Q_FULL (1 << 3); #define DRM_XE_OASTATUS_COUNTER_OVERFLOW (1 << 2); #define DRM_XE_OASTATUS_BUFFER_OVERFLOW (1 << 1); #define DRM_XE_OASTATUS_REPORT_LOST (1 << 0); __u64 reserved[3]; };h]hXMstruct drm_xe_oa_stream_status { __u64 extensions; __u64 oa_status; #define DRM_XE_OASTATUS_MMIO_TRG_Q_FULL (1 << 3); #define DRM_XE_OASTATUS_COUNTER_OVERFLOW (1 << 2); #define DRM_XE_OASTATUS_BUFFER_OVERFLOW (1 << 1); #define DRM_XE_OASTATUS_REPORT_LOST (1 << 0); __u64 reserved[3]; };}hj/sbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj/ubh)}(h **Members**h]j)}(hj/h]hMembers}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj/ubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hj0h]h extensions}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj0ubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hj00hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,0hMhj-0ubah}(h]h ]h"]h$]h&]uh1jShj0ubeh}(h]h ]h"]h$]h&]uh1j<hj,0hMhj0ubj=)}(h7``oa_status`` OA stream status (see Bspec 46717/61226) h](jC)}(h ``oa_status``h]j)}(hjP0h]h oa_status}(hjR0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN0ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjJ0ubjT)}(hhh]h)}(h(OA stream status (see Bspec 46717/61226)h]h(OA stream status (see Bspec 46717/61226)}(hji0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje0hMhjf0ubah}(h]h ]h"]h$]h&]uh1jShjJ0ubeh}(h]h ]h"]h$]h&]uh1j<hje0hMhj0ubj=)}(h$``reserved`` reserved for future useh](jC)}(h ``reserved``h]j)}(hj0h]hreserved}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj0ubjT)}(hhh]h)}(hreserved for future useh]hreserved for future use}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj0ubah}(h]h ]h"]h$]h&]uh1jShj0ubeh}(h]h ]h"]h$]h&]uh1j<hj0hM hj0ubeh}(h]h ]h"]h$]h&]uh1j7hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_xe_oa_stream_info (C struct)c.drm_xe_oa_stream_infohNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_oa_stream_infoh]j)}(hstruct drm_xe_oa_stream_infoh](j)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj0hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj0hMubj!)}(hdrm_xe_oa_stream_infoh]j')}(hj0h]hdrm_xe_oa_stream_info}(hj1hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj0ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj0hhhj0hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj0hhhj0hMubah}(h]j0ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj0hMhj0hhubjU)}(hhh]h)}(hZOA stream info returned from ``DRM_XE_OBSERVATION_IOCTL_INFO`` observation stream fd ioctlh](hOA stream info returned from }(hj%1hhhNhNubj)}(h!``DRM_XE_OBSERVATION_IOCTL_INFO``h]hDRM_XE_OBSERVATION_IOCTL_INFO}(hj-1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%1ubh observation stream fd ioctl}(hj%1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj"1hhubah}(h]h ]h"]h$]h&]uh1jThj0hhhj0hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjO1jxjO1jyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_oa_stream_info { __u64 extensions; __u64 oa_buf_size; __u64 reserved[3]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``oa_buf_size`` OA buffer size ``reserved`` reserved for future useh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj[1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW1ubh:}(hjW1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjS1ubj)}(hestruct drm_xe_oa_stream_info { __u64 extensions; __u64 oa_buf_size; __u64 reserved[3]; };h]hestruct drm_xe_oa_stream_info { __u64 extensions; __u64 oa_buf_size; __u64 reserved[3]; };}hjt1sbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjS1ubh)}(h **Members**h]j)}(hj1h]hMembers}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjS1ubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hj1h]h extensions}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj1ubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jShj1ubeh}(h]h ]h"]h$]h&]uh1j<hj1hMhj1ubj=)}(h``oa_buf_size`` OA buffer size h](jC)}(h``oa_buf_size``h]j)}(hj1h]h oa_buf_size}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj1ubjT)}(hhh]h)}(hOA buffer sizeh]hOA buffer size}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jShj1ubeh}(h]h ]h"]h$]h&]uh1j<hj1hMhj1ubj=)}(h$``reserved`` reserved for future useh](jC)}(h ``reserved``h]j)}(hj2h]hreserved}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj2ubjT)}(hhh]h)}(hreserved for future useh]hreserved for future use}(hj/2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj,2ubah}(h]h ]h"]h$]h&]uh1jShj2ubeh}(h]h ]h"]h$]h&]uh1j<hj+2hMhj1ubeh}(h]h ]h"]h$]h&]uh1j7hjS1ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_xe_pxp_session_type (C enum)c.drm_xe_pxp_session_typehNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_pxp_session_typeh]j)}(henum drm_xe_pxp_session_typeh](j)}(hjh]henum}(hjp2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjl2hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM!ubj)}(h h]h }(hj~2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl2hhhj}2hM!ubj!)}(hdrm_xe_pxp_session_typeh]j')}(hjj2h]hdrm_xe_pxp_session_type}(hj2hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj2ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjl2hhhj}2hM!ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjh2hhhj}2hM!ubah}(h]jc2ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj}2hM!hje2hhubjU)}(hhh]h)}(hSupported PXP session types.h]hSupported PXP session types.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj2hhubah}(h]h ]h"]h$]h&]uh1jThje2hhhj}2hM!ubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwj2jxj2jyjzj{uh1jhhhjhjhM ubj})}(h**Constants** ``DRM_XE_PXP_TYPE_NONE`` PXP not used ``DRM_XE_PXP_TYPE_HWDRM`` HWDRM sessions are used for content that ends up on the display.h](h)}(h **Constants**h]j)}(hj2h]h Constants}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM#hj2ubj8)}(hhh](j=)}(h&``DRM_XE_PXP_TYPE_NONE`` PXP not used h](jC)}(h``DRM_XE_PXP_TYPE_NONE``h]j)}(hj2h]hDRM_XE_PXP_TYPE_NONE}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM&hj2ubjT)}(hhh]h)}(h PXP not usedh]h PXP not used}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM&hj 3ubah}(h]h ]h"]h$]h&]uh1jShj2ubeh}(h]h ]h"]h$]h&]uh1j<hj3hM&hj2ubj=)}(hZ``DRM_XE_PXP_TYPE_HWDRM`` HWDRM sessions are used for content that ends up on the display.h](jC)}(h``DRM_XE_PXP_TYPE_HWDRM``h]j)}(hj,3h]hDRM_XE_PXP_TYPE_HWDRM}(hj.3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*3ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM)hj&3ubjT)}(hhh]h)}(h@HWDRM sessions are used for content that ends up on the display.h]h@HWDRM sessions are used for content that ends up on the display.}(hjE3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA3hM)hjB3ubah}(h]h ]h"]h$]h&]uh1jShj&3ubeh}(h]h ]h"]h$]h&]uh1j<hjA3hM)hj2ubeh}(h]h ]h"]h$]h&]uh1j7hj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjn3h]h Description}(hjp3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl3ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM,hjhhubh)}(hWe currently only support HWDRM sessions, which are used for protected content that ends up being displayed, but the HW supports multiple types, so we might extend support in the future.h]hWe currently only support HWDRM sessions, which are used for protected content that ends up being displayed, but the HW supports multiple types, so we might extend support in the future.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_xe_eu_stall_property_id (C enum)c.drm_xe_eu_stall_property_idhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_eu_stall_property_idh]j)}(h enum drm_xe_eu_stall_property_idh](j)}(hjh]henum}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj3hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM'ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hM'ubj!)}(hdrm_xe_eu_stall_property_idh]j')}(hj3h]hdrm_xe_eu_stall_property_id}(hj3hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj3ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj3hhhj3hM'ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj3hhhj3hM'ubah}(h]j3ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj3hM'hj3hhubjU)}(hhh]h)}(h%EU stall sampling input property ids.h]h%EU stall sampling input property ids.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM3hj3hhubah}(h]h ]h"]h$]h&]uh1jThj3hhhj3hM'ubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwj4jxj4jyjzj{uh1jhhhjhjhM ubj})}(hX**Constants** ``DRM_XE_EU_STALL_PROP_GT_ID`` gt_id of the GT on which EU stall data will be captured. ``DRM_XE_EU_STALL_PROP_SAMPLE_RATE`` Sampling rate in GPU cycles from sampling_rates in :c:type:`struct drm_xe_query_eu_stall ` ``DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS`` Minimum number of EU stall data reports to be present in the kernel buffer before unblocking a blocked poll or read.h](h)}(h **Constants**h]j)}(hj4h]h Constants}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM7hj 4ubj8)}(hhh](j=)}(hX``DRM_XE_EU_STALL_PROP_GT_ID`` gt_id of the GT on which EU stall data will be captured. h](jC)}(h``DRM_XE_EU_STALL_PROP_GT_ID``h]j)}(hj/4h]hDRM_XE_EU_STALL_PROP_GT_ID}(hj14hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-4ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM;hj)4ubjT)}(hhh]h)}(h8gt_id of the GT on which EU stall data will be captured.h]h8gt_id of the GT on which EU stall data will be captured.}(hjH4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM:hjE4ubah}(h]h ]h"]h$]h&]uh1jShj)4ubeh}(h]h ]h"]h$]h&]uh1j<hjD4hM;hj&4ubj=)}(h``DRM_XE_EU_STALL_PROP_SAMPLE_RATE`` Sampling rate in GPU cycles from sampling_rates in :c:type:`struct drm_xe_query_eu_stall ` h](jC)}(h$``DRM_XE_EU_STALL_PROP_SAMPLE_RATE``h]j)}(hji4h]h DRM_XE_EU_STALL_PROP_SAMPLE_RATE}(hjk4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg4ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM?hjc4ubjT)}(hhh]h)}(hqSampling rate in GPU cycles from sampling_rates in :c:type:`struct drm_xe_query_eu_stall `h](h3Sampling rate in GPU cycles from sampling_rates in }(hj4hhhNhNubh)}(h>:c:type:`struct drm_xe_query_eu_stall `h]j)}(hj4h]hstruct drm_xe_query_eu_stall}(hj4hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_query_eu_stalluh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM>hj4ubeh}(h]h ]h"]h$]h&]uh1hhj4hM>hj4ubah}(h]h ]h"]h$]h&]uh1jShjc4ubeh}(h]h ]h"]h$]h&]uh1j<hj~4hM?hj&4ubj=)}(h``DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS`` Minimum number of EU stall data reports to be present in the kernel buffer before unblocking a blocked poll or read.h](jC)}(h)``DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS``h]j)}(hj4h]h%DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMChj4ubjT)}(hhh]h)}(htMinimum number of EU stall data reports to be present in the kernel buffer before unblocking a blocked poll or read.h]htMinimum number of EU stall data reports to be present in the kernel buffer before unblocking a blocked poll or read.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMBhj4ubah}(h]h ]h"]h$]h&]uh1jShj4ubeh}(h]h ]h"]h$]h&]uh1j<hj4hMChj&4ubeh}(h]h ]h"]h$]h&]uh1j7hj 4ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMFhjhhubh)}(hXThese properties are passed to the driver at open as a chain of :c:type:`struct drm_xe_ext_set_property ` structures with property set to these properties' enums and value set to the corresponding values of these properties. :c:type:`struct drm_xe_user_extension ` base.name should be set to ``DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY``.h](h@These properties are passed to the driver at open as a chain of }(hj5hhhNhNubh)}(hB:c:type:`struct drm_xe_ext_set_property `h]j)}(hj%5h]hstruct drm_xe_ext_set_property}(hj'5hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj#5ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_ext_set_propertyuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM4hj5ubhz structures with property set to these properties’ enums and value set to the corresponding values of these properties. }(hj5hhhNhNubh)}(h>:c:type:`struct drm_xe_user_extension `h]j)}(hjI5h]hstruct drm_xe_user_extension}(hjK5hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjG5ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_user_extensionuh1hhjB5hM4hj5ubh base.name should be set to }(hj5hhhNhNubj)}(h*``DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY``h]h&DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY}(hjj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjB5hM4hjhhubh)}(hWith the file descriptor obtained from open, user space must enable the EU stall stream fd with ``DRM_XE_OBSERVATION_IOCTL_ENABLE`` before calling read(). EIO errno from read() indicates HW dropped data due to full buffer.h](h`With the file descriptor obtained from open, user space must enable the EU stall stream fd with }(hj5hhhNhNubj)}(h#``DRM_XE_OBSERVATION_IOCTL_ENABLE``h]hDRM_XE_OBSERVATION_IOCTL_ENABLE}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubh[ before calling read(). EIO errno from read() indicates HW dropped data due to full buffer.}(hj5hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM:hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_xe_query_eu_stall (C struct)c.drm_xe_query_eu_stallhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_query_eu_stallh]j)}(hstruct drm_xe_query_eu_stallh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMBubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj5hMBubj!)}(hdrm_xe_query_eu_stallh]j')}(hj5h]hdrm_xe_query_eu_stall}(hj5hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj5ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj5hhhj5hMBubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj5hhhj5hMBubah}(h]j5ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj5hMBhj5hhubjU)}(hhh]h)}(h$Information about EU stall sampling.h]h$Information about EU stall sampling.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMWhj5hhubah}(h]h ]h"]h$]h&]uh1jThj5hhhj5hMBubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj6jxj6jyjzj{uh1jhhhjhjhM ubj})}(hX#**Definition**:: struct drm_xe_query_eu_stall { __u64 extensions; __u64 capabilities; #define DRM_XE_EU_STALL_CAPS_BASE (1 << 0); __u64 record_size; __u64 per_xecore_buf_size; __u64 reserved[5]; __u64 num_sampling_rates; __u64 sampling_rates[]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``capabilities`` EU stall capabilities bit-mask ``record_size`` size of each EU stall data record ``per_xecore_buf_size`` internal per XeCore buffer size ``reserved`` Reserved ``num_sampling_rates`` Number of sampling rates in **sampling_rates** array ``sampling_rates`` Flexible array of sampling rates sorted in the fastest to slowest order. Sampling rates are specified in GPU clock cycles.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj"6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh:}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM[hj6ubj)}(hXstruct drm_xe_query_eu_stall { __u64 extensions; __u64 capabilities; #define DRM_XE_EU_STALL_CAPS_BASE (1 << 0); __u64 record_size; __u64 per_xecore_buf_size; __u64 reserved[5]; __u64 num_sampling_rates; __u64 sampling_rates[]; };h]hXstruct drm_xe_query_eu_stall { __u64 extensions; __u64 capabilities; #define DRM_XE_EU_STALL_CAPS_BASE (1 << 0); __u64 record_size; __u64 per_xecore_buf_size; __u64 reserved[5]; __u64 num_sampling_rates; __u64 sampling_rates[]; };}hj;6sbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM]hj6ubh)}(h **Members**h]j)}(hjL6h]hMembers}(hjN6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ6ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhhj6ubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjk6h]h extensions}(hjm6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji6ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM_hje6ubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM_hj6ubah}(h]h ]h"]h$]h&]uh1jShje6ubeh}(h]h ]h"]h$]h&]uh1j<hj6hM_hjb6ubj=)}(h0``capabilities`` EU stall capabilities bit-mask h](jC)}(h``capabilities``h]j)}(hj6h]h capabilities}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMbhj6ubjT)}(hhh]h)}(hEU stall capabilities bit-maskh]hEU stall capabilities bit-mask}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMbhj6ubah}(h]h ]h"]h$]h&]uh1jShj6ubeh}(h]h ]h"]h$]h&]uh1j<hj6hMbhjb6ubj=)}(h2``record_size`` size of each EU stall data record h](jC)}(h``record_size``h]j)}(hj6h]h record_size}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMfhj6ubjT)}(hhh]h)}(h!size of each EU stall data recordh]h!size of each EU stall data record}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMfhj6ubah}(h]h ]h"]h$]h&]uh1jShj6ubeh}(h]h ]h"]h$]h&]uh1j<hj6hMfhjb6ubj=)}(h8``per_xecore_buf_size`` internal per XeCore buffer size h](jC)}(h``per_xecore_buf_size``h]j)}(hj7h]hper_xecore_buf_size}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMihj7ubjT)}(hhh]h)}(hinternal per XeCore buffer sizeh]hinternal per XeCore buffer size}(hj/7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+7hMihj,7ubah}(h]h ]h"]h$]h&]uh1jShj7ubeh}(h]h ]h"]h$]h&]uh1j<hj+7hMihjb6ubj=)}(h``reserved`` Reserved h](jC)}(h ``reserved``h]j)}(hjO7h]hreserved}(hjQ7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM7ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMlhjI7ubjT)}(hhh]h)}(hReservedh]hReserved}(hjh7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd7hMlhje7ubah}(h]h ]h"]h$]h&]uh1jShjI7ubeh}(h]h ]h"]h$]h&]uh1j<hjd7hMlhjb6ubj=)}(hL``num_sampling_rates`` Number of sampling rates in **sampling_rates** array h](jC)}(h``num_sampling_rates``h]j)}(hj7h]hnum_sampling_rates}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMohj7ubjT)}(hhh]h)}(h4Number of sampling rates in **sampling_rates** arrayh](hNumber of sampling rates in }(hj7hhhNhNubj)}(h**sampling_rates**h]hsampling_rates}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh array}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMohj7ubah}(h]h ]h"]h$]h&]uh1jShj7ubeh}(h]h ]h"]h$]h&]uh1j<hj7hMohjb6ubj=)}(h``sampling_rates`` Flexible array of sampling rates sorted in the fastest to slowest order. Sampling rates are specified in GPU clock cycles.h](jC)}(h``sampling_rates``h]j)}(hj7h]hsampling_rates}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMthj7ubjT)}(hhh]h)}(hzFlexible array of sampling rates sorted in the fastest to slowest order. Sampling rates are specified in GPU clock cycles.h]hzFlexible array of sampling rates sorted in the fastest to slowest order. Sampling rates are specified in GPU clock cycles.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMshj7ubah}(h]h ]h"]h$]h&]uh1jShj7ubeh}(h]h ]h"]h$]h&]uh1j<hj7hMthjb6ubeh}(h]h ]h"]h$]h&]uh1j7hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMxhjhhubh)}(hIf a query is made with a :c:type:`struct drm_xe_device_query ` where .query is equal to ``DRM_XE_DEVICE_QUERY_EU_STALL``, then the reply uses :c:type:`struct drm_xe_query_eu_stall ` in .data.h](hIf a query is made with a }(hj,8hhhNhNubh)}(h::c:type:`struct drm_xe_device_query `h]j)}(hj68h]hstruct drm_xe_device_query}(hj88hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj48ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_device_queryuh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMXhj,8ubh where .query is equal to }(hj,8hhhNhNubj)}(h ``DRM_XE_DEVICE_QUERY_EU_STALL``h]hDRM_XE_DEVICE_QUERY_EU_STALL}(hjX8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,8ubh, then the reply uses }(hj,8hhhNhNubh)}(h>:c:type:`struct drm_xe_query_eu_stall `h]j)}(hjl8h]hstruct drm_xe_query_eu_stall}(hjn8hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjj8ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjMjQdrm_xe_query_eu_stalluh1hhjS8hMXhj,8ubh in .data.}(hj,8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjS8hMXhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_xe_madvise (C struct)c.drm_xe_madvisehNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_madviseh]j)}(hstruct drm_xe_madviseh](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj8hhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM_ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hM_ubj!)}(hdrm_xe_madviseh]j')}(hj8h]hdrm_xe_madvise}(hj8hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj8ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj8hhhj8hM_ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj8hhhj8hM_ubah}(h]j8ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj8hM_hj8hhubjU)}(hhh]h)}(h'Input of :c:type:`DRM_IOCTL_XE_MADVISE`h](h Input of }(hj8hhhNhNubh)}(h:c:type:`DRM_IOCTL_XE_MADVISE`h]j)}(hj8h]hDRM_IOCTL_XE_MADVISE}(hj8hhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jj8sbc.drm_xe_madviseasbjQDRM_IOCTL_XE_MADVISEuh1hhjhKhj8ubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMzhj8hhubah}(h]h ]h"]h$]h&]uh1jThj8hhhj8hM_ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj,9jxj,9jyjzj{uh1jhhhjhjhM ubj})}(hX **Definition**:: struct drm_xe_madvise { __u64 extensions; __u64 start; __u64 range; __u32 vm_id; #define DRM_XE_MEM_RANGE_ATTR_PREFERRED_LOC 0; #define DRM_XE_MEM_RANGE_ATTR_ATOMIC 1; #define DRM_XE_MEM_RANGE_ATTR_PAT 2; #define DRM_XE_VMA_ATTR_PURGEABLE_STATE 3; __u32 type; union { struct { #define DRM_XE_PREFERRED_LOC_DEFAULT_DEVICE 0; #define DRM_XE_PREFERRED_LOC_DEFAULT_SYSTEM -1; __u32 devmem_fd; #define DRM_XE_MIGRATE_ALL_PAGES 0; #define DRM_XE_MIGRATE_ONLY_SYSTEM_PAGES 1; __u16 migration_policy; __u16 region_instance; __u64 reserved; } preferred_mem_loc; struct { #define DRM_XE_ATOMIC_UNDEFINED 0; #define DRM_XE_ATOMIC_DEVICE 1; #define DRM_XE_ATOMIC_GLOBAL 2; #define DRM_XE_ATOMIC_CPU 3; __u32 val; __u32 pad; __u64 reserved; } atomic; struct { __u32 val; __u32 pad; __u64 reserved; } pat_index; struct { #define DRM_XE_VMA_PURGEABLE_STATE_WILLNEED 0; #define DRM_XE_VMA_PURGEABLE_STATE_DONTNEED 1; __u32 val; __u32 pad; __u64 retained_ptr; } purge_state_val; }; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``start`` start of the virtual address range ``range`` size of the virtual address range ``vm_id`` vm_id of the virtual range ``type`` type of attribute ``{unnamed_union}`` anonymous ``preferred_mem_loc`` preferred memory location Used when **type** == DRM_XE_MEM_RANGE_ATTR_PREFERRED_LOC Supported values for **preferred_mem_loc.devmem_fd**: - DRM_XE_PREFERRED_LOC_DEFAULT_DEVICE: set vram of fault tile as preferred loc - DRM_XE_PREFERRED_LOC_DEFAULT_SYSTEM: set smem as preferred loc Supported values for **preferred_mem_loc.migration_policy**: - DRM_XE_MIGRATE_ALL_PAGES - DRM_XE_MIGRATE_ONLY_SYSTEM_PAGES ``preferred_mem_loc.devmem_fd`` Device file-descriptor of the device where the preferred memory is located, or one of the above special values. Please also see **preferred_mem_loc.region_instance** below. ``preferred_mem_loc.migration_policy`` Page migration policy ``preferred_mem_loc.region_instance`` Region instance. MBZ if **devmem_fd** <= ``DRM_XE_PREFERRED_LOC_DEFAULT_DEVICE``. Otherwise should point to the desired device VRAM instance of the device indicated by **preferred_mem_loc.devmem_fd**. ``preferred_mem_loc.reserved`` Reserved ``atomic`` Atomic access policy Used when **type** == DRM_XE_MEM_RANGE_ATTR_ATOMIC. Supported values for **atomic.val**: - DRM_XE_ATOMIC_UNDEFINED: Undefined or default behaviour. Support both GPU and CPU atomic operations for system allocator. Support GPU atomic operations for normal(bo) allocator. - DRM_XE_ATOMIC_DEVICE: Support GPU atomic operations. - DRM_XE_ATOMIC_GLOBAL: Support both GPU and CPU atomic operations. - DRM_XE_ATOMIC_CPU: Support CPU atomic only, no GPU atomics supported. ``atomic.val`` value of atomic operation ``atomic.pad`` MBZ ``atomic.reserved`` Reserved ``pat_index`` Page attribute table index Used when **type** == DRM_XE_MEM_RANGE_ATTR_PAT. ``pat_index.val`` PAT index value ``pat_index.pad`` MBZ ``pat_index.reserved`` Reserved ``purge_state_val`` Purgeable state configuration Used when **type** == DRM_XE_VMA_ATTR_PURGEABLE_STATE. Configures the purgeable state of buffer objects in the specified virtual address range. This allows applications to hint to the kernel about bo's usage patterns for better memory management. By default all VMAs are in WILLNEED state. Supported values for **purge_state_val.val**: - DRM_XE_VMA_PURGEABLE_STATE_WILLNEED (0): Marks BO as needed. If the BO was previously purged, the kernel sets the __u32 at **retained_ptr** to 0 (backing store lost) so the application knows it must recreate the BO. - DRM_XE_VMA_PURGEABLE_STATE_DONTNEED (1): Marks BO as not currently needed. Kernel may purge it under memory pressure to reclaim memory. Only applies to non-shared BOs. The kernel sets the __u32 at **retained_ptr** to 1 if the backing store still exists (not yet purged), or 0 if it was already purged. Important: Once marked as DONTNEED, touching the BO's memory is undefined behavior. It may succeed temporarily (before the kernel purges the backing store) but will suddenly fail once the BO transitions to PURGED state. To transition back: use WILLNEED and check **retained_ptr** — if 0, backing store was lost and the BO must be recreated. The following operations are blocked in DONTNEED state to prevent the BO from being re-mapped after madvise: - New mmap() calls: Fail with -EBUSY - VM_BIND operations: Fail with -EBUSY - New dma-buf exports: Fail with -EBUSY - CPU page faults (existing mmap): Fail with SIGBUS - GPU page faults (fault-mode VMs): Fail with -EACCES ``purge_state_val.val`` value for DRM_XE_VMA_ATTR_PURGEABLE_STATE ``purge_state_val.pad`` MBZ ``purge_state_val.retained_ptr`` Pointer to a __u32 output field for backing store status. Userspace must initialize the __u32 value at this address to 0 before the ioctl. Kernel writes a __u32 after the operation: - 1 if backing store exists (not purged) - 0 if backing store was purged If userspace fails to initialize to 0, ioctl returns -EINVAL. This ensures a safe default (0 = assume purged) if kernel cannot write the result. Similar to i915's drm_i915_gem_madvise.retained field. ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj89hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj49ubh:}(hj49hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM~hj09ubj)}(hX-struct drm_xe_madvise { __u64 extensions; __u64 start; __u64 range; __u32 vm_id; #define DRM_XE_MEM_RANGE_ATTR_PREFERRED_LOC 0; #define DRM_XE_MEM_RANGE_ATTR_ATOMIC 1; #define DRM_XE_MEM_RANGE_ATTR_PAT 2; #define DRM_XE_VMA_ATTR_PURGEABLE_STATE 3; __u32 type; union { struct { #define DRM_XE_PREFERRED_LOC_DEFAULT_DEVICE 0; #define DRM_XE_PREFERRED_LOC_DEFAULT_SYSTEM -1; __u32 devmem_fd; #define DRM_XE_MIGRATE_ALL_PAGES 0; #define DRM_XE_MIGRATE_ONLY_SYSTEM_PAGES 1; __u16 migration_policy; __u16 region_instance; __u64 reserved; } preferred_mem_loc; struct { #define DRM_XE_ATOMIC_UNDEFINED 0; #define DRM_XE_ATOMIC_DEVICE 1; #define DRM_XE_ATOMIC_GLOBAL 2; #define DRM_XE_ATOMIC_CPU 3; __u32 val; __u32 pad; __u64 reserved; } atomic; struct { __u32 val; __u32 pad; __u64 reserved; } pat_index; struct { #define DRM_XE_VMA_PURGEABLE_STATE_WILLNEED 0; #define DRM_XE_VMA_PURGEABLE_STATE_DONTNEED 1; __u32 val; __u32 pad; __u64 retained_ptr; } purge_state_val; }; __u64 reserved[2]; };h]hX-struct drm_xe_madvise { __u64 extensions; __u64 start; __u64 range; __u32 vm_id; #define DRM_XE_MEM_RANGE_ATTR_PREFERRED_LOC 0; #define DRM_XE_MEM_RANGE_ATTR_ATOMIC 1; #define DRM_XE_MEM_RANGE_ATTR_PAT 2; #define DRM_XE_VMA_ATTR_PURGEABLE_STATE 3; __u32 type; union { struct { #define DRM_XE_PREFERRED_LOC_DEFAULT_DEVICE 0; #define DRM_XE_PREFERRED_LOC_DEFAULT_SYSTEM -1; __u32 devmem_fd; #define DRM_XE_MIGRATE_ALL_PAGES 0; #define DRM_XE_MIGRATE_ONLY_SYSTEM_PAGES 1; __u16 migration_policy; __u16 region_instance; __u64 reserved; } preferred_mem_loc; struct { #define DRM_XE_ATOMIC_UNDEFINED 0; #define DRM_XE_ATOMIC_DEVICE 1; #define DRM_XE_ATOMIC_GLOBAL 2; #define DRM_XE_ATOMIC_CPU 3; __u32 val; __u32 pad; __u64 reserved; } atomic; struct { __u32 val; __u32 pad; __u64 reserved; } pat_index; struct { #define DRM_XE_VMA_PURGEABLE_STATE_WILLNEED 0; #define DRM_XE_VMA_PURGEABLE_STATE_DONTNEED 1; __u32 val; __u32 pad; __u64 retained_ptr; } purge_state_val; }; __u64 reserved[2]; };}hjQ9sbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj09ubh)}(h **Members**h]j)}(hjb9h]hMembers}(hjd9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`9ubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj09ubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hj9h]h extensions}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj{9ubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jShj{9ubeh}(h]h ]h"]h$]h&]uh1j<hj9hMhjx9ubj=)}(h-``start`` start of the virtual address range h](jC)}(h ``start``h]j)}(hj9h]hstart}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj9ubjT)}(hhh]h)}(h"start of the virtual address rangeh]h"start of the virtual address range}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj9ubah}(h]h ]h"]h$]h&]uh1jShj9ubeh}(h]h ]h"]h$]h&]uh1j<hj9hMhjx9ubj=)}(h,``range`` size of the virtual address range h](jC)}(h ``range``h]j)}(hj9h]hrange}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj9ubjT)}(hhh]h)}(h!size of the virtual address rangeh]h!size of the virtual address range}(hj :hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj :ubah}(h]h ]h"]h$]h&]uh1jShj9ubeh}(h]h ]h"]h$]h&]uh1j<hj:hMhjx9ubj=)}(h%``vm_id`` vm_id of the virtual range h](jC)}(h ``vm_id``h]j)}(hj,:h]hvm_id}(hj.:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*:ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj&:ubjT)}(hhh]h)}(hvm_id of the virtual rangeh]hvm_id of the virtual range}(hjE:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA:hMhjB:ubah}(h]h ]h"]h$]h&]uh1jShj&:ubeh}(h]h ]h"]h$]h&]uh1j<hjA:hMhjx9ubj=)}(h``type`` type of attribute h](jC)}(h``type``h]j)}(hje:h]htype}(hjg:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc:ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj_:ubjT)}(hhh]h)}(htype of attributeh]htype of attribute}(hj~:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjz:hMhj{:ubah}(h]h ]h"]h$]h&]uh1jShj_:ubeh}(h]h ]h"]h$]h&]uh1j<hjz:hMhjx9ubj=)}(h``{unnamed_union}`` anonymous h](jC)}(h``{unnamed_union}``h]j)}(hj:h]h{unnamed_union}}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhKhj:ubjT)}(hhh]h)}(h anonymoush]h anonymous}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hKhj:ubah}(h]h ]h"]h$]h&]uh1jShj:ubeh}(h]h ]h"]h$]h&]uh1j<hj:hKhjx9ubj=)}(hX``preferred_mem_loc`` preferred memory location Used when **type** == DRM_XE_MEM_RANGE_ATTR_PREFERRED_LOC Supported values for **preferred_mem_loc.devmem_fd**: - DRM_XE_PREFERRED_LOC_DEFAULT_DEVICE: set vram of fault tile as preferred loc - DRM_XE_PREFERRED_LOC_DEFAULT_SYSTEM: set smem as preferred loc Supported values for **preferred_mem_loc.migration_policy**: - DRM_XE_MIGRATE_ALL_PAGES - DRM_XE_MIGRATE_ONLY_SYSTEM_PAGES h](jC)}(h``preferred_mem_loc``h]j)}(hj:h]hpreferred_mem_loc}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj:ubjT)}(hhh](h)}(hpreferred memory locationh]hpreferred memory location}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj:ubh)}(h9Used when **type** == DRM_XE_MEM_RANGE_ATTR_PREFERRED_LOCh](h Used when }(hj:hhhNhNubj)}(h**type**h]htype}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubh' == DRM_XE_MEM_RANGE_ATTR_PREFERRED_LOC}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj:ubj8)}(hhh](j=)}(hSupported values for **preferred_mem_loc.devmem_fd**: - DRM_XE_PREFERRED_LOC_DEFAULT_DEVICE: set vram of fault tile as preferred loc - DRM_XE_PREFERRED_LOC_DEFAULT_SYSTEM: set smem as preferred loc h](jC)}(h5Supported values for **preferred_mem_loc.devmem_fd**:h](hSupported values for }(hj';hhhNhNubj)}(h**preferred_mem_loc.devmem_fd**h]hpreferred_mem_loc.devmem_fd}(hj/;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj';ubh:}(hj';hhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj#;ubjT)}(hhh]h)}(hhh](h)}(hLDRM_XE_PREFERRED_LOC_DEFAULT_DEVICE: set vram of fault tile as preferred loch]h)}(hjP;h]hLDRM_XE_PREFERRED_LOC_DEFAULT_DEVICE: set vram of fault tile as preferred loc}(hjR;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjN;ubah}(h]h ]h"]h$]h&]uh1hhjK;ubh)}(h?DRM_XE_PREFERRED_LOC_DEFAULT_SYSTEM: set smem as preferred loc h]h)}(h>DRM_XE_PREFERRED_LOC_DEFAULT_SYSTEM: set smem as preferred loch]h>DRM_XE_PREFERRED_LOC_DEFAULT_SYSTEM: set smem as preferred loc}(hjj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG;hMhjf;ubah}(h]h ]h"]h$]h&]uh1hhjK;ubeh}(h]h ]h"]h$]h&]jQ jR uh1hhj_;hMhjH;ubah}(h]h ]h"]h$]h&]uh1jShj#;ubeh}(h]h ]h"]h$]h&]uh1j<hjG;hMhj ;ubj=)}(h{Supported values for **preferred_mem_loc.migration_policy**: - DRM_XE_MIGRATE_ALL_PAGES - DRM_XE_MIGRATE_ONLY_SYSTEM_PAGES h](jC)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW=hMhj>ubah}(h]h ]h"]h$]h&]uh1hhj=ubeh}(h]h ]h"]h$]h&]jQ jR uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jShj=ubeh}(h]h ]h"]h$]h&]uh1j<hjW=hMhj=ubah}(h]h ]h"]h$]h&]uh1j7hjX=ubeh}(h]h ]h"]h$]h&]uh1jShj<=ubeh}(h]h ]h"]h$]h&]uh1j<hjW=hMhjx9ubj=)}(h)``atomic.val`` value of atomic operation h](jC)}(h``atomic.val``h]j)}(hjC>h]h atomic.val}(hjE>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA>ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj=>ubjT)}(hhh]h)}(hvalue of atomic operationh]hvalue of atomic operation}(hj\>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX>hMhjY>ubah}(h]h ]h"]h$]h&]uh1jShj=>ubeh}(h]h ]h"]h$]h&]uh1j<hjX>hMhjx9ubj=)}(h``atomic.pad`` MBZ h](jC)}(h``atomic.pad``h]j)}(hj|>h]h atomic.pad}(hj~>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz>ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjv>ubjT)}(hhh]h)}(hMBZh]hMBZ}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jShjv>ubeh}(h]h ]h"]h$]h&]uh1j<hj>hMhjx9ubj=)}(h``atomic.reserved`` Reserved h](jC)}(h``atomic.reserved``h]j)}(hj>h]hatomic.reserved}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj>ubjT)}(hhh]h)}(hReservedh]hReserved}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jShj>ubeh}(h]h ]h"]h$]h&]uh1j<hj>hMhjx9ubj=)}(h[``pat_index`` Page attribute table index Used when **type** == DRM_XE_MEM_RANGE_ATTR_PAT. h](jC)}(h ``pat_index``h]j)}(hj>h]h pat_index}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj>ubjT)}(hhh](h)}(hPage attribute table indexh]hPage attribute table index}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj?ubh)}(h0Used when **type** == DRM_XE_MEM_RANGE_ATTR_PAT.h](h Used when }(hj?hhhNhNubj)}(h**type**h]htype}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh == DRM_XE_MEM_RANGE_ATTR_PAT.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubeh}(h]h ]h"]h$]h&]uh1jShj>ubeh}(h]h ]h"]h$]h&]uh1j<hj?hMhjx9ubj=)}(h"``pat_index.val`` PAT index value h](jC)}(h``pat_index.val``h]j)}(hjH?h]h pat_index.val}(hjJ?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF?ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjB?ubjT)}(hhh]h)}(hPAT index valueh]hPAT index value}(hja?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]?hMhj^?ubah}(h]h ]h"]h$]h&]uh1jShjB?ubeh}(h]h ]h"]h$]h&]uh1j<hj]?hMhjx9ubj=)}(h``pat_index.pad`` MBZ h](jC)}(h``pat_index.pad``h]j)}(hj?h]h pat_index.pad}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj{?ubjT)}(hhh]h)}(hMBZh]hMBZ}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jShj{?ubeh}(h]h ]h"]h$]h&]uh1j<hj?hMhjx9ubj=)}(h ``pat_index.reserved`` Reserved h](jC)}(h``pat_index.reserved``h]j)}(hj?h]hpat_index.reserved}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhj?ubjT)}(hhh]h)}(hReservedh]hReserved}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jShj?ubeh}(h]h ]h"]h$]h&]uh1j<hj?hMhjx9ubj=)}(hXt``purge_state_val`` Purgeable state configuration Used when **type** == DRM_XE_VMA_ATTR_PURGEABLE_STATE. Configures the purgeable state of buffer objects in the specified virtual address range. This allows applications to hint to the kernel about bo's usage patterns for better memory management. By default all VMAs are in WILLNEED state. Supported values for **purge_state_val.val**: - DRM_XE_VMA_PURGEABLE_STATE_WILLNEED (0): Marks BO as needed. If the BO was previously purged, the kernel sets the __u32 at **retained_ptr** to 0 (backing store lost) so the application knows it must recreate the BO. - DRM_XE_VMA_PURGEABLE_STATE_DONTNEED (1): Marks BO as not currently needed. Kernel may purge it under memory pressure to reclaim memory. Only applies to non-shared BOs. The kernel sets the __u32 at **retained_ptr** to 1 if the backing store still exists (not yet purged), or 0 if it was already purged. Important: Once marked as DONTNEED, touching the BO's memory is undefined behavior. It may succeed temporarily (before the kernel purges the backing store) but will suddenly fail once the BO transitions to PURGED state. To transition back: use WILLNEED and check **retained_ptr** — if 0, backing store was lost and the BO must be recreated. The following operations are blocked in DONTNEED state to prevent the BO from being re-mapped after madvise: - New mmap() calls: Fail with -EBUSY - VM_BIND operations: Fail with -EBUSY - New dma-buf exports: Fail with -EBUSY - CPU page faults (existing mmap): Fail with SIGBUS - GPU page faults (fault-mode VMs): Fail with -EACCES h](jC)}(h``purge_state_val``h]j)}(hj?h]hpurge_state_val}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM' hj?ubjT)}(hhh](h)}(hPurgeable state configurationh]hPurgeable state configuration}(hj @hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj @ubh)}(h6Used when **type** == DRM_XE_VMA_ATTR_PURGEABLE_STATE.h](h Used when }(hj@hhhNhNubj)}(h**type**h]htype}(hj#@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh$ == DRM_XE_VMA_ATTR_PURGEABLE_STATE.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj @ubh)}(hConfigures the purgeable state of buffer objects in the specified virtual address range. This allows applications to hint to the kernel about bo's usage patterns for better memory management.h]hConfigures the purgeable state of buffer objects in the specified virtual address range. This allows applications to hint to the kernel about bo’s usage patterns for better memory management.}(hj<@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj @ubh)}(h*By default all VMAs are in WILLNEED state.h]h*By default all VMAs are in WILLNEED state.}(hjK@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj @ubj8)}(hhh]j=)}(hXSupported values for **purge_state_val.val**: - DRM_XE_VMA_PURGEABLE_STATE_WILLNEED (0): Marks BO as needed. If the BO was previously purged, the kernel sets the __u32 at **retained_ptr** to 0 (backing store lost) so the application knows it must recreate the BO. - DRM_XE_VMA_PURGEABLE_STATE_DONTNEED (1): Marks BO as not currently needed. Kernel may purge it under memory pressure to reclaim memory. Only applies to non-shared BOs. The kernel sets the __u32 at **retained_ptr** to 1 if the backing store still exists (not yet purged), or 0 if it was already purged. Important: Once marked as DONTNEED, touching the BO's memory is undefined behavior. It may succeed temporarily (before the kernel purges the backing store) but will suddenly fail once the BO transitions to PURGED state. To transition back: use WILLNEED and check **retained_ptr** — if 0, backing store was lost and the BO must be recreated. The following operations are blocked in DONTNEED state to prevent the BO from being re-mapped after madvise: - New mmap() calls: Fail with -EBUSY - VM_BIND operations: Fail with -EBUSY - New dma-buf exports: Fail with -EBUSY - CPU page faults (existing mmap): Fail with SIGBUS - GPU page faults (fault-mode VMs): Fail with -EACCES h](jC)}(h-Supported values for **purge_state_val.val**:h](hSupported values for }(hja@hhhNhNubj)}(h**purge_state_val.val**h]hpurge_state_val.val}(hji@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja@ubh:}(hja@hhhNhNubeh}(h]h ]h"]h$]h&]uh1jBhj@hM' hj]@ubjT)}(hhh]h)}(hhh](h)}(hDRM_XE_VMA_PURGEABLE_STATE_WILLNEED (0): Marks BO as needed. If the BO was previously purged, the kernel sets the __u32 at **retained_ptr** to 0 (backing store lost) so the application knows it must recreate the BO. h]h)}(hDRM_XE_VMA_PURGEABLE_STATE_WILLNEED (0): Marks BO as needed. If the BO was previously purged, the kernel sets the __u32 at **retained_ptr** to 0 (backing store lost) so the application knows it must recreate the BO.h](h{DRM_XE_VMA_PURGEABLE_STATE_WILLNEED (0): Marks BO as needed. If the BO was previously purged, the kernel sets the __u32 at }(hj@hhhNhNubj)}(h**retained_ptr**h]h retained_ptr}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubhL to 0 (backing store lost) so the application knows it must recreate the BO.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj@ubah}(h]h ]h"]h$]h&]uh1hhj@ubh)}(hXDRM_XE_VMA_PURGEABLE_STATE_DONTNEED (1): Marks BO as not currently needed. Kernel may purge it under memory pressure to reclaim memory. Only applies to non-shared BOs. The kernel sets the __u32 at **retained_ptr** to 1 if the backing store still exists (not yet purged), or 0 if it was already purged. Important: Once marked as DONTNEED, touching the BO's memory is undefined behavior. It may succeed temporarily (before the kernel purges the backing store) but will suddenly fail once the BO transitions to PURGED state. To transition back: use WILLNEED and check **retained_ptr** — if 0, backing store was lost and the BO must be recreated. The following operations are blocked in DONTNEED state to prevent the BO from being re-mapped after madvise: - New mmap() calls: Fail with -EBUSY - VM_BIND operations: Fail with -EBUSY - New dma-buf exports: Fail with -EBUSY - CPU page faults (existing mmap): Fail with SIGBUS - GPU page faults (fault-mode VMs): Fail with -EACCES h](h)}(hX-DRM_XE_VMA_PURGEABLE_STATE_DONTNEED (1): Marks BO as not currently needed. Kernel may purge it under memory pressure to reclaim memory. Only applies to non-shared BOs. The kernel sets the __u32 at **retained_ptr** to 1 if the backing store still exists (not yet purged), or 0 if it was already purged.h](hDRM_XE_VMA_PURGEABLE_STATE_DONTNEED (1): Marks BO as not currently needed. Kernel may purge it under memory pressure to reclaim memory. Only applies to non-shared BOs. The kernel sets the __u32 at }(hj@hhhNhNubj)}(h**retained_ptr**h]h retained_ptr}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubhX to 1 if the backing store still exists (not yet purged), or 0 if it was already purged.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj@ubh)}(hImportant: Once marked as DONTNEED, touching the BO's memory is undefined behavior. It may succeed temporarily (before the kernel purges the backing store) but will suddenly fail once the BO transitions to PURGED state.h]hImportant: Once marked as DONTNEED, touching the BO’s memory is undefined behavior. It may succeed temporarily (before the kernel purges the backing store) but will suddenly fail once the BO transitions to PURGED state.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj@ubh)}(hzTo transition back: use WILLNEED and check **retained_ptr** — if 0, backing store was lost and the BO must be recreated.h](h+To transition back: use WILLNEED and check }(hj@hhhNhNubj)}(h**retained_ptr**h]h retained_ptr}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubh? — if 0, backing store was lost and the BO must be recreated.}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj@ubh)}(hXJThe following operations are blocked in DONTNEED state to prevent the BO from being re-mapped after madvise: - New mmap() calls: Fail with -EBUSY - VM_BIND operations: Fail with -EBUSY - New dma-buf exports: Fail with -EBUSY - CPU page faults (existing mmap): Fail with SIGBUS - GPU page faults (fault-mode VMs): Fail with -EACCESh]hXJThe following operations are blocked in DONTNEED state to prevent the BO from being re-mapped after madvise: - New mmap() calls: Fail with -EBUSY - VM_BIND operations: Fail with -EBUSY - New dma-buf exports: Fail with -EBUSY - CPU page faults (existing mmap): Fail with SIGBUS - GPU page faults (fault-mode VMs): Fail with -EACCES}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM! hj@ubeh}(h]h ]h"]h$]h&]uh1hhj@ubeh}(h]h ]h"]h$]h&]jQ jR uh1hhj@hM hj@ubah}(h]h ]h"]h$]h&]uh1jShj]@ubeh}(h]h ]h"]h$]h&]uh1j<hj@hM' hjZ@ubah}(h]h ]h"]h$]h&]uh1j7hj @ubeh}(h]h ]h"]h$]h&]uh1jShj?ubeh}(h]h ]h"]h$]h&]uh1j<hj@hM' hjx9ubj=)}(hB``purge_state_val.val`` value for DRM_XE_VMA_ATTR_PURGEABLE_STATE h](jC)}(h``purge_state_val.val``h]j)}(hjFAh]hpurge_state_val.val}(hjHAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDAubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM, hj@AubjT)}(hhh]h)}(h)value for DRM_XE_VMA_ATTR_PURGEABLE_STATEh]h)value for DRM_XE_VMA_ATTR_PURGEABLE_STATE}(hj_AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[AhM, hj\Aubah}(h]h ]h"]h$]h&]uh1jShj@Aubeh}(h]h ]h"]h$]h&]uh1j<hj[AhM, hjx9ubj=)}(h``purge_state_val.pad`` MBZ h](jC)}(h``purge_state_val.pad``h]j)}(hjAh]hpurge_state_val.pad}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Aubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM/ hjyAubjT)}(hhh]h)}(hMBZh]hMBZ}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM/ hjAubah}(h]h ]h"]h$]h&]uh1jShjyAubeh}(h]h ]h"]h$]h&]uh1j<hjAhM/ hjx9ubj=)}(hX``purge_state_val.retained_ptr`` Pointer to a __u32 output field for backing store status. Userspace must initialize the __u32 value at this address to 0 before the ioctl. Kernel writes a __u32 after the operation: - 1 if backing store exists (not purged) - 0 if backing store was purged If userspace fails to initialize to 0, ioctl returns -EINVAL. This ensures a safe default (0 = assume purged) if kernel cannot write the result. Similar to i915's drm_i915_gem_madvise.retained field. h](jC)}(h ``purge_state_val.retained_ptr``h]j)}(hjAh]hpurge_state_val.retained_ptr}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM? hjAubjT)}(hhh](h)}(h9Pointer to a __u32 output field for backing store status.h]h9Pointer to a __u32 output field for backing store status.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM2 hjAubh)}(hUserspace must initialize the __u32 value at this address to 0 before the ioctl. Kernel writes a __u32 after the operation: - 1 if backing store exists (not purged) - 0 if backing store was purgedh]hUserspace must initialize the __u32 value at this address to 0 before the ioctl. Kernel writes a __u32 after the operation: - 1 if backing store exists (not purged) - 0 if backing store was purged}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM5 hjAubh)}(hIf userspace fails to initialize to 0, ioctl returns -EINVAL. This ensures a safe default (0 = assume purged) if kernel cannot write the result.h]hIf userspace fails to initialize to 0, ioctl returns -EINVAL. This ensures a safe default (0 = assume purged) if kernel cannot write the result.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM; hjAubh)}(h6Similar to i915's drm_i915_gem_madvise.retained field.h]h8Similar to i915’s drm_i915_gem_madvise.retained field.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM? hjAubeh}(h]h ]h"]h$]h&]uh1jShjAubeh}(h]h ]h"]h$]h&]uh1j<hjAhM? hjx9ubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjBh]hreserved}(hj BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMD hjBubjT)}(hhh]h)}(hReservedh]hReserved}(hj7BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhME hj4Bubah}(h]h ]h"]h$]h&]uh1jShjBubeh}(h]h ]h"]h$]h&]uh1j<hj3BhMD hjx9ubeh}(h]h ]h"]h$]h&]uh1j7hj09ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjaBh]h Description}(hjcBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_Bubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMH hjhhubh)}(hThis structure is used to set memory attributes for a virtual address range in a VM. The type of attribute is specified by **type**, and the corresponding union member is used to provide additional parameters for **type**.h](h{This structure is used to set memory attributes for a virtual address range in a VM. The type of attribute is specified by }(hjwBhhhNhNubj)}(h**type**h]htype}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwBubhR, and the corresponding union member is used to provide additional parameters for }(hjwBhhhNhNubj)}(h**type**h]htype}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwBubh.}(hjwBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM{hjhhubj8)}(hhh]j=)}(hXSupported attribute types: - DRM_XE_MEM_RANGE_ATTR_PREFERRED_LOC: Set preferred memory location. - DRM_XE_MEM_RANGE_ATTR_ATOMIC: Set atomic access policy. - DRM_XE_MEM_RANGE_ATTR_PAT: Set page attribute table index. - DRM_XE_VMA_ATTR_PURGEABLE_STATE: Set purgeable state for BOs. h](jC)}(hSupported attribute types:h]hSupported attribute types:}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjBubjT)}(hhh]h)}(hhh](h)}(hCDRM_XE_MEM_RANGE_ATTR_PREFERRED_LOC: Set preferred memory location.h]h)}(hjBh]hCDRM_XE_MEM_RANGE_ATTR_PREFERRED_LOC: Set preferred memory location.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjBubah}(h]h ]h"]h$]h&]uh1hhjBubh)}(h7DRM_XE_MEM_RANGE_ATTR_ATOMIC: Set atomic access policy.h]h)}(hjBh]h7DRM_XE_MEM_RANGE_ATTR_ATOMIC: Set atomic access policy.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjBubah}(h]h ]h"]h$]h&]uh1hhjBubh)}(h:DRM_XE_MEM_RANGE_ATTR_PAT: Set page attribute table index.h]h)}(hjBh]h:DRM_XE_MEM_RANGE_ATTR_PAT: Set page attribute table index.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjBubah}(h]h ]h"]h$]h&]uh1hhjBubh)}(h>DRM_XE_VMA_ATTR_PURGEABLE_STATE: Set purgeable state for BOs. h]h)}(h=DRM_XE_VMA_ATTR_PURGEABLE_STATE: Set purgeable state for BOs.h]h=DRM_XE_VMA_ATTR_PURGEABLE_STATE: Set purgeable state for BOs.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1hhjBubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jShjBubeh}(h]h ]h"]h$]h&]uh1j<hjBhMhjBubah}(h]h ]h"]h$]h&]uh1j7hjhhhjhM ubh)}(h **Example**h]j)}(hj@Ch]hExample}(hjBChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>Cubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hstruct drm_xe_madvise madvise = { .vm_id = vm_id, .start = 0x100000, .range = 0x2000, .type = DRM_XE_MEM_RANGE_ATTR_ATOMIC, .atomic.val = DRM_XE_ATOMIC_DEVICE, }; ioctl(fd, DRM_IOCTL_XE_MADVISE, &madvise);h]hstruct drm_xe_madvise madvise = { .vm_id = vm_id, .start = 0x100000, .range = 0x2000, .type = DRM_XE_MEM_RANGE_ATTR_ATOMIC, .atomic.val = DRM_XE_ATOMIC_DEVICE, }; ioctl(fd, DRM_IOCTL_XE_MADVISE, &madvise);}hjVCsbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_xe_mem_range_attr (C struct)c.drm_xe_mem_range_attrhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_mem_range_attrh]j)}(hstruct drm_xe_mem_range_attrh](j)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj{ChhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ChhhjChMubj!)}(hdrm_xe_mem_range_attrh]j')}(hjyCh]hdrm_xe_mem_range_attr}(hjChhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjCubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj{ChhhjChMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjwChhhjChMubah}(h]jrCah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjChMhjtChhubjU)}(hhh]h)}(h9Output of :c:type:`DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS`h](h Output of }(hjChhhNhNubh)}(h/:c:type:`DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS`h]j)}(hjCh]h%DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS}(hjChhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jjyCsbc.drm_xe_mem_range_attrasbjQ%DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRSuh1hhjhKhjCubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMI hjChhubah}(h]h ]h"]h$]h&]uh1jThjtChhhjChMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjCjxjCjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_mem_range_attr { __u64 extensions; __u64 start; __u64 end; struct { __u32 devmem_fd; __u32 migration_policy; } preferred_mem_loc; struct { __u32 val; __u32 reserved; } atomic; struct { __u32 val; __u32 reserved; } pat_index; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``start`` start of the memory range ``end`` end of the memory range ``preferred_mem_loc`` preferred memory location ``preferred_mem_loc.devmem_fd`` fd for preferred loc ``preferred_mem_loc.migration_policy`` Page migration policy ``atomic`` Atomic access policy ``atomic.val`` atomic attribute ``atomic.reserved`` Reserved ``pat_index`` Page attribute table index ``pat_index.val`` PAT index ``pat_index.reserved`` Reserved ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh:}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMM hjDubj)}(hX\struct drm_xe_mem_range_attr { __u64 extensions; __u64 start; __u64 end; struct { __u32 devmem_fd; __u32 migration_policy; } preferred_mem_loc; struct { __u32 val; __u32 reserved; } atomic; struct { __u32 val; __u32 reserved; } pat_index; __u64 reserved[2]; };h]hX\struct drm_xe_mem_range_attr { __u64 extensions; __u64 start; __u64 end; struct { __u32 devmem_fd; __u32 migration_policy; } preferred_mem_loc; struct { __u32 val; __u32 reserved; } atomic; struct { __u32 val; __u32 reserved; } pat_index; __u64 reserved[2]; };}hj$Dsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMO hjDubh)}(h **Members**h]j)}(hj5Dh]hMembers}(hj7DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Dubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMb hjDubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjTDh]h extensions}(hjVDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRDubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMV hjNDubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hjmDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjiDhMV hjjDubah}(h]h ]h"]h$]h&]uh1jShjNDubeh}(h]h ]h"]h$]h&]uh1j<hjiDhMV hjKDubj=)}(h$``start`` start of the memory range h](jC)}(h ``start``h]j)}(hjDh]hstart}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMY hjDubjT)}(hhh]h)}(hstart of the memory rangeh]hstart of the memory range}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMY hjDubah}(h]h ]h"]h$]h&]uh1jShjDubeh}(h]h ]h"]h$]h&]uh1j<hjDhMY hjKDubj=)}(h ``end`` end of the memory range h](jC)}(h``end``h]j)}(hjDh]hend}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM\ hjDubjT)}(hhh]h)}(hend of the memory rangeh]hend of the memory range}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM\ hjDubah}(h]h ]h"]h$]h&]uh1jShjDubeh}(h]h ]h"]h$]h&]uh1j<hjDhM\ hjKDubj=)}(h0``preferred_mem_loc`` preferred memory location h](jC)}(h``preferred_mem_loc``h]j)}(hjDh]hpreferred_mem_loc}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM_ hjDubjT)}(hhh]h)}(hpreferred memory locationh]hpreferred memory location}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhM_ hjEubah}(h]h ]h"]h$]h&]uh1jShjDubeh}(h]h ]h"]h$]h&]uh1j<hjEhM_ hjKDubj=)}(h5``preferred_mem_loc.devmem_fd`` fd for preferred loc h](jC)}(h``preferred_mem_loc.devmem_fd``h]j)}(hj8Eh]hpreferred_mem_loc.devmem_fd}(hj:EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Eubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMa hj2EubjT)}(hhh]h)}(hfd for preferred loch]hfd for preferred loc}(hjQEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMEhMa hjNEubah}(h]h ]h"]h$]h&]uh1jShj2Eubeh}(h]h ]h"]h$]h&]uh1j<hjMEhMa hjKDubj=)}(h=``preferred_mem_loc.migration_policy`` Page migration policy h](jC)}(h&``preferred_mem_loc.migration_policy``h]j)}(hjqEh]h"preferred_mem_loc.migration_policy}(hjsEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoEubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMd hjkEubjT)}(hhh]h)}(hPage migration policyh]hPage migration policy}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMd hjEubah}(h]h ]h"]h$]h&]uh1jShjkEubeh}(h]h ]h"]h$]h&]uh1j<hjEhMd hjKDubj=)}(h ``atomic`` Atomic access policy h](jC)}(h ``atomic``h]j)}(hjEh]hatomic}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMh hjEubjT)}(hhh]h)}(hAtomic access policyh]hAtomic access policy}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMh hjEubah}(h]h ]h"]h$]h&]uh1jShjEubeh}(h]h ]h"]h$]h&]uh1j<hjEhMh hjKDubj=)}(h ``atomic.val`` atomic attribute h](jC)}(h``atomic.val``h]j)}(hjEh]h atomic.val}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMj hjEubjT)}(hhh]h)}(hatomic attributeh]hatomic attribute}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMj hjEubah}(h]h ]h"]h$]h&]uh1jShjEubeh}(h]h ]h"]h$]h&]uh1j<hjEhMj hjKDubj=)}(h``atomic.reserved`` Reserved h](jC)}(h``atomic.reserved``h]j)}(hjFh]hatomic.reserved}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMm hjFubjT)}(hhh]h)}(hReservedh]hReserved}(hj5FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1FhMm hj2Fubah}(h]h ]h"]h$]h&]uh1jShjFubeh}(h]h ]h"]h$]h&]uh1j<hj1FhMm hjKDubj=)}(h)``pat_index`` Page attribute table index h](jC)}(h ``pat_index``h]j)}(hjUFh]h pat_index}(hjWFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSFubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMq hjOFubjT)}(hhh]h)}(hPage attribute table indexh]hPage attribute table index}(hjnFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjFhMq hjkFubah}(h]h ]h"]h$]h&]uh1jShjOFubeh}(h]h ]h"]h$]h&]uh1j<hjjFhMq hjKDubj=)}(h``pat_index.val`` PAT index h](jC)}(h``pat_index.val``h]j)}(hjFh]h pat_index.val}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMs hjFubjT)}(hhh]h)}(h PAT indexh]h PAT index}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMs hjFubah}(h]h ]h"]h$]h&]uh1jShjFubeh}(h]h ]h"]h$]h&]uh1j<hjFhMs hjKDubj=)}(h ``pat_index.reserved`` Reserved h](jC)}(h``pat_index.reserved``h]j)}(hjFh]hpat_index.reserved}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMv hjFubjT)}(hhh]h)}(hReservedh]hReserved}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMv hjFubah}(h]h ]h"]h$]h&]uh1jShjFubeh}(h]h ]h"]h$]h&]uh1j<hjFhMv hjKDubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjGh]hreserved}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMy hjFubjT)}(hhh]h)}(hReservedh]hReserved}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMz hjGubah}(h]h ]h"]h$]h&]uh1jShjFubeh}(h]h ]h"]h$]h&]uh1j<hjGhMy hjKDubeh}(h]h ]h"]h$]h&]uh1j7hjDubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjCGh]h Description}(hjEGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAGubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM} hjhhubh)}(hThis structure is provided by userspace and filled by KMD in response to the DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS ioctl. It describes memory attributes of memory ranges within a user specified address range in a VM.h]hThis structure is provided by userspace and filled by KMD in response to the DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS ioctl. It describes memory attributes of memory ranges within a user specified address range in a VM.}(hjYGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMJ hjhhubh)}(hXThe structure includes information such as atomic access policy, page attribute table (PAT) index, and preferred memory location. Userspace allocates an array of these structures and passes a pointer to the ioctl to retrieve attributes for each memory range.h]hXThe structure includes information such as atomic access policy, page attribute table (PAT) index, and preferred memory location. Userspace allocates an array of these structures and passes a pointer to the ioctl to retrieve attributes for each memory range.}(hjhGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMN hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_xe_vm_query_mem_range_attr (C struct) c.drm_xe_vm_query_mem_range_attrhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_vm_query_mem_range_attrh]j)}(h%struct drm_xe_vm_query_mem_range_attrh](j)}(hjh]hstruct}(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjGhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhMV ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjGhMV ubj!)}(hdrm_xe_vm_query_mem_range_attrh]j')}(hjGh]hdrm_xe_vm_query_mem_range_attr}(hjGhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjGubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjGhhhjGhMV ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjGhhhjGhMV ubah}(h]jGah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjGhMV hjGhhubjU)}(hhh]h)}(h8Input of :c:type:`DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS`h](h Input of }(hjGhhhNhNubh)}(h/:c:type:`DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS`h]j)}(hjGh]h%DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS}(hjGhhhNhNubah}(h]h ](j7jqc-typeeh"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]refdocjC refdomainjqreftypetype refexplicitrefwarnjIjL)}jO]j)}jjGsb c.drm_xe_vm_query_mem_range_attrasbjQ%DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRSuh1hhjhKhjGubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM~ hjGhhubah}(h]h ]h"]h$]h&]uh1jThjGhhhjGhMV ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjHjxjHjyjzj{uh1jhhhjhjhM ubj})}(hX**Definition**:: struct drm_xe_vm_query_mem_range_attr { __u64 extensions; __u32 vm_id; __u32 num_mem_ranges; __u64 start; __u64 range; __u64 sizeof_mem_range_attr; __u64 vector_of_mem_attr; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``vm_id`` vm_id of the virtual range ``num_mem_ranges`` number of mem_ranges in range ``start`` start of the virtual address range ``range`` size of the virtual address range ``sizeof_mem_range_attr`` size of struct drm_xe_mem_range_attr ``vector_of_mem_attr`` userptr to array of struct drm_xe_mem_range_attr ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh:}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjHubj)}(hstruct drm_xe_vm_query_mem_range_attr { __u64 extensions; __u32 vm_id; __u32 num_mem_ranges; __u64 start; __u64 range; __u64 sizeof_mem_range_attr; __u64 vector_of_mem_attr; __u64 reserved[2]; };h]hstruct drm_xe_vm_query_mem_range_attr { __u64 extensions; __u32 vm_id; __u32 num_mem_ranges; __u64 start; __u64 range; __u64 sizeof_mem_range_attr; __u64 vector_of_mem_attr; __u64 reserved[2]; };}hj5Hsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjHubh)}(h **Members**h]j)}(hjFHh]hMembers}(hjHHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDHubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjHubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjeHh]h extensions}(hjgHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcHubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj_HubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hj~HhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzHhM hj{Hubah}(h]h ]h"]h$]h&]uh1jShj_Hubeh}(h]h ]h"]h$]h&]uh1j<hjzHhM hj\Hubj=)}(h%``vm_id`` vm_id of the virtual range h](jC)}(h ``vm_id``h]j)}(hjHh]hvm_id}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjHubjT)}(hhh]h)}(hvm_id of the virtual rangeh]hvm_id of the virtual range}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM hjHubah}(h]h ]h"]h$]h&]uh1jShjHubeh}(h]h ]h"]h$]h&]uh1j<hjHhM hj\Hubj=)}(h1``num_mem_ranges`` number of mem_ranges in range h](jC)}(h``num_mem_ranges``h]j)}(hjHh]hnum_mem_ranges}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjHubjT)}(hhh]h)}(hnumber of mem_ranges in rangeh]hnumber of mem_ranges in range}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhM hjHubah}(h]h ]h"]h$]h&]uh1jShjHubeh}(h]h ]h"]h$]h&]uh1j<hjHhM hj\Hubj=)}(h-``start`` start of the virtual address range h](jC)}(h ``start``h]j)}(hjIh]hstart}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj IubjT)}(hhh]h)}(h"start of the virtual address rangeh]h"start of the virtual address range}(hj)IhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%IhM hj&Iubah}(h]h ]h"]h$]h&]uh1jShj Iubeh}(h]h ]h"]h$]h&]uh1j<hj%IhM hj\Hubj=)}(h,``range`` size of the virtual address range h](jC)}(h ``range``h]j)}(hjIIh]hrange}(hjKIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGIubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjCIubjT)}(hhh]h)}(h!size of the virtual address rangeh]h!size of the virtual address range}(hjbIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^IhM hj_Iubah}(h]h ]h"]h$]h&]uh1jShjCIubeh}(h]h ]h"]h$]h&]uh1j<hj^IhM hj\Hubj=)}(h?``sizeof_mem_range_attr`` size of struct drm_xe_mem_range_attr h](jC)}(h``sizeof_mem_range_attr``h]j)}(hjIh]hsizeof_mem_range_attr}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj|IubjT)}(hhh]h)}(h$size of struct drm_xe_mem_range_attrh]h$size of struct drm_xe_mem_range_attr}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhM hjIubah}(h]h ]h"]h$]h&]uh1jShj|Iubeh}(h]h ]h"]h$]h&]uh1j<hjIhM hj\Hubj=)}(hH``vector_of_mem_attr`` userptr to array of struct drm_xe_mem_range_attr h](jC)}(h``vector_of_mem_attr``h]j)}(hjIh]hvector_of_mem_attr}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjIubjT)}(hhh]h)}(h0userptr to array of struct drm_xe_mem_range_attrh]h0userptr to array of struct drm_xe_mem_range_attr}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhM hjIubah}(h]h ]h"]h$]h&]uh1jShjIubeh}(h]h ]h"]h$]h&]uh1j<hjIhM hj\Hubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjIh]hreserved}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjIubjT)}(hhh]h)}(hReservedh]hReserved}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj Jubah}(h]h ]h"]h$]h&]uh1jShjIubeh}(h]h ]h"]h$]h&]uh1j<hj JhM hj\Hubeh}(h]h ]h"]h$]h&]uh1j7hjHubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hj7Jh]h Description}(hj9JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Jubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhubh)}(hX This structure is used to query memory attributes of memory regions within a user specified address range in a VM. It provides detailed information about each memory range, including atomic access policy, page attribute table (PAT) index, and preferred memory location.h]hX This structure is used to query memory attributes of memory regions within a user specified address range in a VM. It provides detailed information about each memory range, including atomic access policy, page attribute table (PAT) index, and preferred memory location.}(hjMJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhubh)}(hXBUserspace first calls the ioctl with **num_mem_ranges** = 0, **sizeof_mem_range_attr** = 0 and **vector_of_mem_attr** = NULL to retrieve the number of memory regions and size of each memory range attribute. Then, it allocates a buffer of that size and calls the ioctl again to fill the buffer with memory range attributes.h](h%Userspace first calls the ioctl with }(hj\JhhhNhNubj)}(h**num_mem_ranges**h]hnum_mem_ranges}(hjdJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Jubh = 0, }(hj\JhhhNhNubj)}(h**sizeof_mem_range_attr**h]hsizeof_mem_range_attr}(hjvJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Jubh = 0 and }(hj\JhhhNhNubj)}(h**vector_of_mem_attr**h]hvector_of_mem_attr}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Jubh = NULL to retrieve the number of memory regions and size of each memory range attribute. Then, it allocates a buffer of that size and calls the ioctl again to fill the buffer with memory range attributes.}(hj\JhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhubh)}(hIf second call fails with -ENOSPC, it means memory ranges changed between first call and now, retry IOCTL again with **num_mem_ranges** = 0, **sizeof_mem_range_attr** = 0 and **vector_of_mem_attr** = NULL followed by second ioctl call.h](huIf second call fails with -ENOSPC, it means memory ranges changed between first call and now, retry IOCTL again with }(hjJhhhNhNubj)}(h**num_mem_ranges**h]hnum_mem_ranges}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh = 0, }(hjJhhhNhNubj)}(h**sizeof_mem_range_attr**h]hsizeof_mem_range_attr}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh = 0 and }(hjJhhhNhNubj)}(h**vector_of_mem_attr**h]hvector_of_mem_attr}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh& = NULL followed by second ioctl call.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhubh)}(h **Example**h]j)}(hjJh]hExample}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhubj)}(hXistruct drm_xe_vm_query_mem_range_attr query = { .vm_id = vm_id, .start = 0x100000, .range = 0x2000, }; // First ioctl call to get num of mem regions and sizeof each attribute ioctl(fd, DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS, &query); // Allocate buffer for the memory region attributes void *ptr = malloc(query.num_mem_ranges * query.sizeof_mem_range_attr); void *ptr_start = ptr; query.vector_of_mem_attr = (uintptr_t)ptr; // Second ioctl call to actually fill the memory attributes ioctl(fd, DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS, &query); // Iterate over the returned memory region attributes for (unsigned int i = 0; i < query.num_mem_ranges; ++i) { struct drm_xe_mem_range_attr *attr = (struct drm_xe_mem_range_attr *)ptr; // Do something with attr // Move pointer by one entry ptr += query.sizeof_mem_range_attr; } free(ptr_start);h]hXistruct drm_xe_vm_query_mem_range_attr query = { .vm_id = vm_id, .start = 0x100000, .range = 0x2000, }; // First ioctl call to get num of mem regions and sizeof each attribute ioctl(fd, DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS, &query); // Allocate buffer for the memory region attributes void *ptr = malloc(query.num_mem_ranges * query.sizeof_mem_range_attr); void *ptr_start = ptr; query.vector_of_mem_attr = (uintptr_t)ptr; // Second ioctl call to actually fill the memory attributes ioctl(fd, DRM_IOCTL_XE_VM_QUERY_MEM_RANGE_ATTRS, &query); // Iterate over the returned memory region attributes for (unsigned int i = 0; i < query.num_mem_ranges; ++i) { struct drm_xe_mem_range_attr *attr = (struct drm_xe_mem_range_attr *)ptr; // Do something with attr // Move pointer by one entry ptr += query.sizeof_mem_range_attr; } free(ptr_start);}hjJsbah}(h]h ]h"]h$]h&]j>j?jOjPjQjR}uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)drm_xe_exec_queue_set_property (C struct) c.drm_xe_exec_queue_set_propertyhNtauh1jhjhhhjhM ubj)}(hhh](j)}(hdrm_xe_exec_queue_set_propertyh]j)}(h%struct drm_xe_exec_queue_set_propertyh](j)}(hjh]hstruct}(hj'KhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#KhhhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM ubj)}(h h]h }(hj5KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#Khhhj4KhM ubj!)}(hdrm_xe_exec_queue_set_propertyh]j')}(hj!Kh]hdrm_xe_exec_queue_set_property}(hjGKhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjCKubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj#Khhhj4KhM ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjKhhhj4KhM ubah}(h]jKah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj4KhM hjKhhubjU)}(hhh]h)}(hexec queue set propertyh]hexec queue set property}(hjiKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjfKhhubah}(h]h ]h"]h$]h&]uh1jThjKhhhj4KhM ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjKjxjKjyjzj{uh1jhhhjhjhM ubj})}(hXz**Definition**:: struct drm_xe_exec_queue_set_property { __u64 extensions; __u32 exec_queue_id; __u32 property; __u64 value; __u64 reserved[2]; }; **Members** ``extensions`` Pointer to the first extension struct, if any ``exec_queue_id`` Exec queue ID ``property`` property to set ``value`` property value ``reserved`` Reservedh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh:}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjKubj)}(hstruct drm_xe_exec_queue_set_property { __u64 extensions; __u32 exec_queue_id; __u32 property; __u64 value; __u64 reserved[2]; };h]hstruct drm_xe_exec_queue_set_property { __u64 extensions; __u32 exec_queue_id; __u32 property; __u64 value; __u64 reserved[2]; };}hjKsbah}(h]h ]h"]h$]h&]j>j?uh1jhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjKubh)}(h **Members**h]j)}(hjKh]hMembers}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjKubj8)}(hhh](j=)}(h=``extensions`` Pointer to the first extension struct, if any h](jC)}(h``extensions``h]j)}(hjKh]h extensions}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjKubjT)}(hhh]h)}(h-Pointer to the first extension struct, if anyh]h-Pointer to the first extension struct, if any}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM hjKubah}(h]h ]h"]h$]h&]uh1jShjKubeh}(h]h ]h"]h$]h&]uh1j<hjKhM hjKubj=)}(h ``exec_queue_id`` Exec queue ID h](jC)}(h``exec_queue_id``h]j)}(hjLh]h exec_queue_id}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Lubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj LubjT)}(hhh]h)}(h Exec queue IDh]h Exec queue ID}(hj(LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$LhM hj%Lubah}(h]h ]h"]h$]h&]uh1jShj Lubeh}(h]h ]h"]h$]h&]uh1j<hj$LhM hjKubj=)}(h``property`` property to set h](jC)}(h ``property``h]j)}(hjHLh]hproperty}(hjJLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFLubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjBLubjT)}(hhh]h)}(hproperty to seth]hproperty to set}(hjaLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]LhM hj^Lubah}(h]h ]h"]h$]h&]uh1jShjBLubeh}(h]h ]h"]h$]h&]uh1j<hj]LhM hjKubj=)}(h``value`` property value h](jC)}(h ``value``h]j)}(hjLh]hvalue}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hj{LubjT)}(hhh]h)}(hproperty valueh]hproperty value}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM hjLubah}(h]h ]h"]h$]h&]uh1jShj{Lubeh}(h]h ]h"]h$]h&]uh1j<hjLhM hjKubj=)}(h``reserved`` Reservedh](jC)}(h ``reserved``h]j)}(hjLh]hreserved}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jBhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjLubjT)}(hhh]h)}(hReservedh]hReserved}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjLubah}(h]h ]h"]h$]h&]uh1jShjLubeh}(h]h ]h"]h$]h&]uh1j<hjLhM hjKubeh}(h]h ]h"]h$]h&]uh1j7hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjhhhjhM ubh)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhubh)}(hSets execution queue properties dynamically. Currently only ``DRM_XE_EXEC_QUEUE_SET_PROPERTY_MULTI_QUEUE_PRIORITY`` property can be dynamically set.h](hMah ]h"] xe drm rasah$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhj3}jTMj4Msj5}j>Mj4Msubh)}(hThe enums and strings defined below map to the attributes of the DRM RAS Netlink Interface. Refer to Documentation/netlink/specs/drm_ras.yaml for complete interface specification.h]hThe enums and strings defined below map to the attributes of the DRM RAS Netlink Interface. Refer to Documentation/netlink/specs/drm_ras.yaml for complete interface specification.}(hjZMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhY/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:31: ./include/uapi/drm/xe_drm.hhM hjhhubeh}(h]jah ]h"] drm/xe uapiah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hdrm/asahi uAPIh]hdrm/asahi uAPI}(hjsMhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjpMhhhhhK"ubj )}(h#.. _Introduction to the Asahi UAPI:h]h}(h]h ]h"]h$]h&]hʌintroduction-to-the-asahi-uapiuh1j hKhjpMhhhNubh)}(h"**Introduction to the Asahi UAPI**h]j)}(hjMh]hIntroduction to the Asahi UAPI}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]jMah ]h"]introduction to the asahi uapiah$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjpMhhj3}jMjMsj5}jMjMsubh)}(h.This documentation describes the Asahi IOCTLs.h]h.This documentation describes the Asahi IOCTLs.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjpMhhubh)}(hZJust a few generic rules about the data passed to the Asahi IOCTLs (cribbed from Panthor):h]hZJust a few generic rules about the data passed to the Asahi IOCTLs (cribbed from Panthor):}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjpMhhubh)}(hhh](h)}(hsStructures must be aligned on 64-bit/8-byte. If the object is not naturally aligned, a padding field must be added.h]h)}(hsStructures must be aligned on 64-bit/8-byte. If the object is not naturally aligned, a padding field must be added.h]hsStructures must be aligned on 64-bit/8-byte. If the object is not naturally aligned, a padding field must be added.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjMubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(hXFields must be explicitly aligned to their natural type alignment with pad[0..N] fields.h]h)}(hXFields must be explicitly aligned to their natural type alignment with pad[0..N] fields.h]hXFields must be explicitly aligned to their natural type alignment with pad[0..N] fields.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjMubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(hNAll padding fields will be checked by the driver to make sure they are zeroed.h]h)}(hNAll padding fields will be checked by the driver to make sure they are zeroed.h]hNAll padding fields will be checked by the driver to make sure they are zeroed.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjMubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(h-Flags can be added, but not removed/replaced.h]h)}(hjNh]h-Flags can be added, but not removed/replaced.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjNubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(hX9New fields can be added to the main structures (the structures directly passed to the ioctl). Those fields can be added at the end of the structure, or replace existing padding fields. Any new field being added must preserve the behavior that existed before those fields were added when a value of zero is passed.h]h)}(hX9New fields can be added to the main structures (the structures directly passed to the ioctl). Those fields can be added at the end of the structure, or replace existing padding fields. Any new field being added must preserve the behavior that existed before those fields were added when a value of zero is passed.h]hX9New fields can be added to the main structures (the structures directly passed to the ioctl). Those fields can be added at the end of the structure, or replace existing padding fields. Any new field being added must preserve the behavior that existed before those fields were added when a value of zero is passed.}(hj/NhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhj+Nubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(hNew fields can be added to indirect objects (objects pointed by the main structure), iff those objects are passed a size to reflect the size known by the userspace driver (see drm_asahi_cmd_header::size).h]h)}(hNew fields can be added to indirect objects (objects pointed by the main structure), iff those objects are passed a size to reflect the size known by the userspace driver (see drm_asahi_cmd_header::size).h]hNew fields can be added to indirect objects (objects pointed by the main structure), iff those objects are passed a size to reflect the size known by the userspace driver (see drm_asahi_cmd_header::size).}(hjHNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK"hjDNubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(hIf the kernel driver is too old to know some fields, those will be ignored if zero, and otherwise rejected (and so will be zero on output).h]h)}(hIf the kernel driver is too old to know some fields, those will be ignored if zero, and otherwise rejected (and so will be zero on output).h]hIf the kernel driver is too old to know some fields, those will be ignored if zero, and otherwise rejected (and so will be zero on output).}(hjaNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK&hj]Nubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(h~If userspace is too old to know some fields, those will be zeroed (input) before the structure is parsed by the kernel driver.h]h)}(h~If userspace is too old to know some fields, those will be zeroed (input) before the structure is parsed by the kernel driver.h]h~If userspace is too old to know some fields, those will be zeroed (input) before the structure is parsed by the kernel driver.}(hjzNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK(hjvNubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(hEach new flag/field addition must come with a driver version update so the userspace driver doesn't have to guess which flags are supported.h]h)}(hEach new flag/field addition must come with a driver version update so the userspace driver doesn't have to guess which flags are supported.h]hEach new flag/field addition must come with a driver version update so the userspace driver doesn’t have to guess which flags are supported.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK*hjNubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(h`Structures should not contain unions, as this would defeat the extensibility of such structures.h]h)}(h`Structures should not contain unions, as this would defeat the extensibility of such structures.h]h`Structures should not contain unions, as this would defeat the extensibility of such structures.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK,hjNubah}(h]h ]h"]h$]h&]uh1hhjMubh)}(hrIOCTLs can't be removed or replaced. New IOCTL IDs should be placed at the end of the drm_asahi_ioctl_id enum. h]h)}(hnIOCTLs can't be removed or replaced. New IOCTL IDs should be placed at the end of the drm_asahi_ioctl_id enum.h]hpIOCTLs can’t be removed or replaced. New IOCTL IDs should be placed at the end of the drm_asahi_ioctl_id enum.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK.hjNubah}(h]h ]h"]h$]h&]uh1hhjMubeh}(h]h ]h"]h$]h&]jQ jR uh1hhjMhKhjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_ioctl_id (C enum)c.drm_asahi_ioctl_idhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_ioctl_idh]j)}(henum drm_asahi_ioctl_idh](j)}(hjh]henum}(hjNhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjNhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK4ubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhhjOhK4ubj!)}(hdrm_asahi_ioctl_idh]j')}(hjNh]hdrm_asahi_ioctl_id}(hjOhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjOubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjNhhhjOhK4ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjNhhhjOhK4ubah}(h]jNah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjOhK4hjNhhubjU)}(hhh]h)}(h IOCTL IDsh]h IOCTL IDs}(hj;OhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK5hj8Ohhubah}(h]h ]h"]h$]h&]uh1jThjNhhhjOhK4ubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjSOjxjSOjyjzj{uh1jhhhjpMhNhNubj})}(hX**Constants** ``DRM_ASAHI_GET_PARAMS`` Query device properties. ``DRM_ASAHI_GET_TIME`` Query device time. ``DRM_ASAHI_VM_CREATE`` Create a GPU VM address space. ``DRM_ASAHI_VM_DESTROY`` Destroy a VM. ``DRM_ASAHI_VM_BIND`` Bind/unbind memory to a VM. ``DRM_ASAHI_GEM_CREATE`` Create a buffer object. ``DRM_ASAHI_GEM_MMAP_OFFSET`` Get offset to pass to mmap() to map a given GEM handle. ``DRM_ASAHI_GEM_BIND_OBJECT`` Bind memory as a special object ``DRM_ASAHI_QUEUE_CREATE`` Create a scheduling queue. ``DRM_ASAHI_QUEUE_DESTROY`` Destroy a scheduling queue. ``DRM_ASAHI_SUBMIT`` Submit commands to a queue.h](h)}(h **Constants**h]j)}(hj]Oh]h Constants}(hj_OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Oubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK9hjWOubj8)}(hhh](j=)}(h2``DRM_ASAHI_GET_PARAMS`` Query device properties. h](jC)}(h``DRM_ASAHI_GET_PARAMS``h]j)}(hj|Oh]hDRM_ASAHI_GET_PARAMS}(hj~OhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzOubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK``DRM_ASAHI_GEM_BIND_OBJECT`` Bind memory as a special object h](jC)}(h``DRM_ASAHI_GEM_BIND_OBJECT``h]j)}(hj Qh]hDRM_ASAHI_GEM_BIND_OBJECT}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Qubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKRhjQubjT)}(hhh]h)}(hBind memory as a special objecth]hBind memory as a special object}(hj%QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!QhKRhj"Qubah}(h]h ]h"]h$]h&]uh1jShjQubeh}(h]h ]h"]h$]h&]uh1j<hj!QhKRhjsOubj=)}(h6``DRM_ASAHI_QUEUE_CREATE`` Create a scheduling queue. h](jC)}(h``DRM_ASAHI_QUEUE_CREATE``h]j)}(hjEQh]hDRM_ASAHI_QUEUE_CREATE}(hjGQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCQubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKUhj?QubjT)}(hhh]h)}(hCreate a scheduling queue.h]hCreate a scheduling queue.}(hj^QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZQhKUhj[Qubah}(h]h ]h"]h$]h&]uh1jShj?Qubeh}(h]h ]h"]h$]h&]uh1j<hjZQhKUhjsOubj=)}(h8``DRM_ASAHI_QUEUE_DESTROY`` Destroy a scheduling queue. h](jC)}(h``DRM_ASAHI_QUEUE_DESTROY``h]j)}(hj~Qh]hDRM_ASAHI_QUEUE_DESTROY}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|Qubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKXhjxQubjT)}(hhh]h)}(hDestroy a scheduling queue.h]hDestroy a scheduling queue.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhKXhjQubah}(h]h ]h"]h$]h&]uh1jShjxQubeh}(h]h ]h"]h$]h&]uh1j<hjQhKXhjsOubj=)}(h0``DRM_ASAHI_SUBMIT`` Submit commands to a queue.h](jC)}(h``DRM_ASAHI_SUBMIT``h]j)}(hjQh]hDRM_ASAHI_SUBMIT}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKZhjQubjT)}(hhh]h)}(hSubmit commands to a queue.h]hSubmit commands to a queue.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK[hjQubah}(h]h ]h"]h$]h&]uh1jShjQubeh}(h]h ]h"]h$]h&]uh1j<hjQhKZhjsOubeh}(h]h ]h"]h$]h&]uh1j7hjWOubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubh)}(h**Description**h]j)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK]hjpMhhubh)}(hMPlace new ioctls at the end, don't re-order, don't replace or remove entries.h]hQPlace new ioctls at the end, don’t re-order, don’t replace or remove entries.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK6hjpMhhubh)}(h]These IDs are not meant to be used directly. Use the DRM_IOCTL_ASAHI_xxx definitions instead.h]h]These IDs are not meant to be used directly. Use the DRM_IOCTL_ASAHI_xxx definitions instead.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK8hjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_asahi_params_global (C struct)c.drm_asahi_params_globalhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_params_globalh]j)}(hstruct drm_asahi_params_globalh](j)}(hjh]hstruct}(hjGRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjCRhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK>ubj)}(h h]h }(hjURhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCRhhhjTRhK>ubj!)}(hdrm_asahi_params_globalh]j')}(hjARh]hdrm_asahi_params_global}(hjgRhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjcRubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjCRhhhjTRhK>ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj?RhhhjTRhK>ubah}(h]j:Rah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjTRhK>hjubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjRjxjRjyjzj{uh1jhhhjpMhNhNubj})}(hX **Definition**:: struct drm_asahi_params_global { __u64 features; __u32 gpu_generation; __u32 gpu_variant; __u32 gpu_revision; __u32 chip_id; __u32 num_dies; __u32 num_clusters_total; __u32 num_cores_per_cluster; __u32 max_frequency_khz; __u64 core_masks[DRM_ASAHI_MAX_CLUSTERS]; __u64 vm_start; __u64 vm_end; __u64 vm_kernel_min_size; __u32 max_commands_per_submission; __u32 max_attachments; __u64 command_timestamp_frequency_hz; }; **Members** ``features`` Feature bits from drm_asahi_feature ``gpu_generation`` GPU generation, e.g. 13 for G13G ``gpu_variant`` GPU variant as a character, e.g. 'C' for G13C ``gpu_revision`` GPU revision in BCD, e.g. 0x00 for 'A0' or 0x21 for 'C1' ``chip_id`` Chip ID in BCD, e.g. 0x8103 for T8103 ``num_dies`` Number of dies in the SoC ``num_clusters_total`` Number of GPU clusters (across all dies) ``num_cores_per_cluster`` Number of logical cores per cluster (including inactive/nonexistent) ``max_frequency_khz`` Maximum GPU core clock frequency ``core_masks`` Bitmask of present/enabled cores per cluster ``vm_start`` VM range start VMA. Together with **vm_end**, this defines the window of valid GPU VAs. Userspace is expected to subdivide VAs out of this window. This window contains all virtual addresses that userspace needs to know about. There may be kernel-internal GPU VAs outside this range, but that detail is not relevant here. ``vm_end`` VM range end VMA ``vm_kernel_min_size`` Minimum kernel VMA window size. When creating a VM, userspace is required to carve out a section of virtual addresses (within the range given by **vm_start** and **vm_end**). The kernel will allocate various internal structures within the specified VA range. Allowing userspace to choose the VA range for the kernel, rather than the kernel reserving VAs and requiring userspace to cope, can assist in implementing SVM. ``max_commands_per_submission`` Maximum number of supported commands per submission. This mirrors firmware limits. Userspace must split up larger command buffers, which may require inserting additional synchronization. ``max_attachments`` Maximum number of drm_asahi_attachment's per command ``command_timestamp_frequency_hz`` Timebase frequency for timestamps written during command execution, specified via drm_asahi_timestamp structures. As this rate is controlled by the firmware, it is a queryable parameter. Userspace must divide by this frequency to convert timestamps to seconds, rather than hardcoding a particular firmware's rate.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh:}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKihjRubj)}(hXstruct drm_asahi_params_global { __u64 features; __u32 gpu_generation; __u32 gpu_variant; __u32 gpu_revision; __u32 chip_id; __u32 num_dies; __u32 num_clusters_total; __u32 num_cores_per_cluster; __u32 max_frequency_khz; __u64 core_masks[DRM_ASAHI_MAX_CLUSTERS]; __u64 vm_start; __u64 vm_end; __u64 vm_kernel_min_size; __u32 max_commands_per_submission; __u32 max_attachments; __u64 command_timestamp_frequency_hz; };h]hXstruct drm_asahi_params_global { __u64 features; __u32 gpu_generation; __u32 gpu_variant; __u32 gpu_revision; __u32 chip_id; __u32 num_dies; __u32 num_clusters_total; __u32 num_cores_per_cluster; __u32 max_frequency_khz; __u64 core_masks[DRM_ASAHI_MAX_CLUSTERS]; __u64 vm_start; __u64 vm_end; __u64 vm_kernel_min_size; __u32 max_commands_per_submission; __u32 max_attachments; __u64 command_timestamp_frequency_hz; };}hjRsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKkhjRubh)}(h **Members**h]j)}(hjRh]hMembers}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK~hjRubj8)}(hhh](j=)}(h1``features`` Feature bits from drm_asahi_feature h](jC)}(h ``features``h]j)}(hjRh]hfeatures}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKkhjRubjT)}(hhh]h)}(h#Feature bits from drm_asahi_featureh]h#Feature bits from drm_asahi_feature}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ShKkhj Subah}(h]h ]h"]h$]h&]uh1jShjRubeh}(h]h ]h"]h$]h&]uh1j<hj ShKkhjRubj=)}(h4``gpu_generation`` GPU generation, e.g. 13 for G13G h](jC)}(h``gpu_generation``h]j)}(hj/Sh]hgpu_generation}(hj1ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Subah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKnhj)SubjT)}(hhh]h)}(h GPU generation, e.g. 13 for G13Gh]h GPU generation, e.g. 13 for G13G}(hjHShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDShKnhjESubah}(h]h ]h"]h$]h&]uh1jShj)Subeh}(h]h ]h"]h$]h&]uh1j<hjDShKnhjRubj=)}(h>``gpu_variant`` GPU variant as a character, e.g. 'C' for G13C h](jC)}(h``gpu_variant``h]j)}(hjhSh]h gpu_variant}(hjjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfSubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKqhjbSubjT)}(hhh]h)}(h-GPU variant as a character, e.g. 'C' for G13Ch]h1GPU variant as a character, e.g. ‘C’ for G13C}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}ShKqhj~Subah}(h]h ]h"]h$]h&]uh1jShjbSubeh}(h]h ]h"]h$]h&]uh1j<hj}ShKqhjRubj=)}(hJ``gpu_revision`` GPU revision in BCD, e.g. 0x00 for 'A0' or 0x21 for 'C1' h](jC)}(h``gpu_revision``h]j)}(hjSh]h gpu_revision}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKvhjSubjT)}(hhh]h)}(h8GPU revision in BCD, e.g. 0x00 for 'A0' or 0x21 for 'C1'h]h@GPU revision in BCD, e.g. 0x00 for ‘A0’ or 0x21 for ‘C1’}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKuhjSubah}(h]h ]h"]h$]h&]uh1jShjSubeh}(h]h ]h"]h$]h&]uh1j<hjShKvhjRubj=)}(h2``chip_id`` Chip ID in BCD, e.g. 0x8103 for T8103 h](jC)}(h ``chip_id``h]j)}(hjSh]hchip_id}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKzhjSubjT)}(hhh]h)}(h%Chip ID in BCD, e.g. 0x8103 for T8103h]h%Chip ID in BCD, e.g. 0x8103 for T8103}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKzhjSubah}(h]h ]h"]h$]h&]uh1jShjSubeh}(h]h ]h"]h$]h&]uh1j<hjShKzhjRubj=)}(h'``num_dies`` Number of dies in the SoC h](jC)}(h ``num_dies``h]j)}(hjTh]hnum_dies}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhK}hjTubjT)}(hhh]h)}(hNumber of dies in the SoCh]hNumber of dies in the SoC}(hj-ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)ThK}hj*Tubah}(h]h ]h"]h$]h&]uh1jShjTubeh}(h]h ]h"]h$]h&]uh1j<hj)ThK}hjRubj=)}(h@``num_clusters_total`` Number of GPU clusters (across all dies) h](jC)}(h``num_clusters_total``h]j)}(hjMTh]hnum_clusters_total}(hjOThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKTubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjGTubjT)}(hhh]h)}(h(Number of GPU clusters (across all dies)h]h(Number of GPU clusters (across all dies)}(hjfThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbThKhjcTubah}(h]h ]h"]h$]h&]uh1jShjGTubeh}(h]h ]h"]h$]h&]uh1j<hjbThKhjRubj=)}(h_``num_cores_per_cluster`` Number of logical cores per cluster (including inactive/nonexistent) h](jC)}(h``num_cores_per_cluster``h]j)}(hjTh]hnum_cores_per_cluster}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjTubjT)}(hhh]h)}(hDNumber of logical cores per cluster (including inactive/nonexistent)h]hDNumber of logical cores per cluster (including inactive/nonexistent)}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjTubah}(h]h ]h"]h$]h&]uh1jShjTubeh}(h]h ]h"]h$]h&]uh1j<hjThKhjRubj=)}(h7``max_frequency_khz`` Maximum GPU core clock frequency h](jC)}(h``max_frequency_khz``h]j)}(hjTh]hmax_frequency_khz}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjTubjT)}(hhh]h)}(h Maximum GPU core clock frequencyh]h Maximum GPU core clock frequency}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThKhjTubah}(h]h ]h"]h$]h&]uh1jShjTubeh}(h]h ]h"]h$]h&]uh1j<hjThKhjRubj=)}(h<``core_masks`` Bitmask of present/enabled cores per cluster h](jC)}(h``core_masks``h]j)}(hjTh]h core_masks}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjTubjT)}(hhh]h)}(h,Bitmask of present/enabled cores per clusterh]h,Bitmask of present/enabled cores per cluster}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKhjUubah}(h]h ]h"]h$]h&]uh1jShjTubeh}(h]h ]h"]h$]h&]uh1j<hjUhKhjRubj=)}(hXO``vm_start`` VM range start VMA. Together with **vm_end**, this defines the window of valid GPU VAs. Userspace is expected to subdivide VAs out of this window. This window contains all virtual addresses that userspace needs to know about. There may be kernel-internal GPU VAs outside this range, but that detail is not relevant here. h](jC)}(h ``vm_start``h]j)}(hj2Uh]hvm_start}(hj4UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Uubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhj,UubjT)}(hhh](h)}(hVM range start VMA. Together with **vm_end**, this defines the window of valid GPU VAs. Userspace is expected to subdivide VAs out of this window.h](h"VM range start VMA. Together with }(hjKUhhhNhNubj)}(h **vm_end**h]hvm_end}(hjSUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKUubhf, this defines the window of valid GPU VAs. Userspace is expected to subdivide VAs out of this window.}(hjKUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjHUubh)}(hThis window contains all virtual addresses that userspace needs to know about. There may be kernel-internal GPU VAs outside this range, but that detail is not relevant here.h]hThis window contains all virtual addresses that userspace needs to know about. There may be kernel-internal GPU VAs outside this range, but that detail is not relevant here.}(hjlUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjHUubeh}(h]h ]h"]h$]h&]uh1jShj,Uubeh}(h]h ]h"]h$]h&]uh1j<hjGUhKhjRubj=)}(h``vm_end`` VM range end VMA h](jC)}(h ``vm_end``h]j)}(hjUh]hvm_end}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjUubjT)}(hhh]h)}(hVM range end VMAh]hVM range end VMA}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKhjUubah}(h]h ]h"]h$]h&]uh1jShjUubeh}(h]h ]h"]h$]h&]uh1j<hjUhKhjRubj=)}(hX``vm_kernel_min_size`` Minimum kernel VMA window size. When creating a VM, userspace is required to carve out a section of virtual addresses (within the range given by **vm_start** and **vm_end**). The kernel will allocate various internal structures within the specified VA range. Allowing userspace to choose the VA range for the kernel, rather than the kernel reserving VAs and requiring userspace to cope, can assist in implementing SVM. h](jC)}(h``vm_kernel_min_size``h]j)}(hjUh]hvm_kernel_min_size}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjUubjT)}(hhh](h)}(hMinimum kernel VMA window size.h]hMinimum kernel VMA window size.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjUubh)}(hWhen creating a VM, userspace is required to carve out a section of virtual addresses (within the range given by **vm_start** and **vm_end**). The kernel will allocate various internal structures within the specified VA range.h](hqWhen creating a VM, userspace is required to carve out a section of virtual addresses (within the range given by }(hjUhhhNhNubj)}(h **vm_start**h]hvm_start}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh and }(hjUhhhNhNubj)}(h **vm_end**h]hvm_end}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubhV). The kernel will allocate various internal structures within the specified VA range.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjUubh)}(hAllowing userspace to choose the VA range for the kernel, rather than the kernel reserving VAs and requiring userspace to cope, can assist in implementing SVM.h]hAllowing userspace to choose the VA range for the kernel, rather than the kernel reserving VAs and requiring userspace to cope, can assist in implementing SVM.}(hj!VhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjUubeh}(h]h ]h"]h$]h&]uh1jShjUubeh}(h]h ]h"]h$]h&]uh1j<hjUhKhjRubj=)}(h``max_commands_per_submission`` Maximum number of supported commands per submission. This mirrors firmware limits. Userspace must split up larger command buffers, which may require inserting additional synchronization. h](jC)}(h``max_commands_per_submission``h]j)}(hjBVh]hmax_commands_per_submission}(hjDVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Vubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjj?uh1j hjAWhhhjRWhKkubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj=WhhhjRWhKkubah}(h]j8Wah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjRWhKkhj:WhhubjU)}(hhh]h)}(h Feature bitsh]h Feature bits}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjWhhubah}(h]h ]h"]h$]h&]uh1jThj:WhhhjRWhKkubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjWjxjWjyjzj{uh1jhhhjpMhNhNubj})}(hXB**Constants** ``DRM_ASAHI_FEATURE_SOFT_FAULTS`` GPU has "soft fault" enabled. Shader loads of unmapped memory will return zero. Shader stores to unmapped memory will be silently discarded. Note that only shader load/store is affected. Other hardware units are not affected, notably including texture sampling. Soft fault is set when initializing the GPU and cannot be runtime toggled. Therefore, it is exposed as a feature bit and not a userspace-settable flag on the VM. When soft fault is enabled, userspace can speculate memory accesses more aggressively.h](h)}(h **Constants**h]j)}(hjWh]h Constants}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjWubj8)}(hhh]j=)}(hX!``DRM_ASAHI_FEATURE_SOFT_FAULTS`` GPU has "soft fault" enabled. Shader loads of unmapped memory will return zero. Shader stores to unmapped memory will be silently discarded. Note that only shader load/store is affected. Other hardware units are not affected, notably including texture sampling. Soft fault is set when initializing the GPU and cannot be runtime toggled. Therefore, it is exposed as a feature bit and not a userspace-settable flag on the VM. When soft fault is enabled, userspace can speculate memory accesses more aggressively.h](jC)}(h!``DRM_ASAHI_FEATURE_SOFT_FAULTS``h]j)}(hjWh]hDRM_ASAHI_FEATURE_SOFT_FAULTS}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjWubjT)}(hhh](h)}(hXGPU has "soft fault" enabled. Shader loads of unmapped memory will return zero. Shader stores to unmapped memory will be silently discarded. Note that only shader load/store is affected. Other hardware units are not affected, notably including texture sampling.h]hX GPU has “soft fault” enabled. Shader loads of unmapped memory will return zero. Shader stores to unmapped memory will be silently discarded. Note that only shader load/store is affected. Other hardware units are not affected, notably including texture sampling.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjWubh)}(hSoft fault is set when initializing the GPU and cannot be runtime toggled. Therefore, it is exposed as a feature bit and not a userspace-settable flag on the VM. When soft fault is enabled, userspace can speculate memory accesses more aggressively.h]hSoft fault is set when initializing the GPU and cannot be runtime toggled. Therefore, it is exposed as a feature bit and not a userspace-settable flag on the VM. When soft fault is enabled, userspace can speculate memory accesses more aggressively.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjWubeh}(h]h ]h"]h$]h&]uh1jShjWubeh}(h]h ]h"]h$]h&]uh1j<hjWhKhjWubah}(h]h ]h"]h$]h&]uh1j7hjWubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubh)}(h**Description**h]j)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjpMhhubh)}(hyThis covers only features that userspace cannot infer from the architecture version. Most features don't need to be here.h]h{This covers only features that userspace cannot infer from the architecture version. Most features don’t need to be here.}(hj0XhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_get_params (C struct)c.drm_asahi_get_paramshNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_get_paramsh]j)}(hstruct drm_asahi_get_paramsh](j)}(hjh]hstruct}(hjXXhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjTXhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKubj)}(h h]h }(hjfXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTXhhhjeXhKubj!)}(hdrm_asahi_get_paramsh]j')}(hjRXh]hdrm_asahi_get_params}(hjxXhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjtXubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjTXhhhjeXhKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjPXhhhjeXhKubah}(h]jKXah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjeXhKhjMXhhubjU)}(hhh]h)}(h.Arguments passed to DRM_IOCTL_ASAHI_GET_PARAMSh]h.Arguments passed to DRM_IOCTL_ASAHI_GET_PARAMS}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjXhhubah}(h]h ]h"]h$]h&]uh1jThjMXhhhjeXhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjXjxjXjyjzj{uh1jhhhjpMhNhNubj})}(hX**Definition**:: struct drm_asahi_get_params { __u32 param_group; __u32 pad; __u64 pointer; __u64 size; }; **Members** ``param_group`` Parameter group to fetch (MBZ) ``pad`` MBZ ``pointer`` User pointer to write parameter struct ``size`` Size of the user buffer. In case of older userspace, this may be less than sizeof(struct drm_asahi_params_global). The kernel will not write past the length specified here, allowing extensibility.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubh:}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjXubj)}(histruct drm_asahi_get_params { __u32 param_group; __u32 pad; __u64 pointer; __u64 size; };h]histruct drm_asahi_get_params { __u32 param_group; __u32 pad; __u64 pointer; __u64 size; };}hjXsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjXubh)}(h **Members**h]j)}(hjXh]hMembers}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjXubj8)}(hhh](j=)}(h/``param_group`` Parameter group to fetch (MBZ) h](jC)}(h``param_group``h]j)}(hjYh]h param_group}(hj YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjYubjT)}(hhh]h)}(hParameter group to fetch (MBZ)h]hParameter group to fetch (MBZ)}(hj YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhKhjYubah}(h]h ]h"]h$]h&]uh1jShjYubeh}(h]h ]h"]h$]h&]uh1j<hjYhKhjXubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hj@Yh]hpad}(hjBYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>Yubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhj:YubjT)}(hhh]h)}(hMBZh]hMBZ}(hjYYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUYhKhjVYubah}(h]h ]h"]h$]h&]uh1jShj:Yubeh}(h]h ]h"]h$]h&]uh1j<hjUYhKhjXubj=)}(h3``pointer`` User pointer to write parameter struct h](jC)}(h ``pointer``h]j)}(hjyYh]hpointer}(hj{YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwYubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjsYubjT)}(hhh]h)}(h&User pointer to write parameter structh]h&User pointer to write parameter struct}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhKhjYubah}(h]h ]h"]h$]h&]uh1jShjsYubeh}(h]h ]h"]h$]h&]uh1j<hjYhKhjXubj=)}(h``size`` Size of the user buffer. In case of older userspace, this may be less than sizeof(struct drm_asahi_params_global). The kernel will not write past the length specified here, allowing extensibility.h](jC)}(h``size``h]j)}(hjYh]hsize}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjYubjT)}(hhh]h)}(hSize of the user buffer. In case of older userspace, this may be less than sizeof(struct drm_asahi_params_global). The kernel will not write past the length specified here, allowing extensibility.h]hSize of the user buffer. In case of older userspace, this may be less than sizeof(struct drm_asahi_params_global). The kernel will not write past the length specified here, allowing extensibility.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjYubah}(h]h ]h"]h$]h&]uh1jShjYubeh}(h]h ]h"]h$]h&]uh1j<hjYhKhjXubeh}(h]h ]h"]h$]h&]uh1j7hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_vm_create (C struct)c.drm_asahi_vm_createhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_vm_createh]j)}(hstruct drm_asahi_vm_createh](j)}(hjh]hstruct}(hj ZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjZhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjZhKubj!)}(hdrm_asahi_vm_createh]j')}(hjZh]hdrm_asahi_vm_create}(hj,ZhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj(Zubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjZhhhjZhKubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjZhhhjZhKubah}(h]jYah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjZhKhjZhhubjU)}(hhh]h)}(h-Arguments passed to DRM_IOCTL_ASAHI_VM_CREATEh]h-Arguments passed to DRM_IOCTL_ASAHI_VM_CREATE}(hjNZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjKZhhubah}(h]h ]h"]h$]h&]uh1jThjZhhhjZhKubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjfZjxjfZjyjzj{uh1jhhhjpMhNhNubj})}(hX**Definition**:: struct drm_asahi_vm_create { __u64 kernel_start; __u64 kernel_end; __u32 vm_id; __u32 pad; }; **Members** ``kernel_start`` Start of the kernel-reserved address range. See drm_asahi_params_global::vm_kernel_min_size. Both **kernel_start** and **kernel_end** must be within the range of valid VAs given by drm_asahi_params_global::vm_start and drm_asahi_params_global::vm_end. The size of the kernel range (**kernel_end** - **kernel_start**) must be at least drm_asahi_params_global::vm_kernel_min_size. Userspace must not bind any memory on this VM into this reserved range, it is for kernel use only. ``kernel_end`` End of the kernel-reserved address range. See **kernel_start**. ``vm_id`` Returned VM ID ``pad`` MBZh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjrZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnZubh:}(hjnZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjjZubj)}(hmstruct drm_asahi_vm_create { __u64 kernel_start; __u64 kernel_end; __u32 vm_id; __u32 pad; };h]hmstruct drm_asahi_vm_create { __u64 kernel_start; __u64 kernel_end; __u32 vm_id; __u32 pad; };}hjZsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjjZubh)}(h **Members**h]j)}(hjZh]hMembers}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjjZubj8)}(hhh](j=)}(hX``kernel_start`` Start of the kernel-reserved address range. See drm_asahi_params_global::vm_kernel_min_size. Both **kernel_start** and **kernel_end** must be within the range of valid VAs given by drm_asahi_params_global::vm_start and drm_asahi_params_global::vm_end. The size of the kernel range (**kernel_end** - **kernel_start**) must be at least drm_asahi_params_global::vm_kernel_min_size. Userspace must not bind any memory on this VM into this reserved range, it is for kernel use only. h](jC)}(h``kernel_start``h]j)}(hjZh]h kernel_start}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjZubjT)}(hhh](h)}(h\Start of the kernel-reserved address range. See drm_asahi_params_global::vm_kernel_min_size.h]h\Start of the kernel-reserved address range. See drm_asahi_params_global::vm_kernel_min_size.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjZubh)}(hXBoth **kernel_start** and **kernel_end** must be within the range of valid VAs given by drm_asahi_params_global::vm_start and drm_asahi_params_global::vm_end. The size of the kernel range (**kernel_end** - **kernel_start**) must be at least drm_asahi_params_global::vm_kernel_min_size.h](hBoth }(hjZhhhNhNubj)}(h**kernel_start**h]h kernel_start}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh and }(hjZhhhNhNubj)}(h**kernel_end**h]h kernel_end}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh must be within the range of valid VAs given by drm_asahi_params_global::vm_start and drm_asahi_params_global::vm_end. The size of the kernel range (}(hjZhhhNhNubj)}(h**kernel_end**h]h kernel_end}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh - }(hjZhhhNhNubj)}(h**kernel_start**h]h kernel_start}(hj![hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh?) must be at least drm_asahi_params_global::vm_kernel_min_size.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjZubh)}(hbUserspace must not bind any memory on this VM into this reserved range, it is for kernel use only.h]hbUserspace must not bind any memory on this VM into this reserved range, it is for kernel use only.}(hj:[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhKhjZubeh}(h]h ]h"]h$]h&]uh1jShjZubeh}(h]h ]h"]h$]h&]uh1j<hjZhKhjZubj=)}(hO``kernel_end`` End of the kernel-reserved address range. See **kernel_start**. h](jC)}(h``kernel_end``h]j)}(hj[[h]h kernel_end}(hj][hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY[ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjU[ubjT)}(hhh]h)}(h?End of the kernel-reserved address range. See **kernel_start**.h](h.End of the kernel-reserved address range. See }(hjt[hhhNhNubj)}(h**kernel_start**h]h kernel_start}(hj|[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt[ubh.}(hjt[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjq[ubah}(h]h ]h"]h$]h&]uh1jShjU[ubeh}(h]h ]h"]h$]h&]uh1j<hjp[hMhjZubj=)}(h``vm_id`` Returned VM ID h](jC)}(h ``vm_id``h]j)}(hj[h]hvm_id}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM hj[ubjT)}(hhh]h)}(hReturned VM IDh]hReturned VM ID}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hM hj[ubah}(h]h ]h"]h$]h&]uh1jShj[ubeh}(h]h ]h"]h$]h&]uh1j<hj[hM hjZubj=)}(h ``pad`` MBZh](jC)}(h``pad``h]j)}(hj[h]hpad}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM hj[ubjT)}(hhh]h)}(hMBZh]hMBZ}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM hj[ubah}(h]h ]h"]h$]h&]uh1jShj[ubeh}(h]h ]h"]h$]h&]uh1j<hj[hM hjZubeh}(h]h ]h"]h$]h&]uh1j7hjjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_vm_destroy (C struct)c.drm_asahi_vm_destroyhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_vm_destroyh]j)}(hstruct drm_asahi_vm_destroyh](j)}(hjh]hstruct}(hj:\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6\hhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubj)}(h h]h }(hjH\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6\hhhjG\hMubj!)}(hdrm_asahi_vm_destroyh]j')}(hj4\h]hdrm_asahi_vm_destroy}(hjZ\hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjV\ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj6\hhhjG\hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj2\hhhjG\hMubah}(h]j-\ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjG\hMhj/\hhubjU)}(hhh]h)}(h.Arguments passed to DRM_IOCTL_ASAHI_VM_DESTROYh]h.Arguments passed to DRM_IOCTL_ASAHI_VM_DESTROY}(hj|\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjy\hhubah}(h]h ]h"]h$]h&]uh1jThj/\hhhjG\hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj\jxj\jyjzj{uh1jhhhjpMhNhNubj})}(h**Definition**:: struct drm_asahi_vm_destroy { __u32 vm_id; __u32 pad; }; **Members** ``vm_id`` VM ID to be destroyed ``pad`` MBZh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubh:}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj\ubj)}(h@struct drm_asahi_vm_destroy { __u32 vm_id; __u32 pad; };h]h@struct drm_asahi_vm_destroy { __u32 vm_id; __u32 pad; };}hj\sbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj\ubh)}(h **Members**h]j)}(hj\h]hMembers}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj\ubj8)}(hhh](j=)}(h ``vm_id`` VM ID to be destroyed h](jC)}(h ``vm_id``h]j)}(hj\h]hvm_id}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj\ubjT)}(hhh]h)}(hVM ID to be destroyedh]hVM ID to be destroyed}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1jShj\ubeh}(h]h ]h"]h$]h&]uh1j<hj\hMhj\ubj=)}(h ``pad`` MBZh](jC)}(h``pad``h]j)}(hj"]h]hpad}(hj$]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ]ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj]ubjT)}(hhh]h)}(hMBZh]hMBZ}(hj;]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj8]ubah}(h]h ]h"]h$]h&]uh1jShj]ubeh}(h]h ]h"]h$]h&]uh1j<hj7]hMhj\ubeh}(h]h ]h"]h$]h&]uh1j7hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_gem_flags (C enum)c.drm_asahi_gem_flagshNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_gem_flagsh]j)}(henum drm_asahi_gem_flagsh](j)}(hjh]henum}(hj|]hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjx]hhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx]hhhj]hMubj!)}(hdrm_asahi_gem_flagsh]j')}(hjv]h]hdrm_asahi_gem_flags}(hj]hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj]ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjx]hhhj]hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjt]hhhj]hMubah}(h]jo]ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj]hMhjq]hhubjU)}(hhh]h)}(hFlags for GEM creationh]hFlags for GEM creation}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj]hhubah}(h]h ]h"]h$]h&]uh1jThjq]hhhj]hMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwj]jxj]jyjzj{uh1jhhhjpMhNhNubj})}(h**Constants** ``DRM_ASAHI_GEM_WRITEBACK`` BO should be CPU-mapped as writeback. Map as writeback instead of write-combine. This optimizes for CPU reads. ``DRM_ASAHI_GEM_VM_PRIVATE`` BO is private to this GPU VM (no exports).h](h)}(h **Constants**h]j)}(hj]h]h Constants}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj]ubj8)}(hhh](j=)}(h``DRM_ASAHI_GEM_WRITEBACK`` BO should be CPU-mapped as writeback. Map as writeback instead of write-combine. This optimizes for CPU reads. h](jC)}(h``DRM_ASAHI_GEM_WRITEBACK``h]j)}(hj]h]hDRM_ASAHI_GEM_WRITEBACK}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM%hj]ubjT)}(hhh](h)}(h%BO should be CPU-mapped as writeback.h]h%BO should be CPU-mapped as writeback.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM"hj^ubh)}(hHMap as writeback instead of write-combine. This optimizes for CPU reads.h]hHMap as writeback instead of write-combine. This optimizes for CPU reads.}(hj'^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM$hj^ubeh}(h]h ]h"]h$]h&]uh1jShj]ubeh}(h]h ]h"]h$]h&]uh1j<hj^hM%hj]ubj=)}(hG``DRM_ASAHI_GEM_VM_PRIVATE`` BO is private to this GPU VM (no exports).h](jC)}(h``DRM_ASAHI_GEM_VM_PRIVATE``h]j)}(hjH^h]hDRM_ASAHI_GEM_VM_PRIVATE}(hjJ^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF^ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM'hjB^ubjT)}(hhh]h)}(h*BO is private to this GPU VM (no exports).h]h*BO is private to this GPU VM (no exports).}(hja^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM(hj^^ubah}(h]h ]h"]h$]h&]uh1jShjB^ubeh}(h]h ]h"]h$]h&]uh1j<hj]^hM'hj]ubeh}(h]h ]h"]h$]h&]uh1j7hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_gem_create (C struct)c.drm_asahi_gem_createhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_gem_createh]j)}(hstruct drm_asahi_gem_createh](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^hhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM-ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj^hM-ubj!)}(hdrm_asahi_gem_createh]j')}(hj^h]hdrm_asahi_gem_create}(hj^hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj^ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj^hhhj^hM-ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj^hhhj^hM-ubah}(h]j^ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj^hM-hj^hhubjU)}(hhh]h)}(h.Arguments passed to DRM_IOCTL_ASAHI_GEM_CREATEh]h.Arguments passed to DRM_IOCTL_ASAHI_GEM_CREATE}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM-hj^hhubah}(h]h ]h"]h$]h&]uh1jThj^hhhj^hM-ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj^jxj^jyjzj{uh1jhhhjpMhNhNubj})}(hXy**Definition**:: struct drm_asahi_gem_create { __u64 size; __u32 flags; __u32 vm_id; __u32 handle; __u32 pad; }; **Members** ``size`` Size of the BO ``flags`` Combination of drm_asahi_gem_flags flags. ``vm_id`` VM ID to assign to the BO, if DRM_ASAHI_GEM_VM_PRIVATE is set ``handle`` Returned GEM handle for the BO ``pad`` MBZh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh:}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM1hj_ubj)}(hsstruct drm_asahi_gem_create { __u64 size; __u32 flags; __u32 vm_id; __u32 handle; __u32 pad; };h]hsstruct drm_asahi_gem_create { __u64 size; __u32 flags; __u32 vm_id; __u32 handle; __u32 pad; };}hj!_sbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM3hj_ubh)}(h **Members**h]j)}(hj2_h]hMembers}(hj4_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0_ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM;hj_ubj8)}(hhh](j=)}(h``size`` Size of the BO h](jC)}(h``size``h]j)}(hjQ_h]hsize}(hjS_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO_ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM1hjK_ubjT)}(hhh]h)}(hSize of the BOh]hSize of the BO}(hjj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjf_hM1hjg_ubah}(h]h ]h"]h$]h&]uh1jShjK_ubeh}(h]h ]h"]h$]h&]uh1j<hjf_hM1hjH_ubj=)}(h4``flags`` Combination of drm_asahi_gem_flags flags. h](jC)}(h ``flags``h]j)}(hj_h]hflags}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM4hj_ubjT)}(hhh]h)}(h)Combination of drm_asahi_gem_flags flags.h]h)Combination of drm_asahi_gem_flags flags.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hM4hj_ubah}(h]h ]h"]h$]h&]uh1jShj_ubeh}(h]h ]h"]h$]h&]uh1j<hj_hM4hjH_ubj=)}(hH``vm_id`` VM ID to assign to the BO, if DRM_ASAHI_GEM_VM_PRIVATE is set h](jC)}(h ``vm_id``h]j)}(hj_h]hvm_id}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM8hj_ubjT)}(hhh]h)}(h=VM ID to assign to the BO, if DRM_ASAHI_GEM_VM_PRIVATE is seth]h=VM ID to assign to the BO, if DRM_ASAHI_GEM_VM_PRIVATE is set}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hM8hj_ubah}(h]h ]h"]h$]h&]uh1jShj_ubeh}(h]h ]h"]h$]h&]uh1j<hj_hM8hjH_ubj=)}(h*``handle`` Returned GEM handle for the BO h](jC)}(h ``handle``h]j)}(hj_h]hhandle}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM<hj_ubjT)}(hhh]h)}(hReturned GEM handle for the BOh]hReturned GEM handle for the BO}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hM<hj`ubah}(h]h ]h"]h$]h&]uh1jShj_ubeh}(h]h ]h"]h$]h&]uh1j<hj`hM<hjH_ubj=)}(h ``pad`` MBZh](jC)}(h``pad``h]j)}(hj5`h]hpad}(hj7`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3`ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM>hj/`ubjT)}(hhh]h)}(hMBZh]hMBZ}(hjN`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM?hjK`ubah}(h]h ]h"]h$]h&]uh1jShj/`ubeh}(h]h ]h"]h$]h&]uh1j<hjJ`hM>hjH_ubeh}(h]h ]h"]h$]h&]uh1j7hj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_asahi_gem_mmap_offset (C struct)c.drm_asahi_gem_mmap_offsethNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_gem_mmap_offseth]j)}(h struct drm_asahi_gem_mmap_offseth](j)}(hjh]hstruct}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj`hhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMEubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhj`hMEubj!)}(hdrm_asahi_gem_mmap_offseth]j')}(hj`h]hdrm_asahi_gem_mmap_offset}(hj`hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj`ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj`hhhj`hMEubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj`hhhj`hMEubah}(h]j`ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj`hMEhj`hhubjU)}(hhh]h)}(h3Arguments passed to DRM_IOCTL_ASAHI_GEM_MMAP_OFFSETh]h3Arguments passed to DRM_IOCTL_ASAHI_GEM_MMAP_OFFSET}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMChj`hhubah}(h]h ]h"]h$]h&]uh1jThj`hhhj`hMEubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj`jxj`jyjzj{uh1jhhhjpMhNhNubj})}(hX **Definition**:: struct drm_asahi_gem_mmap_offset { __u32 handle; __u32 flags; __u64 offset; }; **Members** ``handle`` Handle for the object being mapped. ``flags`` Must be zero ``offset`` The fake offset to use for subsequent mmap callh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh:}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMGhj`ubj)}(hZstruct drm_asahi_gem_mmap_offset { __u32 handle; __u32 flags; __u64 offset; };h]hZstruct drm_asahi_gem_mmap_offset { __u32 handle; __u32 flags; __u64 offset; };}hjasbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMIhj`ubh)}(h **Members**h]j)}(hjah]hMembers}(hj!ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMOhj`ubj8)}(hhh](j=)}(h/``handle`` Handle for the object being mapped. h](jC)}(h ``handle``h]j)}(hj>ah]hhandle}(hj@ahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj?uh1j hjbhhhjbhMTubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjbhhhjbhMTubah}(h]jaah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjbhMThjahhubjU)}(hhh]h)}(hFlags for GEM bindingh]hFlags for GEM binding}(hjLbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMRhjIbhhubah}(h]h ]h"]h$]h&]uh1jThjahhhjbhMTubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjdbjxjdbjyjzj{uh1jhhhjpMhNhNubj})}(hX**Constants** ``DRM_ASAHI_BIND_UNBIND`` Instead of binding a GEM object to the range, simply unbind the GPU VMA range. ``DRM_ASAHI_BIND_READ`` Map BO with GPU read permission ``DRM_ASAHI_BIND_WRITE`` Map BO with GPU write permission ``DRM_ASAHI_BIND_SINGLE_PAGE`` Map a single page of the BO repeatedly across the VA range. This is useful to fill a VA range with scratch pages or zero pages. It is intended as a mechanism to accelerate sparse.h](h)}(h **Constants**h]j)}(hjnbh]h Constants}(hjpbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlbubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMVhjhbubj8)}(hhh](j=)}(hi``DRM_ASAHI_BIND_UNBIND`` Instead of binding a GEM object to the range, simply unbind the GPU VMA range. h](jC)}(h``DRM_ASAHI_BIND_UNBIND``h]j)}(hjbh]hDRM_ASAHI_BIND_UNBIND}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMZhjbubjT)}(hhh]h)}(hNInstead of binding a GEM object to the range, simply unbind the GPU VMA range.h]hNInstead of binding a GEM object to the range, simply unbind the GPU VMA range.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMYhjbubah}(h]h ]h"]h$]h&]uh1jShjbubeh}(h]h ]h"]h$]h&]uh1j<hjbhMZhjbubj=)}(h8``DRM_ASAHI_BIND_READ`` Map BO with GPU read permission h](jC)}(h``DRM_ASAHI_BIND_READ``h]j)}(hjbh]hDRM_ASAHI_BIND_READ}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM]hjbubjT)}(hhh]h)}(hMap BO with GPU read permissionh]hMap BO with GPU read permission}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhM]hjbubah}(h]h ]h"]h$]h&]uh1jShjbubeh}(h]h ]h"]h$]h&]uh1j<hjbhM]hjbubj=)}(h:``DRM_ASAHI_BIND_WRITE`` Map BO with GPU write permission h](jC)}(h``DRM_ASAHI_BIND_WRITE``h]j)}(hjch]hDRM_ASAHI_BIND_WRITE}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM`hjbubjT)}(hhh]h)}(h Map BO with GPU write permissionh]h Map BO with GPU write permission}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchM`hjcubah}(h]h ]h"]h$]h&]uh1jShjbubeh}(h]h ]h"]h$]h&]uh1j<hjchM`hjbubj=)}(h``DRM_ASAHI_BIND_SINGLE_PAGE`` Map a single page of the BO repeatedly across the VA range. This is useful to fill a VA range with scratch pages or zero pages. It is intended as a mechanism to accelerate sparse.h](jC)}(h``DRM_ASAHI_BIND_SINGLE_PAGE``h]j)}(hj9ch]hDRM_ASAHI_BIND_SINGLE_PAGE}(hj;chhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7cubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMfhj3cubjT)}(hhh](h)}(h;Map a single page of the BO repeatedly across the VA range.h]h;Map a single page of the BO repeatedly across the VA range.}(hjRchhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMchjOcubh)}(hwThis is useful to fill a VA range with scratch pages or zero pages. It is intended as a mechanism to accelerate sparse.h]hwThis is useful to fill a VA range with scratch pages or zero pages. It is intended as a mechanism to accelerate sparse.}(hjachhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNchMfhjOcubeh}(h]h ]h"]h$]h&]uh1jShj3cubeh}(h]h ]h"]h$]h&]uh1j<hjNchMfhjbubeh}(h]h ]h"]h$]h&]uh1j7hjhbubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_asahi_gem_bind_op (C struct)c.drm_asahi_gem_bind_ophNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_gem_bind_oph]j)}(hstruct drm_asahi_gem_bind_oph](j)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjchhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMlubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjchhhjchMlubj!)}(hdrm_asahi_gem_bind_oph]j')}(hjch]hdrm_asahi_gem_bind_op}(hjchhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjcubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjchhhjchMlubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjchhhjchMlubah}(h]jcah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjchMlhjchhubjU)}(hhh]h)}(h+Description of a single GEM bind operation.h]h+Description of a single GEM bind operation.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMlhjchhubah}(h]h ]h"]h$]h&]uh1jThjchhhjchMlubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjcjxjcjyjzj{uh1jhhhjpMhNhNubj})}(hX**Definition**:: struct drm_asahi_gem_bind_op { __u32 flags; __u32 handle; __u64 offset; __u64 range; __u64 addr; }; **Members** ``flags`` Combination of drm_asahi_bind_flags flags. ``handle`` GEM object to bind (except for UNBIND) ``offset`` Offset into the object (except for UNBIND). For a regular bind, this is the beginning of the region of the GEM object to bind. For a single-page bind, this is the offset to the single page that will be repeatedly bound. Must be page-size aligned. ``range`` Number of bytes to bind/unbind to **addr**. Must be page-size aligned. ``addr`` Address to bind to. Must be page-size aligned.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh:}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMphjcubj)}(hwstruct drm_asahi_gem_bind_op { __u32 flags; __u32 handle; __u64 offset; __u64 range; __u64 addr; };h]hwstruct drm_asahi_gem_bind_op { __u32 flags; __u32 handle; __u64 offset; __u64 range; __u64 addr; };}hj dsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMrhjcubh)}(h **Members**h]j)}(hj1dh]hMembers}(hj3dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/dubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMzhjcubj8)}(hhh](j=)}(h5``flags`` Combination of drm_asahi_bind_flags flags. h](jC)}(h ``flags``h]j)}(hjPdh]hflags}(hjRdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNdubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMphjJdubjT)}(hhh]h)}(h*Combination of drm_asahi_bind_flags flags.h]h*Combination of drm_asahi_bind_flags flags.}(hjidhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjedhMphjfdubah}(h]h ]h"]h$]h&]uh1jShjJdubeh}(h]h ]h"]h$]h&]uh1j<hjedhMphjGdubj=)}(h2``handle`` GEM object to bind (except for UNBIND) h](jC)}(h ``handle``h]j)}(hjdh]hhandle}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMshjdubjT)}(hhh]h)}(h&GEM object to bind (except for UNBIND)h]h&GEM object to bind (except for UNBIND)}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMshjdubah}(h]h ]h"]h$]h&]uh1jShjdubeh}(h]h ]h"]h$]h&]uh1j<hjdhMshjGdubj=)}(hX``offset`` Offset into the object (except for UNBIND). For a regular bind, this is the beginning of the region of the GEM object to bind. For a single-page bind, this is the offset to the single page that will be repeatedly bound. Must be page-size aligned. h](jC)}(h ``offset``h]j)}(hjdh]hoffset}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjdubjT)}(hhh](h)}(h+Offset into the object (except for UNBIND).h]h+Offset into the object (except for UNBIND).}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMwhjdubh)}(hRFor a regular bind, this is the beginning of the region of the GEM object to bind.h]hRFor a regular bind, this is the beginning of the region of the GEM object to bind.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMyhjdubh)}(h\For a single-page bind, this is the offset to the single page that will be repeatedly bound.h]h\For a single-page bind, this is the offset to the single page that will be repeatedly bound.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM|hjdubh)}(hMust be page-size aligned.h]hMust be page-size aligned.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubeh}(h]h ]h"]h$]h&]uh1jShjdubeh}(h]h ]h"]h$]h&]uh1j<hjdhMhjGdubj=)}(hR``range`` Number of bytes to bind/unbind to **addr**. Must be page-size aligned. h](jC)}(h ``range``h]j)}(hj(eh]hrange}(hj*ehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&eubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj"eubjT)}(hhh](h)}(h+Number of bytes to bind/unbind to **addr**.h](h"Number of bytes to bind/unbind to }(hjAehhhNhNubj)}(h**addr**h]haddr}(hjIehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAeubh.}(hjAehhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj>eubh)}(hMust be page-size aligned.h]hMust be page-size aligned.}(hjbehhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=ehMhj>eubeh}(h]h ]h"]h$]h&]uh1jShj"eubeh}(h]h ]h"]h$]h&]uh1j<hj=ehMhjGdubj=)}(h8``addr`` Address to bind to. Must be page-size aligned.h](jC)}(h``addr``h]j)}(hjeh]haddr}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj|eubjT)}(hhh](h)}(hAddress to bind to.h]hAddress to bind to.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjeubh)}(hMust be page-size aligned.h]hMust be page-size aligned.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjeubeh}(h]h ]h"]h$]h&]uh1jShj|eubeh}(h]h ]h"]h$]h&]uh1j<hjehMhjGdubeh}(h]h ]h"]h$]h&]uh1j7hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_vm_bind (C struct)c.drm_asahi_vm_bindhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_vm_bindh]j)}(hstruct drm_asahi_vm_bindh](j)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjehhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjehMubj!)}(hdrm_asahi_vm_bindh]j')}(hjeh]hdrm_asahi_vm_bind}(hj fhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjfubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjehhhjehMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjehhhjehMubah}(h]jeah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjehMhjehhubjU)}(hhh]h)}(h+Arguments passed to DRM_IOCTL_ASAHI_VM_BINDh]h+Arguments passed to DRM_IOCTL_ASAHI_VM_BIND}(hj-fhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj*fhhubah}(h]h ]h"]h$]h&]uh1jThjehhhjehMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjEfjxjEfjyjzj{uh1jhhhjpMhNhNubj})}(hX**Definition**:: struct drm_asahi_vm_bind { __u32 vm_id; __u32 num_binds; __u32 stride; __u32 pad; __u64 userptr; }; **Members** ``vm_id`` The ID of the VM to bind to ``num_binds`` number of binds in this IOCTL. ``stride`` Stride in bytes between consecutive binds. This allows extensibility of drm_asahi_gem_bind_op. ``pad`` MBZ ``userptr`` User pointer to an array of **num_binds** structures of type **drm_asahi_gem_bind_op** and size **stride** bytes.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjQfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMfubh:}(hjMfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjIfubj)}(hwstruct drm_asahi_vm_bind { __u32 vm_id; __u32 num_binds; __u32 stride; __u32 pad; __u64 userptr; };h]hwstruct drm_asahi_vm_bind { __u32 vm_id; __u32 num_binds; __u32 stride; __u32 pad; __u64 userptr; };}hjjfsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjIfubh)}(h **Members**h]j)}(hj{fh]hMembers}(hj}fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyfubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjIfubj8)}(hhh](j=)}(h&``vm_id`` The ID of the VM to bind to h](jC)}(h ``vm_id``h]j)}(hjfh]hvm_id}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjfubjT)}(hhh]h)}(hThe ID of the VM to bind toh]hThe ID of the VM to bind to}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jShjfubeh}(h]h ]h"]h$]h&]uh1j<hjfhMhjfubj=)}(h-``num_binds`` number of binds in this IOCTL. h](jC)}(h ``num_binds``h]j)}(hjfh]h num_binds}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjfubjT)}(hhh]h)}(hnumber of binds in this IOCTL.h]hnumber of binds in this IOCTL.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jShjfubeh}(h]h ]h"]h$]h&]uh1j<hjfhMhjfubj=)}(hj``stride`` Stride in bytes between consecutive binds. This allows extensibility of drm_asahi_gem_bind_op. h](jC)}(h ``stride``h]j)}(hj gh]hstride}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj gubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjgubjT)}(hhh]h)}(h^Stride in bytes between consecutive binds. This allows extensibility of drm_asahi_gem_bind_op.h]h^Stride in bytes between consecutive binds. This allows extensibility of drm_asahi_gem_bind_op.}(hj%ghhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj"gubah}(h]h ]h"]h$]h&]uh1jShjgubeh}(h]h ]h"]h$]h&]uh1j<hj!ghMhjfubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hjFgh]hpad}(hjHghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDgubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj@gubjT)}(hhh]h)}(hMBZh]hMBZ}(hj_ghhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[ghMhj\gubah}(h]h ]h"]h$]h&]uh1jShj@gubeh}(h]h ]h"]h$]h&]uh1j<hj[ghMhjfubj=)}(h}``userptr`` User pointer to an array of **num_binds** structures of type **drm_asahi_gem_bind_op** and size **stride** bytes.h](jC)}(h ``userptr``h]j)}(hjgh]huserptr}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}gubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjygubjT)}(hhh]h)}(hqUser pointer to an array of **num_binds** structures of type **drm_asahi_gem_bind_op** and size **stride** bytes.h](hUser pointer to an array of }(hjghhhNhNubj)}(h **num_binds**h]h num_binds}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh structures of type }(hjghhhNhNubj)}(h**drm_asahi_gem_bind_op**h]hdrm_asahi_gem_bind_op}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh and size }(hjghhhNhNubj)}(h **stride**h]hstride}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh bytes.}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjghMhjgubah}(h]h ]h"]h$]h&]uh1jShjygubeh}(h]h ]h"]h$]h&]uh1j<hjghMhjfubeh}(h]h ]h"]h$]h&]uh1j7hjIfubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_asahi_bind_object_op (C enum)c.drm_asahi_bind_object_ophNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_bind_object_oph]j)}(henum drm_asahi_bind_object_oph](j)}(hjh]henum}(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj hhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhhjhhMubj!)}(hdrm_asahi_bind_object_oph]j')}(hjhh]hdrm_asahi_bind_object_op}(hj.hhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj*hubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj hhhhjhhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhhjhhMubah}(h]jhah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhhMhjhhhubjU)}(hhh]h)}(hSpecial object bind operationh]hSpecial object bind operation}(hjPhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjMhhhubah}(h]h ]h"]h$]h&]uh1jThjhhhhjhhMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjhhjxjhhjyjzj{uh1jhhhjpMhNhNubj})}(h**Constants** ``DRM_ASAHI_BIND_OBJECT_OP_BIND`` Bind a BO as a special GPU object ``DRM_ASAHI_BIND_OBJECT_OP_UNBIND`` Unbind a special GPU objecth](h)}(h **Constants**h]j)}(hjrhh]h Constants}(hjthhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjphubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjlhubj8)}(hhh](j=)}(hD``DRM_ASAHI_BIND_OBJECT_OP_BIND`` Bind a BO as a special GPU object h](jC)}(h!``DRM_ASAHI_BIND_OBJECT_OP_BIND``h]j)}(hjhh]hDRM_ASAHI_BIND_OBJECT_OP_BIND}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjhubjT)}(hhh]h)}(h!Bind a BO as a special GPU objecth]h!Bind a BO as a special GPU object}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjhubah}(h]h ]h"]h$]h&]uh1jShjhubeh}(h]h ]h"]h$]h&]uh1j<hjhhMhjhubj=)}(h?``DRM_ASAHI_BIND_OBJECT_OP_UNBIND`` Unbind a special GPU objecth](jC)}(h#``DRM_ASAHI_BIND_OBJECT_OP_UNBIND``h]j)}(hjhh]hDRM_ASAHI_BIND_OBJECT_OP_UNBIND}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjhubjT)}(hhh]h)}(hUnbind a special GPU objecth]hUnbind a special GPU object}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjhubah}(h]h ]h"]h$]h&]uh1jShjhubeh}(h]h ]h"]h$]h&]uh1j<hjhhMhjhubeh}(h]h ]h"]h$]h&]uh1j7hjlhubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_asahi_bind_object_flags (C enum)c.drm_asahi_bind_object_flagshNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_bind_object_flagsh]j)}(h enum drm_asahi_bind_object_flagsh](j)}(hjh]henum}(hj$ihhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj ihhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubj)}(h h]h }(hj2ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ihhhj1ihMubj!)}(hdrm_asahi_bind_object_flagsh]j')}(hjih]hdrm_asahi_bind_object_flags}(hjDihhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj@iubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj ihhhj1ihMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjihhhj1ihMubah}(h]jiah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj1ihMhjihhubjU)}(hhh]h)}(hSpecial object bind flagsh]hSpecial object bind flags}(hjfihhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjcihhubah}(h]h ]h"]h$]h&]uh1jThjihhhj1ihMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwj~ijxj~ijyjzj{uh1jhhhjpMhNhNubj})}(h]**Constants** ``DRM_ASAHI_BIND_OBJECT_USAGE_TIMESTAMPS`` Map a BO as a timestamp buffer.h](h)}(h **Constants**h]j)}(hjih]h Constants}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjiubj8)}(hhh]j=)}(hJ``DRM_ASAHI_BIND_OBJECT_USAGE_TIMESTAMPS`` Map a BO as a timestamp buffer.h](jC)}(h*``DRM_ASAHI_BIND_OBJECT_USAGE_TIMESTAMPS``h]j)}(hjih]h&DRM_ASAHI_BIND_OBJECT_USAGE_TIMESTAMPS}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjiubjT)}(hhh]h)}(hMap a BO as a timestamp buffer.h]hMap a BO as a timestamp buffer.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjiubah}(h]h ]h"]h$]h&]uh1jShjiubeh}(h]h ]h"]h$]h&]uh1j<hjihMhjiubah}(h]h ]h"]h$]h&]uh1j7hjiubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$drm_asahi_gem_bind_object (C struct)c.drm_asahi_gem_bind_objecthNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_gem_bind_objecth]j)}(h struct drm_asahi_gem_bind_objecth](j)}(hjh]hstruct}(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjihhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhj jhMubj!)}(hdrm_asahi_gem_bind_objecth]j')}(hjih]hdrm_asahi_gem_bind_object}(hj jhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjihhhj jhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjihhhj jhMubah}(h]jiah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj jhMhjihhubjU)}(hhh]h)}(h3Arguments passed to DRM_IOCTL_ASAHI_GEM_BIND_OBJECTh]h3Arguments passed to DRM_IOCTL_ASAHI_GEM_BIND_OBJECT}(hjBjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj?jhhubah}(h]h ]h"]h$]h&]uh1jThjihhhj jhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjZjjxjZjjyjzj{uh1jhhhjpMhNhNubj})}(hX**Definition**:: struct drm_asahi_gem_bind_object { __u32 op; __u32 flags; __u32 handle; __u32 vm_id; __u64 offset; __u64 range; __u32 object_handle; __u32 pad; }; **Members** ``op`` Bind operation (enum drm_asahi_bind_object_op) ``flags`` Combination of drm_asahi_bind_object_flags flags. ``handle`` GEM object to bind/unbind (BIND) ``vm_id`` The ID of the VM to operate on (MBZ currently) ``offset`` Offset into the object (BIND only) ``range`` Number of bytes to bind/unbind (BIND only) ``object_handle`` Object handle (out for BIND, in for UNBIND) ``pad`` MBZh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjfjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbjubh:}(hjbjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj^jubj)}(hstruct drm_asahi_gem_bind_object { __u32 op; __u32 flags; __u32 handle; __u32 vm_id; __u64 offset; __u64 range; __u32 object_handle; __u32 pad; };h]hstruct drm_asahi_gem_bind_object { __u32 op; __u32 flags; __u32 handle; __u32 vm_id; __u64 offset; __u64 range; __u32 object_handle; __u32 pad; };}hjjsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj^jubh)}(h **Members**h]j)}(hjjh]hMembers}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj^jubj8)}(hhh](j=)}(h6``op`` Bind operation (enum drm_asahi_bind_object_op) h](jC)}(h``op``h]j)}(hjjh]hop}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjjubjT)}(hhh]h)}(h.Bind operation (enum drm_asahi_bind_object_op)h]h.Bind operation (enum drm_asahi_bind_object_op)}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1jShjjubeh}(h]h ]h"]h$]h&]uh1j<hjjhMhjjubj=)}(h<``flags`` Combination of drm_asahi_bind_object_flags flags. h](jC)}(h ``flags``h]j)}(hjjh]hflags}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjjubjT)}(hhh]h)}(h1Combination of drm_asahi_bind_object_flags flags.h]h1Combination of drm_asahi_bind_object_flags flags.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1jShjjubeh}(h]h ]h"]h$]h&]uh1j<hjjhMhjjubj=)}(h,``handle`` GEM object to bind/unbind (BIND) h](jC)}(h ``handle``h]j)}(hj!kh]hhandle}(hj#khhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjkubjT)}(hhh]h)}(h GEM object to bind/unbind (BIND)h]h GEM object to bind/unbind (BIND)}(hj:khhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6khMhj7kubah}(h]h ]h"]h$]h&]uh1jShjkubeh}(h]h ]h"]h$]h&]uh1j<hj6khMhjjubj=)}(h9``vm_id`` The ID of the VM to operate on (MBZ currently) h](jC)}(h ``vm_id``h]j)}(hjZkh]hvm_id}(hj\khhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXkubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjTkubjT)}(hhh]h)}(h.The ID of the VM to operate on (MBZ currently)h]h.The ID of the VM to operate on (MBZ currently)}(hjskhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjokhMhjpkubah}(h]h ]h"]h$]h&]uh1jShjTkubeh}(h]h ]h"]h$]h&]uh1j<hjokhMhjjubj=)}(h.``offset`` Offset into the object (BIND only) h](jC)}(h ``offset``h]j)}(hjkh]hoffset}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjkubjT)}(hhh]h)}(h"Offset into the object (BIND only)h]h"Offset into the object (BIND only)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jShjkubeh}(h]h ]h"]h$]h&]uh1j<hjkhMhjjubj=)}(h5``range`` Number of bytes to bind/unbind (BIND only) h](jC)}(h ``range``h]j)}(hjkh]hrange}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjkubjT)}(hhh]h)}(h*Number of bytes to bind/unbind (BIND only)h]h*Number of bytes to bind/unbind (BIND only)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjkubah}(h]h ]h"]h$]h&]uh1jShjkubeh}(h]h ]h"]h$]h&]uh1j<hjkhMhjjubj=)}(h>``object_handle`` Object handle (out for BIND, in for UNBIND) h](jC)}(h``object_handle``h]j)}(hjlh]h object_handle}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjkubjT)}(hhh]h)}(h+Object handle (out for BIND, in for UNBIND)h]h+Object handle (out for BIND, in for UNBIND)}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjlubah}(h]h ]h"]h$]h&]uh1jShjkubeh}(h]h ]h"]h$]h&]uh1j<hjlhMhjjubj=)}(h ``pad`` MBZh](jC)}(h``pad``h]j)}(hj>lh]hpad}(hj@lhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj?uh1j hjlhhhjlhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjlhhhjlhMubah}(h]jlah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjlhMhjlhhubjU)}(hhh]h)}(h Command typeh]h Command type}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjlhhubah}(h]h ]h"]h$]h&]uh1jThjlhhhjlhMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjljxjljyjzj{uh1jhhhjpMhNhNubj})}(hX**Constants** ``DRM_ASAHI_CMD_RENDER`` Render command, executing on the render subqueue. Combined vertex and fragment operation. Followed by a **drm_asahi_cmd_render** payload. ``DRM_ASAHI_CMD_COMPUTE`` Compute command on the compute subqueue. Followed by a **drm_asahi_cmd_compute** payload. ``DRM_ASAHI_SET_VERTEX_ATTACHMENTS`` Software command to set attachments for subsequent vertex shaders in the same submit. Followed by (possibly multiple) **drm_asahi_attachment** payloads. ``DRM_ASAHI_SET_FRAGMENT_ATTACHMENTS`` Software command to set attachments for subsequent fragment shaders in the same submit. Followed by (possibly multiple) **drm_asahi_attachment** payloads. ``DRM_ASAHI_SET_COMPUTE_ATTACHMENTS`` Software command to set attachments for subsequent compute shaders in the same submit. Followed by (possibly multiple) **drm_asahi_attachment** payloads.h](h)}(h **Constants**h]j)}(hjlh]h Constants}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjlubj8)}(hhh](j=)}(h``DRM_ASAHI_CMD_RENDER`` Render command, executing on the render subqueue. Combined vertex and fragment operation. Followed by a **drm_asahi_cmd_render** payload. h](jC)}(h``DRM_ASAHI_CMD_RENDER``h]j)}(hjmh]hDRM_ASAHI_CMD_RENDER}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjmubjT)}(hhh](h)}(hYRender command, executing on the render subqueue. Combined vertex and fragment operation.h]hYRender command, executing on the render subqueue. Combined vertex and fragment operation.}(hj4mhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj1mubh)}(h/Followed by a **drm_asahi_cmd_render** payload.h](hFollowed by a }(hjCmhhhNhNubj)}(h**drm_asahi_cmd_render**h]hdrm_asahi_cmd_render}(hjKmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCmubh payload.}(hjCmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0mhMhj1mubeh}(h]h ]h"]h$]h&]uh1jShjmubeh}(h]h ]h"]h$]h&]uh1j<hj0mhMhjmubj=)}(hu``DRM_ASAHI_CMD_COMPUTE`` Compute command on the compute subqueue. Followed by a **drm_asahi_cmd_compute** payload. h](jC)}(h``DRM_ASAHI_CMD_COMPUTE``h]j)}(hjumh]hDRM_ASAHI_CMD_COMPUTE}(hjwmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsmubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjomubjT)}(hhh](h)}(h(Compute command on the compute subqueue.h]h(Compute command on the compute subqueue.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjmubh)}(h0Followed by a **drm_asahi_cmd_compute** payload.h](hFollowed by a }(hjmhhhNhNubj)}(h**drm_asahi_cmd_compute**h]hdrm_asahi_cmd_compute}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh payload.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMhjmubeh}(h]h ]h"]h$]h&]uh1jShjomubeh}(h]h ]h"]h$]h&]uh1j<hjmhMhjmubj=)}(h``DRM_ASAHI_SET_VERTEX_ATTACHMENTS`` Software command to set attachments for subsequent vertex shaders in the same submit. Followed by (possibly multiple) **drm_asahi_attachment** payloads. h](jC)}(h$``DRM_ASAHI_SET_VERTEX_ATTACHMENTS``h]j)}(hjmh]h DRM_ASAHI_SET_VERTEX_ATTACHMENTS}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjmubjT)}(hhh](h)}(hUSoftware command to set attachments for subsequent vertex shaders in the same submit.h]hUSoftware command to set attachments for subsequent vertex shaders in the same submit.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjmubh)}(hBFollowed by (possibly multiple) **drm_asahi_attachment** payloads.h](h Followed by (possibly multiple) }(hjmhhhNhNubj)}(h**drm_asahi_attachment**h]hdrm_asahi_attachment}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubh payloads.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMhjmubeh}(h]h ]h"]h$]h&]uh1jShjmubeh}(h]h ]h"]h$]h&]uh1j<hjmhMhjmubj=)}(h``DRM_ASAHI_SET_FRAGMENT_ATTACHMENTS`` Software command to set attachments for subsequent fragment shaders in the same submit. Followed by (possibly multiple) **drm_asahi_attachment** payloads. h](jC)}(h&``DRM_ASAHI_SET_FRAGMENT_ATTACHMENTS``h]j)}(hj)nh]h"DRM_ASAHI_SET_FRAGMENT_ATTACHMENTS}(hj+nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'nubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj#nubjT)}(hhh](h)}(hWSoftware command to set attachments for subsequent fragment shaders in the same submit.h]hWSoftware command to set attachments for subsequent fragment shaders in the same submit.}(hjBnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj?nubh)}(hBFollowed by (possibly multiple) **drm_asahi_attachment** payloads.h](h Followed by (possibly multiple) }(hjQnhhhNhNubj)}(h**drm_asahi_attachment**h]hdrm_asahi_attachment}(hjYnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQnubh payloads.}(hjQnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>nhMhj?nubeh}(h]h ]h"]h$]h&]uh1jShj#nubeh}(h]h ]h"]h$]h&]uh1j<hj>nhMhjmubj=)}(h``DRM_ASAHI_SET_COMPUTE_ATTACHMENTS`` Software command to set attachments for subsequent compute shaders in the same submit. Followed by (possibly multiple) **drm_asahi_attachment** payloads.h](jC)}(h%``DRM_ASAHI_SET_COMPUTE_ATTACHMENTS``h]j)}(hjnh]h!DRM_ASAHI_SET_COMPUTE_ATTACHMENTS}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj}nubjT)}(hhh](h)}(hVSoftware command to set attachments for subsequent compute shaders in the same submit.h]hVSoftware command to set attachments for subsequent compute shaders in the same submit.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjnubh)}(hBFollowed by (possibly multiple) **drm_asahi_attachment** payloads.h](h Followed by (possibly multiple) }(hjnhhhNhNubj)}(h**drm_asahi_attachment**h]hdrm_asahi_attachment}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh payloads.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjnubeh}(h]h ]h"]h$]h&]uh1jShj}nubeh}(h]h ]h"]h$]h&]uh1j<hjnhMhjmubeh}(h]h ]h"]h$]h&]uh1j7hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_priority (C enum)c.drm_asahi_priorityhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_priorityh]j)}(henum drm_asahi_priorityh](j)}(hjh]henum}(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjnhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubj)}(h h]h }(hj ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhj ohMubj!)}(hdrm_asahi_priorityh]j')}(hjnh]hdrm_asahi_priority}(hjohhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjoubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjnhhhj ohMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjnhhhj ohMubah}(h]jnah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj ohMhjnhhubjU)}(hhh]h)}(hScheduling queue priority.h]hScheduling queue priority.}(hj@ohhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM hj=ohhubah}(h]h ]h"]h$]h&]uh1jThjnhhhj ohMubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjXojxjXojyjzj{uh1jhhhjpMhNhNubj})}(hX,**Constants** ``DRM_ASAHI_PRIORITY_LOW`` Low priority queue. ``DRM_ASAHI_PRIORITY_MEDIUM`` Medium priority queue. ``DRM_ASAHI_PRIORITY_HIGH`` High priority queue. Reserved for future extension. ``DRM_ASAHI_PRIORITY_REALTIME`` Real-time priority queue. Reserved for future extension.h](h)}(h **Constants**h]j)}(hjboh]h Constants}(hjdohhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`oubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj\oubj8)}(hhh](j=)}(h/``DRM_ASAHI_PRIORITY_LOW`` Low priority queue. h](jC)}(h``DRM_ASAHI_PRIORITY_LOW``h]j)}(hjoh]hDRM_ASAHI_PRIORITY_LOW}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj{oubjT)}(hhh]h)}(hLow priority queue.h]hLow priority queue.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jShj{oubeh}(h]h ]h"]h$]h&]uh1j<hjohMhjxoubj=)}(h5``DRM_ASAHI_PRIORITY_MEDIUM`` Medium priority queue. h](jC)}(h``DRM_ASAHI_PRIORITY_MEDIUM``h]j)}(hjoh]hDRM_ASAHI_PRIORITY_MEDIUM}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjoubjT)}(hhh]h)}(hMedium priority queue.h]hMedium priority queue.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMhjoubah}(h]h ]h"]h$]h&]uh1jShjoubeh}(h]h ]h"]h$]h&]uh1j<hjohMhjxoubj=)}(hQ``DRM_ASAHI_PRIORITY_HIGH`` High priority queue. Reserved for future extension. h](jC)}(h``DRM_ASAHI_PRIORITY_HIGH``h]j)}(hjoh]hDRM_ASAHI_PRIORITY_HIGH}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjoubjT)}(hhh](h)}(hHigh priority queue.h]hHigh priority queue.}(hj phhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj pubh)}(hReserved for future extension.h]hReserved for future extension.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhj pubeh}(h]h ]h"]h$]h&]uh1jShjoubeh}(h]h ]h"]h$]h&]uh1j<hjphMhjxoubj=)}(hY``DRM_ASAHI_PRIORITY_REALTIME`` Real-time priority queue. Reserved for future extension.h](jC)}(h``DRM_ASAHI_PRIORITY_REALTIME``h]j)}(hj;ph]hDRM_ASAHI_PRIORITY_REALTIME}(hj=phhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9pubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM hj5pubjT)}(hhh](h)}(hReal-time priority queue.h]hReal-time priority queue.}(hjTphhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjQpubh)}(hReserved for future extension.h]hReserved for future extension.}(hjcphhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM!hjQpubeh}(h]h ]h"]h$]h&]uh1jShj5pubeh}(h]h ]h"]h$]h&]uh1j<hjPphM hjxoubeh}(h]h ]h"]h$]h&]uh1j7hj\oubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubh)}(h**Description**h]j)}(hjph]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM#hjpMhhubh)}(hThese priorities are forwarded to the firmware to influence firmware scheduling. The exact policy is ultimately decided by firmware, but these enums allow userspace to communicate the intentions.h]hThese priorities are forwarded to the firmware to influence firmware scheduling. The exact policy is ultimately decided by firmware, but these enums allow userspace to communicate the intentions.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!drm_asahi_queue_create (C struct)c.drm_asahi_queue_createhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_queue_createh]j)}(hstruct drm_asahi_queue_createh](j)}(hjh]hstruct}(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjphhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjphMubj!)}(hdrm_asahi_queue_createh]j')}(hjph]hdrm_asahi_queue_create}(hjphhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjpubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjphhhjphMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjphhhjphMubah}(h]jpah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjphMhjphhubjU)}(hhh]h)}(h0Arguments passed to DRM_IOCTL_ASAHI_QUEUE_CREATEh]h0Arguments passed to DRM_IOCTL_ASAHI_QUEUE_CREATE}(hj qhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM*hj qhhubah}(h]h ]h"]h$]h&]uh1jThjphhhjphMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj%qjxj%qjyjzj{uh1jhhhjpMhNhNubj})}(hXR**Definition**:: struct drm_asahi_queue_create { __u32 flags; __u32 vm_id; __u32 priority; __u32 queue_id; __u64 usc_exec_base; }; **Members** ``flags`` MBZ ``vm_id`` The ID of the VM this queue is bound to ``priority`` One of drm_asahi_priority ``queue_id`` The returned queue ID ``usc_exec_base`` GPU base address for all USC binaries (shaders) on this queue. USC addresses are 32-bit relative to this 64-bit base. This sets the following registers on all queue commands: USC_EXEC_BASE_TA (vertex) USC_EXEC_BASE_ISP (fragment) USC_EXEC_BASE_CP (compute) While the hardware lets us configure these independently per command, we do not have a use case for this. Instead, we expect userspace to fix a 4GiB VA carveout for USC memory and pass its base address here.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj1qhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-qubh:}(hj-qhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM.hj)qubj)}(hstruct drm_asahi_queue_create { __u32 flags; __u32 vm_id; __u32 priority; __u32 queue_id; __u64 usc_exec_base; };h]hstruct drm_asahi_queue_create { __u32 flags; __u32 vm_id; __u32 priority; __u32 queue_id; __u64 usc_exec_base; };}hjJqsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM0hj)qubh)}(h **Members**h]j)}(hj[qh]hMembers}(hj]qhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYqubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM8hj)qubj8)}(hhh](j=)}(h``flags`` MBZ h](jC)}(h ``flags``h]j)}(hjzqh]hflags}(hj|qhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxqubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM/hjtqubjT)}(hhh]h)}(hMBZh]hMBZ}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM/hjqubah}(h]h ]h"]h$]h&]uh1jShjtqubeh}(h]h ]h"]h$]h&]uh1j<hjqhM/hjqqubj=)}(h2``vm_id`` The ID of the VM this queue is bound to h](jC)}(h ``vm_id``h]j)}(hjqh]hvm_id}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM2hjqubjT)}(hhh]h)}(h'The ID of the VM this queue is bound toh]h'The ID of the VM this queue is bound to}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM2hjqubah}(h]h ]h"]h$]h&]uh1jShjqubeh}(h]h ]h"]h$]h&]uh1j<hjqhM2hjqqubj=)}(h'``priority`` One of drm_asahi_priority h](jC)}(h ``priority``h]j)}(hjqh]hpriority}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM5hjqubjT)}(hhh]h)}(hOne of drm_asahi_priorityh]hOne of drm_asahi_priority}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhM5hjrubah}(h]h ]h"]h$]h&]uh1jShjqubeh}(h]h ]h"]h$]h&]uh1j<hjrhM5hjqqubj=)}(h#``queue_id`` The returned queue ID h](jC)}(h ``queue_id``h]j)}(hj%rh]hqueue_id}(hj'rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#rubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM8hjrubjT)}(hhh]h)}(hThe returned queue IDh]hThe returned queue ID}(hj>rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:rhM8hj;rubah}(h]h ]h"]h$]h&]uh1jShjrubeh}(h]h ]h"]h$]h&]uh1j<hj:rhM8hjqqubj=)}(hX``usc_exec_base`` GPU base address for all USC binaries (shaders) on this queue. USC addresses are 32-bit relative to this 64-bit base. This sets the following registers on all queue commands: USC_EXEC_BASE_TA (vertex) USC_EXEC_BASE_ISP (fragment) USC_EXEC_BASE_CP (compute) While the hardware lets us configure these independently per command, we do not have a use case for this. Instead, we expect userspace to fix a 4GiB VA carveout for USC memory and pass its base address here.h](jC)}(h``usc_exec_base``h]j)}(hj^rh]h usc_exec_base}(hj`rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\rubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMFhjXrubjT)}(hhh](h)}(huGPU base address for all USC binaries (shaders) on this queue. USC addresses are 32-bit relative to this 64-bit base.h]huGPU base address for all USC binaries (shaders) on this queue. USC addresses are 32-bit relative to this 64-bit base.}(hjwrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM<hjtrubh)}(h8This sets the following registers on all queue commands:h]h8This sets the following registers on all queue commands:}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM?hjtrubj)}(hTUSC_EXEC_BASE_TA (vertex) USC_EXEC_BASE_ISP (fragment) USC_EXEC_BASE_CP (compute) h]h)}(hSUSC_EXEC_BASE_TA (vertex) USC_EXEC_BASE_ISP (fragment) USC_EXEC_BASE_CP (compute)h]hSUSC_EXEC_BASE_TA (vertex) USC_EXEC_BASE_ISP (fragment) USC_EXEC_BASE_CP (compute)}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMAhjrubah}(h]h ]h"]h$]h&]uh1jhjrhMAhjtrubh)}(hWhile the hardware lets us configure these independently per command, we do not have a use case for this. Instead, we expect userspace to fix a 4GiB VA carveout for USC memory and pass its base address here.h]hWhile the hardware lets us configure these independently per command, we do not have a use case for this. Instead, we expect userspace to fix a 4GiB VA carveout for USC memory and pass its base address here.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMEhjtrubeh}(h]h ]h"]h$]h&]uh1jShjXrubeh}(h]h ]h"]h$]h&]uh1j<hjsrhMFhjqqubeh}(h]h ]h"]h$]h&]uh1j7hj)qubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"drm_asahi_queue_destroy (C struct)c.drm_asahi_queue_destroyhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_queue_destroyh]j)}(hstruct drm_asahi_queue_destroyh](j)}(hjh]hstruct}(hjrhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjrhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhjrhMMubj!)}(hdrm_asahi_queue_destroyh]j')}(hjrh]hdrm_asahi_queue_destroy}(hjshhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj subah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjrhhhjrhMMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjrhhhjrhMMubah}(h]jrah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjrhMMhjrhhubjU)}(hhh]h)}(h1Arguments passed to DRM_IOCTL_ASAHI_QUEUE_DESTROYh]h1Arguments passed to DRM_IOCTL_ASAHI_QUEUE_DESTROY}(hj1shhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMLhj.shhubah}(h]h ]h"]h$]h&]uh1jThjrhhhjrhMMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjIsjxjIsjyjzj{uh1jhhhjpMhNhNubj})}(h**Definition**:: struct drm_asahi_queue_destroy { __u32 queue_id; __u32 pad; }; **Members** ``queue_id`` The queue ID to be destroyed ``pad`` MBZh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjUshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQsubh:}(hjQshhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMPhjMsubj)}(hFstruct drm_asahi_queue_destroy { __u32 queue_id; __u32 pad; };h]hFstruct drm_asahi_queue_destroy { __u32 queue_id; __u32 pad; };}hjnssbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMRhjMsubh)}(h **Members**h]j)}(hjsh]hMembers}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}subah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMWhjMsubj8)}(hhh](j=)}(h*``queue_id`` The queue ID to be destroyed h](jC)}(h ``queue_id``h]j)}(hjsh]hqueue_id}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMQhjsubjT)}(hhh]h)}(hThe queue ID to be destroyedh]hThe queue ID to be destroyed}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMQhjsubah}(h]h ]h"]h$]h&]uh1jShjsubeh}(h]h ]h"]h$]h&]uh1j<hjshMQhjsubj=)}(h ``pad`` MBZh](jC)}(h``pad``h]j)}(hjsh]hpad}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMShjsubjT)}(hhh]h)}(hMBZh]hMBZ}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMThjsubah}(h]h ]h"]h$]h&]uh1jShjsubeh}(h]h ]h"]h$]h&]uh1j<hjshMShjsubeh}(h]h ]h"]h$]h&]uh1j7hjMsubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_sync_type (C enum)c.drm_asahi_sync_typehNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_sync_typeh]j)}(henum drm_asahi_sync_typeh](j)}(hjh]henum}(hj1thhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-thhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMZubj)}(h h]h }(hj?thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-thhhj>thMZubj!)}(hdrm_asahi_sync_typeh]j')}(hj+th]hdrm_asahi_sync_type}(hjQthhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjMtubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj-thhhj>thMZubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj)thhhj>thMZubah}(h]j$tah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj>thMZhj&thhubjU)}(hhh]h)}(hSync item typeh]hSync item type}(hjsthhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMXhjpthhubah}(h]h ]h"]h$]h&]uh1jThj&thhhj>thMZubeh}(h]h ](jqenumeh"]h$]h&]jvjqjwjtjxjtjyjzj{uh1jhhhjpMhNhNubj})}(hz**Constants** ``DRM_ASAHI_SYNC_SYNCOBJ`` Binary sync object ``DRM_ASAHI_SYNC_TIMELINE_SYNCOBJ`` Timeline sync objecth](h)}(h **Constants**h]j)}(hjth]h Constants}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM\hjtubj8)}(hhh](j=)}(h.``DRM_ASAHI_SYNC_SYNCOBJ`` Binary sync object h](jC)}(h``DRM_ASAHI_SYNC_SYNCOBJ``h]j)}(hjth]hDRM_ASAHI_SYNC_SYNCOBJ}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM_hjtubjT)}(hhh]h)}(hBinary sync objecth]hBinary sync object}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthM_hjtubah}(h]h ]h"]h$]h&]uh1jShjtubeh}(h]h ]h"]h$]h&]uh1j<hjthM_hjtubj=)}(h8``DRM_ASAHI_SYNC_TIMELINE_SYNCOBJ`` Timeline sync objecth](jC)}(h#``DRM_ASAHI_SYNC_TIMELINE_SYNCOBJ``h]j)}(hjth]hDRM_ASAHI_SYNC_TIMELINE_SYNCOBJ}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMahjtubjT)}(hhh]h)}(hTimeline sync objecth]hTimeline sync object}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMbhjuubah}(h]h ]h"]h$]h&]uh1jShjtubeh}(h]h ]h"]h$]h&]uh1j<hjuhMahjtubeh}(h]h ]h"]h$]h&]uh1j7hjtubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_sync (C struct)c.drm_asahi_synchNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_synch]j)}(hstruct drm_asahi_synch](j)}(hjh]hstruct}(hjGuhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjCuhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMgubj)}(h h]h }(hjUuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCuhhhjTuhMgubj!)}(hdrm_asahi_synch]j')}(hjAuh]hdrm_asahi_sync}(hjguhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjcuubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjCuhhhjTuhMgubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj?uhhhjTuhMgubah}(h]j:uah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjTuhMghjj?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMihjuubh)}(h **Members**h]j)}(hjuh]hMembers}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMohjuubj8)}(hhh](j=)}(h)``sync_type`` One of drm_asahi_sync_type h](jC)}(h ``sync_type``h]j)}(hjuh]h sync_type}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMghjuubjT)}(hhh]h)}(hOne of drm_asahi_sync_typeh]hOne of drm_asahi_sync_type}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj vhMghj vubah}(h]h ]h"]h$]h&]uh1jShjuubeh}(h]h ]h"]h$]h&]uh1j<hj vhMghjuubj=)}(h"``handle`` The sync object handle h](jC)}(h ``handle``h]j)}(hj/vh]hhandle}(hj1vhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-vubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMjhj)vubjT)}(hhh]h)}(hThe sync object handleh]hThe sync object handle}(hjHvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDvhMjhjEvubah}(h]h ]h"]h$]h&]uh1jShj)vubeh}(h]h ]h"]h$]h&]uh1j<hjDvhMjhjuubj=)}(h;``timeline_value`` Timeline value for timeline sync objectsh](jC)}(h``timeline_value``h]j)}(hjhvh]htimeline_value}(hjjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfvubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMlhjbvubjT)}(hhh]h)}(h(Timeline value for timeline sync objectsh]h(Timeline value for timeline sync objects}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMmhj~vubah}(h]h ]h"]h$]h&]uh1jShjbvubeh}(h]h ]h"]h$]h&]uh1j<hj}vhMlhjuubeh}(h]h ]h"]h$]h&]uh1j7hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j DRM_ASAHI_BARRIER_NONE (C macro)c.DRM_ASAHI_BARRIER_NONEhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hDRM_ASAHI_BARRIER_NONEh]j)}(hDRM_ASAHI_BARRIER_NONEh]j!)}(hDRM_ASAHI_BARRIER_NONEh]j')}(hjvh]hDRM_ASAHI_BARRIER_NONE}(hjvhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjvubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjvhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMqubah}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjvhhhjvhMqubah}(h]jvah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjvhMqhjvhhubjU)}(hhh]h}(h]h ]h"]h$]h&]uh1jThjvhhhjvhMqubeh}(h]h ](jqmacroeh"]h$]h&]jvjqjwjvjxjvjyjzj{uh1jhhhjpMhNhNubh)}(h``DRM_ASAHI_BARRIER_NONE``h]j)}(hjvh]hDRM_ASAHI_BARRIER_NONE}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMshjpMhhubj)}(h Command index for no barrier **Description** This special value may be passed in to drm_asahi_command::vdm_barrier or drm_asahi_command::cdm_barrier to indicate that the respective subqueue should not wait on any previous work. h](j)}(hCommand index for no barrier h]h)}(hCommand index for no barrierh]hCommand index for no barrier}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMqhjwubah}(h]h ]h"]h$]h&]uh1jhj$whMqhjwubh)}(h**Description**h]j)}(hj-wh]h Description}(hj/whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+wubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMshjwubh)}(hThis special value may be passed in to drm_asahi_command::vdm_barrier or drm_asahi_command::cdm_barrier to indicate that the respective subqueue should not wait on any previous work.h]hThis special value may be passed in to drm_asahi_command::vdm_barrier or drm_asahi_command::cdm_barrier to indicate that the respective subqueue should not wait on any previous work.}(hjCwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMrhjwubeh}(h]h ]h"]h$]h&]uh1jhj$whMqhjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_cmd_header (C struct)c.drm_asahi_cmd_headerhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_cmd_headerh]j)}(hstruct drm_asahi_cmd_headerh](j)}(hjh]hstruct}(hjqwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjmwhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMyubj)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmwhhhj~whMyubj!)}(hdrm_asahi_cmd_headerh]j')}(hjkwh]hdrm_asahi_cmd_header}(hjwhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjwubah}(h]h ](j9j:eh"]h$]h&]j>8j?uh1j hjmwhhhj~whMyubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjiwhhhj~whMyubah}(h]jdwah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj~whMyhjfwhhubjU)}(hhh]h)}(hTop level command structureh]hTop level command structure}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMzhjwhhubah}(h]h ]h"]h$]h&]uh1jThjfwhhhj~whMyubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjwjxjwjyjzj{uh1jhhhjpMhNhNubj})}(hX**Definition**:: struct drm_asahi_cmd_header { __u16 cmd_type; __u16 size; __u16 vdm_barrier; __u16 cdm_barrier; }; **Members** ``cmd_type`` One of drm_asahi_cmd_type ``size`` Size of this command, not including this header. For hardware commands, this enables extensibility of commands without requiring extra command types. Passing a command that is shorter than expected is explicitly allowed for backwards-compatibility. Truncated fields will be zeroed. For the synthetic attachment setting commands, this implicitly encodes the number of attachments. These commands take multiple fixed-size **drm_asahi_attachment** structures as their payload, so size equals number of attachments * sizeof(struct drm_asahi_attachment). ``vdm_barrier`` VDM (render) command index to wait on. Barriers are indices relative to the beginning of a given submit. A barrier of 0 waits on commands submitted to the respective subqueue in previous submit ioctls. A barrier of N waits on N previous commands on the subqueue within the current submit ioctl. As a special case, passing **DRM_ASAHI_BARRIER_NONE** avoids waiting on any commands in the subqueue. Examples: 0: This waits on all previous work. NONE: This does not wait for anything on this subqueue. 1: This waits on the first render command in the submit. This is valid only if there are multiple render commands in the same submit. Barriers are valid only for hardware commands. Synthetic software commands to set attachments must pass NONE here. ``cdm_barrier`` CDM (compute) command index to wait on. See **vdm_barrier**, and replace VDM/render with CDM/compute.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubh:}(hjwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM~hjwubj)}(hrstruct drm_asahi_cmd_header { __u16 cmd_type; __u16 size; __u16 vdm_barrier; __u16 cdm_barrier; };h]hrstruct drm_asahi_cmd_header { __u16 cmd_type; __u16 size; __u16 vdm_barrier; __u16 cdm_barrier; };}hjwsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjwubh)}(h **Members**h]j)}(hjxh]hMembers}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjwubj8)}(hhh](j=)}(h'``cmd_type`` One of drm_asahi_cmd_type h](jC)}(h ``cmd_type``h]j)}(hj xh]hcmd_type}(hj"xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjxubjT)}(hhh]h)}(hOne of drm_asahi_cmd_typeh]hOne of drm_asahi_cmd_type}(hj9xhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5xhMhj6xubah}(h]h ]h"]h$]h&]uh1jShjxubeh}(h]h ]h"]h$]h&]uh1j<hj5xhMhjxubj=)}(hX1``size`` Size of this command, not including this header. For hardware commands, this enables extensibility of commands without requiring extra command types. Passing a command that is shorter than expected is explicitly allowed for backwards-compatibility. Truncated fields will be zeroed. For the synthetic attachment setting commands, this implicitly encodes the number of attachments. These commands take multiple fixed-size **drm_asahi_attachment** structures as their payload, so size equals number of attachments * sizeof(struct drm_asahi_attachment). h](jC)}(h``size``h]j)}(hjYxh]hsize}(hj[xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWxubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjSxubjT)}(hhh](h)}(h0Size of this command, not including this header.h]h0Size of this command, not including this header.}(hjrxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjoxubh)}(hFor hardware commands, this enables extensibility of commands without requiring extra command types. Passing a command that is shorter than expected is explicitly allowed for backwards-compatibility. Truncated fields will be zeroed.h]hFor hardware commands, this enables extensibility of commands without requiring extra command types. Passing a command that is shorter than expected is explicitly allowed for backwards-compatibility. Truncated fields will be zeroed.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjoxubh)}(hX For the synthetic attachment setting commands, this implicitly encodes the number of attachments. These commands take multiple fixed-size **drm_asahi_attachment** structures as their payload, so size equals number of attachments * sizeof(struct drm_asahi_attachment).h](hFor the synthetic attachment setting commands, this implicitly encodes the number of attachments. These commands take multiple fixed-size }(hjxhhhNhNubj)}(h**drm_asahi_attachment**h]hdrm_asahi_attachment}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubhi structures as their payload, so size equals number of attachments * sizeof(struct drm_asahi_attachment).}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjoxubeh}(h]h ]h"]h$]h&]uh1jShjSxubeh}(h]h ]h"]h$]h&]uh1j<hjnxhMhjxubj=)}(hX ``vdm_barrier`` VDM (render) command index to wait on. Barriers are indices relative to the beginning of a given submit. A barrier of 0 waits on commands submitted to the respective subqueue in previous submit ioctls. A barrier of N waits on N previous commands on the subqueue within the current submit ioctl. As a special case, passing **DRM_ASAHI_BARRIER_NONE** avoids waiting on any commands in the subqueue. Examples: 0: This waits on all previous work. NONE: This does not wait for anything on this subqueue. 1: This waits on the first render command in the submit. This is valid only if there are multiple render commands in the same submit. Barriers are valid only for hardware commands. Synthetic software commands to set attachments must pass NONE here. h](jC)}(h``vdm_barrier``h]j)}(hjxh]h vdm_barrier}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjxubjT)}(hhh](h)}(h&VDM (render) command index to wait on.h]h&VDM (render) command index to wait on.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjxubh)}(hXeBarriers are indices relative to the beginning of a given submit. A barrier of 0 waits on commands submitted to the respective subqueue in previous submit ioctls. A barrier of N waits on N previous commands on the subqueue within the current submit ioctl. As a special case, passing **DRM_ASAHI_BARRIER_NONE** avoids waiting on any commands in the subqueue.h](hXBarriers are indices relative to the beginning of a given submit. A barrier of 0 waits on commands submitted to the respective subqueue in previous submit ioctls. A barrier of N waits on N previous commands on the subqueue within the current submit ioctl. As a special case, passing }(hjxhhhNhNubj)}(h**DRM_ASAHI_BARRIER_NONE**h]hDRM_ASAHI_BARRIER_NONE}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh0 avoids waiting on any commands in the subqueue.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjxubh)}(h Examples:h]h Examples:}(hj yhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjxubj)}(h0: This waits on all previous work. NONE: This does not wait for anything on this subqueue. 1: This waits on the first render command in the submit. This is valid only if there are multiple render commands in the same submit. h](h)}(h#0: This waits on all previous work.h]h#0: This waits on all previous work.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjyubh)}(h7NONE: This does not wait for anything on this subqueue.h]h7NONE: This does not wait for anything on this subqueue.}(hj.yhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjyubh)}(h1: This waits on the first render command in the submit. This is valid only if there are multiple render commands in the same submit.h]h1: This waits on the first render command in the submit. This is valid only if there are multiple render commands in the same submit.}(hj=yhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjyubeh}(h]h ]h"]h$]h&]uh1jhj-yhMhjxubh)}(hrBarriers are valid only for hardware commands. Synthetic software commands to set attachments must pass NONE here.h]hrBarriers are valid only for hardware commands. Synthetic software commands to set attachments must pass NONE here.}(hjRyhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjxubeh}(h]h ]h"]h$]h&]uh1jShjxubeh}(h]h ]h"]h$]h&]uh1j<hjxhMhjxubj=)}(hv``cdm_barrier`` CDM (compute) command index to wait on. See **vdm_barrier**, and replace VDM/render with CDM/compute.h](jC)}(h``cdm_barrier``h]j)}(hjsyh]h cdm_barrier}(hjuyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqyubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjmyubjT)}(hhh](h)}(h'CDM (compute) command index to wait on.h]h'CDM (compute) command index to wait on.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjyubh)}(h=See **vdm_barrier**, and replace VDM/render with CDM/compute.h](hSee }(hjyhhhNhNubj)}(h**vdm_barrier**h]h vdm_barrier}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubh*, and replace VDM/render with CDM/compute.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjyubeh}(h]h ]h"]h$]h&]uh1jShjmyubeh}(h]h ]h"]h$]h&]uh1j<hjyhMhjxubeh}(h]h ]h"]h$]h&]uh1j7hjwubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubh)}(h**Description**h]j)}(hjyh]h Description}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubh)}(hUThis struct is core to the command buffer definition and therefore is not extensible.h]hUThis struct is core to the command buffer definition and therefore is not extensible.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM{hjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_submit (C struct)c.drm_asahi_submithNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_submith]j)}(hstruct drm_asahi_submith](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjzhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubj)}(h h]h }(hj#zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhj"zhMubj!)}(hdrm_asahi_submith]j')}(hjzh]hdrm_asahi_submit}(hj5zhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj1zubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjzhhhj"zhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj zhhhj"zhMubah}(h]jzah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj"zhMhj zhhubjU)}(hhh]h)}(h*Arguments passed to DRM_IOCTL_ASAHI_SUBMITh]h*Arguments passed to DRM_IOCTL_ASAHI_SUBMIT}(hjWzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjTzhhubah}(h]h ]h"]h$]h&]uh1jThj zhhhj"zhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjozjxjozjyjzj{uh1jhhhjpMhNhNubj})}(hXv**Definition**:: struct drm_asahi_submit { __u64 syncs; __u64 cmdbuf; __u32 flags; __u32 queue_id; __u32 in_sync_count; __u32 out_sync_count; __u32 cmdbuf_size; __u32 pad; }; **Members** ``syncs`` An optional pointer to an array of drm_asahi_sync. The first **in_sync_count** elements are in-syncs, then the remaining **out_sync_count** elements are out-syncs. Using a single array with explicit partitioning simplifies handling. ``cmdbuf`` Pointer to the command buffer to submit. This is a flat command buffer. By design, it contains no CPU pointers, which makes it suitable for a virtgpu wire protocol without requiring any serializing/deserializing step. It consists of a series of commands. Each command begins with a fixed-size **drm_asahi_cmd_header** header and is followed by a variable-length payload according to the type and size in the header. The combined count of "real" hardware commands must be nonzero and at most drm_asahi_params_global::max_commands_per_submission. ``flags`` Flags for command submission (MBZ) ``queue_id`` The queue ID to be submitted to ``in_sync_count`` Number of sync objects to wait on before starting this job. ``out_sync_count`` Number of sync objects to signal upon completion of this job. ``cmdbuf_size`` Command buffer size in bytes ``pad`` MBZh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj{zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwzubh:}(hjwzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjszubj)}(hstruct drm_asahi_submit { __u64 syncs; __u64 cmdbuf; __u32 flags; __u32 queue_id; __u32 in_sync_count; __u32 out_sync_count; __u32 cmdbuf_size; __u32 pad; };h]hstruct drm_asahi_submit { __u64 syncs; __u64 cmdbuf; __u32 flags; __u32 queue_id; __u32 in_sync_count; __u32 out_sync_count; __u32 cmdbuf_size; __u32 pad; };}hjzsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjszubh)}(h **Members**h]j)}(hjzh]hMembers}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjszubj8)}(hhh](j=)}(h``syncs`` An optional pointer to an array of drm_asahi_sync. The first **in_sync_count** elements are in-syncs, then the remaining **out_sync_count** elements are out-syncs. Using a single array with explicit partitioning simplifies handling. h](jC)}(h ``syncs``h]j)}(hjzh]hsyncs}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjzubjT)}(hhh]h)}(hAn optional pointer to an array of drm_asahi_sync. The first **in_sync_count** elements are in-syncs, then the remaining **out_sync_count** elements are out-syncs. Using a single array with explicit partitioning simplifies handling.h](h=An optional pointer to an array of drm_asahi_sync. The first }(hjzhhhNhNubj)}(h**in_sync_count**h]h in_sync_count}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh+ elements are in-syncs, then the remaining }(hjzhhhNhNubj)}(h**out_sync_count**h]hout_sync_count}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh] elements are out-syncs. Using a single array with explicit partitioning simplifies handling.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjzubah}(h]h ]h"]h$]h&]uh1jShjzubeh}(h]h ]h"]h$]h&]uh1j<hjzhMhjzubj=)}(hX/``cmdbuf`` Pointer to the command buffer to submit. This is a flat command buffer. By design, it contains no CPU pointers, which makes it suitable for a virtgpu wire protocol without requiring any serializing/deserializing step. It consists of a series of commands. Each command begins with a fixed-size **drm_asahi_cmd_header** header and is followed by a variable-length payload according to the type and size in the header. The combined count of "real" hardware commands must be nonzero and at most drm_asahi_params_global::max_commands_per_submission. h](jC)}(h ``cmdbuf``h]j)}(hj"{h]hcmdbuf}(hj${hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj {ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj{ubjT)}(hhh](h)}(h(Pointer to the command buffer to submit.h]h(Pointer to the command buffer to submit.}(hj;{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj8{ubh)}(hThis is a flat command buffer. By design, it contains no CPU pointers, which makes it suitable for a virtgpu wire protocol without requiring any serializing/deserializing step.h]hThis is a flat command buffer. By design, it contains no CPU pointers, which makes it suitable for a virtgpu wire protocol without requiring any serializing/deserializing step.}(hjJ{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj8{ubh)}(hIt consists of a series of commands. Each command begins with a fixed-size **drm_asahi_cmd_header** header and is followed by a variable-length payload according to the type and size in the header.h](hKIt consists of a series of commands. Each command begins with a fixed-size }(hjY{hhhNhNubj)}(h**drm_asahi_cmd_header**h]hdrm_asahi_cmd_header}(hja{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY{ubhb header and is followed by a variable-length payload according to the type and size in the header.}(hjY{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj8{ubh)}(hThe combined count of "real" hardware commands must be nonzero and at most drm_asahi_params_global::max_commands_per_submission.h]hThe combined count of “real” hardware commands must be nonzero and at most drm_asahi_params_global::max_commands_per_submission.}(hjz{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj8{ubeh}(h]h ]h"]h$]h&]uh1jShj{ubeh}(h]h ]h"]h$]h&]uh1j<hj7{hMhjzubj=)}(h-``flags`` Flags for command submission (MBZ) h](jC)}(h ``flags``h]j)}(hj{h]hflags}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj{ubjT)}(hhh]h)}(h"Flags for command submission (MBZ)h]h"Flags for command submission (MBZ)}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jShj{ubeh}(h]h ]h"]h$]h&]uh1j<hj{hMhjzubj=)}(h-``queue_id`` The queue ID to be submitted to h](jC)}(h ``queue_id``h]j)}(hj{h]hqueue_id}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj{ubjT)}(hhh]h)}(hThe queue ID to be submitted toh]hThe queue ID to be submitted to}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jShj{ubeh}(h]h ]h"]h$]h&]uh1j<hj{hMhjzubj=)}(hN``in_sync_count`` Number of sync objects to wait on before starting this job. h](jC)}(h``in_sync_count``h]j)}(hj |h]h in_sync_count}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj |ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj|ubjT)}(hhh]h)}(h;Number of sync objects to wait on before starting this job.h]h;Number of sync objects to wait on before starting this job.}(hj&|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj#|ubah}(h]h ]h"]h$]h&]uh1jShj|ubeh}(h]h ]h"]h$]h&]uh1j<hj"|hMhjzubj=)}(hQ``out_sync_count`` Number of sync objects to signal upon completion of this job. h](jC)}(h``out_sync_count``h]j)}(hjG|h]hout_sync_count}(hjI|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE|ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjA|ubjT)}(hhh]h)}(h=Number of sync objects to signal upon completion of this job.h]h=Number of sync objects to signal upon completion of this job.}(hj`|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj]|ubah}(h]h ]h"]h$]h&]uh1jShjA|ubeh}(h]h ]h"]h$]h&]uh1j<hj\|hMhjzubj=)}(h-``cmdbuf_size`` Command buffer size in bytes h](jC)}(h``cmdbuf_size``h]j)}(hj|h]h cmdbuf_size}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj{|ubjT)}(hhh]h)}(hCommand buffer size in bytesh]hCommand buffer size in bytes}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jShj{|ubeh}(h]h ]h"]h$]h&]uh1j<hj|hMhjzubj=)}(h ``pad`` MBZh](jC)}(h``pad``h]j)}(hj|h]hpad}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj|ubjT)}(hhh]h)}(hMBZh]hMBZ}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj|ubah}(h]h ]h"]h$]h&]uh1jShj|ubeh}(h]h ]h"]h$]h&]uh1j<hj|hMhjzubeh}(h]h ]h"]h$]h&]uh1j7hjszubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_attachment (C struct)c.drm_asahi_attachmenthNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_attachmenth]j)}(hstruct drm_asahi_attachmenth](j)}(hjh]hstruct}(hj}hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj}hhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubj)}(h h]h }(hj"}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhj!}hMubj!)}(hdrm_asahi_attachmenth]j')}(hj}h]hdrm_asahi_attachment}(hj4}hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj0}ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj}hhhj!}hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj }hhhj!}hMubah}(h]j}ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj!}hMhj }hhubjU)}(hhh]h)}(hDescribe an "attachment".h]hDescribe an “attachment”.}(hjV}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjS}hhubah}(h]h ]h"]h$]h&]uh1jThj }hhhj!}hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjn}jxjn}jyjzj{uh1jhhhjpMhNhNubj})}(hX**Definition**:: struct drm_asahi_attachment { __u64 pointer; __u64 size; __u32 pad; __u32 flags; }; **Members** ``pointer`` Base address of the attachment ``size`` Size of the attachment in bytes ``pad`` MBZ ``flags`` MBZh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjz}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv}ubh:}(hjv}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjr}ubj)}(hcstruct drm_asahi_attachment { __u64 pointer; __u64 size; __u32 pad; __u32 flags; };h]hcstruct drm_asahi_attachment { __u64 pointer; __u64 size; __u32 pad; __u32 flags; };}hj}sbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjr}ubh)}(h **Members**h]j)}(hj}h]hMembers}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjr}ubj8)}(hhh](j=)}(h+``pointer`` Base address of the attachment h](jC)}(h ``pointer``h]j)}(hj}h]hpointer}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj}ubjT)}(hhh]h)}(hBase address of the attachmenth]hBase address of the attachment}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jShj}ubeh}(h]h ]h"]h$]h&]uh1j<hj}hMhj}ubj=)}(h)``size`` Size of the attachment in bytes h](jC)}(h``size``h]j)}(hj}h]hsize}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj}ubjT)}(hhh]h)}(hSize of the attachment in bytesh]hSize of the attachment in bytes}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jShj}ubeh}(h]h ]h"]h$]h&]uh1j<hj~hMhj}ubj=)}(h ``pad`` MBZ h](jC)}(h``pad``h]j)}(hj5~h]hpad}(hj7~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3~ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj/~ubjT)}(hhh]h)}(hMBZh]hMBZ}(hjN~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ~hMhjK~ubah}(h]h ]h"]h$]h&]uh1jShj/~ubeh}(h]h ]h"]h$]h&]uh1j<hjJ~hMhj}ubj=)}(h ``flags`` MBZh](jC)}(h ``flags``h]j)}(hjn~h]hflags}(hjp~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl~ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjh~ubjT)}(hhh]h)}(hMBZh]hMBZ}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj~ubah}(h]h ]h"]h$]h&]uh1jShjh~ubeh}(h]h ]h"]h$]h&]uh1j<hj~hMhj}ubeh}(h]h ]h"]h$]h&]uh1j7hjr}ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubh)}(h**Description**h]j)}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubh)}(hXAttachments are any memory written by shaders, notably including render target attachments written by the end-of-tile program. This is purely a hint about the accessed memory regions. It is optional to specify, which is fortunate as it cannot be specified precisely with bindless access anyway. But where possible, it's probably a good idea for userspace to include these hints, forwarded to the firmware.h]hXAttachments are any memory written by shaders, notably including render target attachments written by the end-of-tile program. This is purely a hint about the accessed memory regions. It is optional to specify, which is fortunate as it cannot be specified precisely with bindless access anyway. But where possible, it’s probably a good idea for userspace to include these hints, forwarded to the firmware.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubh)}(h@This struct is implicitly sized and therefore is not extensible.h]h@This struct is implicitly sized and therefore is not extensible.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_zls_buffer (C struct)c.drm_asahi_zls_bufferhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_zls_bufferh]j)}(hstruct drm_asahi_zls_bufferh](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj~hhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhj hMubj!)}(hdrm_asahi_zls_bufferh]j')}(hj~h]hdrm_asahi_zls_buffer}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj~hhhj hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj~hhhj hMubah}(h]j~ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj hMhj~hhubjU)}(hhh]h)}(h#Describe a depth or stencil buffer.h]h#Describe a depth or stencil buffer.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM(hj=hhubah}(h]h ]h"]h$]h&]uh1jThj~hhhj hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjXjxjXjyjzj{uh1jhhhjpMhNhNubj})}(hX**Definition**:: struct drm_asahi_zls_buffer { __u64 base; __u64 comp_base; __u32 stride; __u32 comp_stride; }; **Members** ``base`` Base address of the buffer ``comp_base`` If the load buffer is compressed, address of the compression metadata section. ``stride`` If layered rendering is enabled, the number of bytes between each layer of the buffer. ``comp_stride`` If layered rendering is enabled, the number of bytes between each layer of the compression metadata.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubh:}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM,hj\ubj)}(hnstruct drm_asahi_zls_buffer { __u64 base; __u64 comp_base; __u32 stride; __u32 comp_stride; };h]hnstruct drm_asahi_zls_buffer { __u64 base; __u64 comp_base; __u32 stride; __u32 comp_stride; };}hj}sbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM.hj\ubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM5hj\ubj8)}(hhh](j=)}(h$``base`` Base address of the buffer h](jC)}(h``base``h]j)}(hjh]hbase}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM4hjubjT)}(hhh]h)}(hBase address of the bufferh]hBase address of the buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM4hjubj=)}(h]``comp_base`` If the load buffer is compressed, address of the compression metadata section. h](jC)}(h ``comp_base``h]j)}(hjh]h comp_base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM9hjubjT)}(hhh]h)}(hNIf the load buffer is compressed, address of the compression metadata section.h]hNIf the load buffer is compressed, address of the compression metadata section.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM8hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM9hjubj=)}(hb``stride`` If layered rendering is enabled, the number of bytes between each layer of the buffer. h](jC)}(h ``stride``h]j)}(hj h]hstride}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM?hjubjT)}(hhh]h)}(hVIf layered rendering is enabled, the number of bytes between each layer of the buffer.h]hVIf layered rendering is enabled, the number of bytes between each layer of the buffer.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM>hj6ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj5hM?hjubj=)}(ht``comp_stride`` If layered rendering is enabled, the number of bytes between each layer of the compression metadata.h](jC)}(h``comp_stride``h]j)}(hjZh]h comp_stride}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMDhjTubjT)}(hhh]h)}(hdIf layered rendering is enabled, the number of bytes between each layer of the compression metadata.h]hdIf layered rendering is enabled, the number of bytes between each layer of the compression metadata.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohMDhjpubah}(h]h ]h"]h$]h&]uh1jShjTubeh}(h]h ]h"]h$]h&]uh1j<hjohMDhjubeh}(h]h ]h"]h$]h&]uh1j7hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMHhjpMhhubh)}(hXdThese fields correspond to hardware registers in the ZLS (Z Load/Store) unit. There are three hardware registers for each field respectively for loads, stores, and partial renders. In practice, it makes sense to set all to the same values, except in exceptional cases not yet implemented in userspace, so we do not duplicate here for simplicity/efficiency.h]hXdThese fields correspond to hardware registers in the ZLS (Z Load/Store) unit. There are three hardware registers for each field respectively for loads, stores, and partial renders. In practice, it makes sense to set all to the same values, except in exceptional cases not yet implemented in userspace, so we do not duplicate here for simplicity/efficiency.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM)hjpMhhubh)}(hIThis struct is embedded in other structs and therefore is not extensible.h]hIThis struct is embedded in other structs and therefore is not extensible.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM/hjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_timestamp (C struct)c.drm_asahi_timestamphNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_timestamph]j)}(hstruct drm_asahi_timestamph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM4ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM4ubj!)}(hdrm_asahi_timestamph]j')}(hjh]hdrm_asahi_timestamp}(hj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhM4ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhM4ubah}(h]j܀ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhM4hjހhhubjU)}(hhh]h)}(hDescribe a timestamp write.h]hDescribe a timestamp write.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMJhj(hhubah}(h]h ]h"]h$]h&]uh1jThjހhhhjhM4ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjCjxjCjyjzj{uh1jhhhjpMhNhNubj})}(hXM**Definition**:: struct drm_asahi_timestamp { __u32 handle; __u32 offset; }; **Members** ``handle`` Handle of the timestamp buffer, or 0 to skip this timestamp. If nonzero, this must equal the value returned in drm_asahi_gem_bind_object::object_handle. ``offset`` Offset to write into the timestamp bufferh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh:}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMNhjGubj)}(hCstruct drm_asahi_timestamp { __u32 handle; __u32 offset; };h]hCstruct drm_asahi_timestamp { __u32 handle; __u32 offset; };}hjhsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMPhjGubh)}(h **Members**h]j)}(hjyh]hMembers}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMUhjGubj8)}(hhh](j=)}(h``handle`` Handle of the timestamp buffer, or 0 to skip this timestamp. If nonzero, this must equal the value returned in drm_asahi_gem_bind_object::object_handle. h](jC)}(h ``handle``h]j)}(hjh]hhandle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMXhjubjT)}(hhh]h)}(hHandle of the timestamp buffer, or 0 to skip this timestamp. If nonzero, this must equal the value returned in drm_asahi_gem_bind_object::object_handle.h]hHandle of the timestamp buffer, or 0 to skip this timestamp. If nonzero, this must equal the value returned in drm_asahi_gem_bind_object::object_handle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMVhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMXhjubj=)}(h4``offset`` Offset to write into the timestamp bufferh](jC)}(h ``offset``h]j)}(hjҁh]hoffset}(hjԁhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjЁubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM[hj́ubjT)}(hhh]h)}(h)Offset to write into the timestamp bufferh]h)Offset to write into the timestamp buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM\hjubah}(h]h ]h"]h$]h&]uh1jShj́ubeh}(h]h ]h"]h$]h&]uh1j<hjhM[hjubeh}(h]h ]h"]h$]h&]uh1j7hjGubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM_hjpMhhubh)}(hX The firmware can optionally write the GPU timestamp at render pass granularities, but it needs to be mapped specially via DRM_IOCTL_ASAHI_GEM_BIND_OBJECT. This structure therefore describes where to write as a handle-offset pair, rather than a GPU address like normal.h]hX The firmware can optionally write the GPU timestamp at render pass granularities, but it needs to be mapped specially via DRM_IOCTL_ASAHI_GEM_BIND_OBJECT. This structure therefore describes where to write as a handle-offset pair, rather than a GPU address like normal.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMKhjpMhhubh)}(hIThis struct is embedded in other structs and therefore is not extensible.h]hIThis struct is embedded in other structs and therefore is not extensible.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMPhjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_timestamps (C struct)c.drm_asahi_timestampshNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_timestampsh]j)}(hstruct drm_asahi_timestampsh](j)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj^hhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMUubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhjohMUubj!)}(hdrm_asahi_timestampsh]j')}(hj\h]hdrm_asahi_timestamps}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj~ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hj^hhhjohMUubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjZhhhjohMUubah}(h]jUah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjohMUhjWhhubjU)}(hhh]h)}(hDescribe timestamp writes.h]hDescribe timestamp writes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM`hjhhubah}(h]h ]h"]h$]h&]uh1jThjWhhhjohMUubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjpMhNhNubj})}(hX **Definition**:: struct drm_asahi_timestamps { struct drm_asahi_timestamp start; struct drm_asahi_timestamp end; }; **Members** ``start`` Timestamp recorded at the start of the operation ``end`` Timestamp recorded at the end of the operationh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjȂhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĂubh:}(hjĂhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMdhjubj)}(hjstruct drm_asahi_timestamps { struct drm_asahi_timestamp start; struct drm_asahi_timestamp end; };h]hjstruct drm_asahi_timestamps { struct drm_asahi_timestamp start; struct drm_asahi_timestamp end; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMfhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMkhjubj8)}(hhh](j=)}(h;``start`` Timestamp recorded at the start of the operation h](jC)}(h ``start``h]j)}(hjh]hstart}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMjhj ubjT)}(hhh]h)}(h0Timestamp recorded at the start of the operationh]h0Timestamp recorded at the start of the operation}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMjhj'ubah}(h]h ]h"]h$]h&]uh1jShj ubeh}(h]h ]h"]h$]h&]uh1j<hj&hMjhjubj=)}(h6``end`` Timestamp recorded at the end of the operationh](jC)}(h``end``h]j)}(hjJh]hend}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMlhjDubjT)}(hhh]h)}(h.Timestamp recorded at the end of the operationh]h.Timestamp recorded at the end of the operation}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMmhj`ubah}(h]h ]h"]h$]h&]uh1jShjDubeh}(h]h ]h"]h$]h&]uh1j<hj_hMlhjubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMphjpMhhubh)}(hEach operation that can be timestamped, can be timestamped at the start and end. Therefore, drm_asahi_timestamp structs always come in pairs, bundled together into drm_asahi_timestamps.h]hEach operation that can be timestamped, can be timestamped at the start and end. Therefore, drm_asahi_timestamp structs always come in pairs, bundled together into drm_asahi_timestamps.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMahjpMhhubh)}(hIThis struct is embedded in other structs and therefore is not extensible.h]hIThis struct is embedded in other structs and therefore is not extensible.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMehjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#drm_asahi_helper_program (C struct)c.drm_asahi_helper_programhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_helper_programh]j)}(hstruct drm_asahi_helper_programh](j)}(hjh]hstruct}(hjڃhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjփhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjփhhhjhMjubj!)}(hdrm_asahi_helper_programh]j')}(hjԃh]hdrm_asahi_helper_program}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjփhhhjhMjubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj҃hhhjhMjubah}(h]j̓ah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMjhjσhhubjU)}(hhh]h)}(h&Describe helper program configuration.h]h&Describe helper program configuration.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMqhjhhubah}(h]h ]h"]h$]h&]uh1jThjσhhhjhMjubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwj4jxj4jyjzj{uh1jhhhjpMhNhNubj})}(hX**Definition**:: struct drm_asahi_helper_program { __u32 binary; __u32 cfg; __u64 data; }; **Members** ``binary`` USC address to the helper program binary. This is a tagged pointer with configuration in the bottom bits. ``cfg`` Additional configuration bits for the helper program. ``data`` Data passed to the helper program. This value is not interpreted by the kernel, firmware, or hardware in any way. It is simply a sideband for userspace, set with the submit ioctl and read via special registers inside the helper program. In practice, userspace will pass a 64-bit GPU VA here pointing to the actual arguments, which presumably don't fit in 64-bits.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubh:}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMuhj8ubj)}(hUstruct drm_asahi_helper_program { __u32 binary; __u32 cfg; __u64 data; };h]hUstruct drm_asahi_helper_program { __u32 binary; __u32 cfg; __u64 data; };}hjYsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMwhj8ubh)}(h **Members**h]j)}(hjjh]hMembers}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM}hj8ubj8)}(hhh](j=)}(hu``binary`` USC address to the helper program binary. This is a tagged pointer with configuration in the bottom bits. h](jC)}(h ``binary``h]j)}(hjh]hbinary}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(hiUSC address to the helper program binary. This is a tagged pointer with configuration in the bottom bits.h]hiUSC address to the helper program binary. This is a tagged pointer with configuration in the bottom bits.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM~hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h>``cfg`` Additional configuration bits for the helper program. h](jC)}(h``cfg``h]j)}(hjÄh]hcfg}(hjńhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(h5Additional configuration bits for the helper program.h]h5Additional configuration bits for the helper program.}(hj܄hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj؄hMhjلubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj؄hMhjubj=)}(hXu``data`` Data passed to the helper program. This value is not interpreted by the kernel, firmware, or hardware in any way. It is simply a sideband for userspace, set with the submit ioctl and read via special registers inside the helper program. In practice, userspace will pass a 64-bit GPU VA here pointing to the actual arguments, which presumably don't fit in 64-bits.h](jC)}(h``data``h]j)}(hjh]hdata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh](h)}(hData passed to the helper program. This value is not interpreted by the kernel, firmware, or hardware in any way. It is simply a sideband for userspace, set with the submit ioctl and read via special registers inside the helper program.h]hData passed to the helper program. This value is not interpreted by the kernel, firmware, or hardware in any way. It is simply a sideband for userspace, set with the submit ioctl and read via special registers inside the helper program.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubh)}(h~In practice, userspace will pass a 64-bit GPU VA here pointing to the actual arguments, which presumably don't fit in 64-bits.h]hIn practice, userspace will pass a 64-bit GPU VA here pointing to the actual arguments, which presumably don’t fit in 64-bits.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubh)}(h**Description**h]j)}(hjMh]h Description}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubh)}(hXhThe helper program is a compute-like kernel required for various hardware functionality. Its most important role is dynamically allocating scratch/stack memory for individual subgroups, by partitioning a static allocation shared for the whole device. It is supplied by userspace via drm_asahi_helper_program and internally dispatched by the hardware as needed.h]hXhThe helper program is a compute-like kernel required for various hardware functionality. Its most important role is dynamically allocating scratch/stack memory for individual subgroups, by partitioning a static allocation shared for the whole device. It is supplied by userspace via drm_asahi_helper_program and internally dispatched by the hardware as needed.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMrhjpMhhubh)}(hIThis struct is embedded in other structs and therefore is not extensible.h]hIThis struct is embedded in other structs and therefore is not extensible.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMxhjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_bg_eot (C struct)c.drm_asahi_bg_eothNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_bg_eoth]j)}(hstruct drm_asahi_bg_eoth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM}ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM}ubj!)}(hdrm_asahi_bg_eoth]j')}(hjh]hdrm_asahi_bg_eot}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhM}ubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhM}ubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhM}hjhhubjU)}(hhh]h)}(h-Describe a background or end-of-tile program.h]h-Describe a background or end-of-tile program.}(hj܅hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjمhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhM}ubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjpMhNhNubj})}(hXm**Definition**:: struct drm_asahi_bg_eot { __u32 usc; __u32 rsrc_spec; }; **Members** ``usc`` USC address of the hardware USC words binding resources (including images and uniforms) and the program itself. Note this is an additional layer of indirection compared to the helper program, avoiding the need for a sideband for data. This is a tagged pointer with additional configuration in the bottom bits. ``rsrc_spec`` Resource specifier for the program. This is a packed hardware data structure describing the required number of registers, uniforms, bound textures, and bound samplers.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubj)}(h@struct drm_asahi_bg_eot { __u32 usc; __u32 rsrc_spec; };h]h@struct drm_asahi_bg_eot { __u32 usc; __u32 rsrc_spec; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubh)}(h **Members**h]j)}(hj*h]hMembers}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubj8)}(hhh](j=)}(hX>``usc`` USC address of the hardware USC words binding resources (including images and uniforms) and the program itself. Note this is an additional layer of indirection compared to the helper program, avoiding the need for a sideband for data. This is a tagged pointer with additional configuration in the bottom bits. h](jC)}(h``usc``h]j)}(hjIh]husc}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjCubjT)}(hhh]h)}(hX5USC address of the hardware USC words binding resources (including images and uniforms) and the program itself. Note this is an additional layer of indirection compared to the helper program, avoiding the need for a sideband for data. This is a tagged pointer with additional configuration in the bottom bits.h]hX5USC address of the hardware USC words binding resources (including images and uniforms) and the program itself. Note this is an additional layer of indirection compared to the helper program, avoiding the need for a sideband for data. This is a tagged pointer with additional configuration in the bottom bits.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj_ubah}(h]h ]h"]h$]h&]uh1jShjCubeh}(h]h ]h"]h$]h&]uh1j<hj^hMhj@ubj=)}(h``rsrc_spec`` Resource specifier for the program. This is a packed hardware data structure describing the required number of registers, uniforms, bound textures, and bound samplers.9h](jC)}(h ``rsrc_spec``h]j)}(hjh]h rsrc_spec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj}ubjT)}(hhh]h)}(hResource specifier for the program. This is a packed hardware data structure describing the required number of registers, uniforms, bound textures, and bound samplers.h]hResource specifier for the program. This is a packed hardware data structure describing the required number of registers, uniforms, bound textures, and bound samplers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShj}ubeh}(h]h ]h"]h$]h&]uh1j<hjhMhj@ubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubh)}(h**Description**h]j)}(hjƆh]h Description}(hjȆhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĆubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubh)}(hXThe background and end-of-tile programs are dispatched by the hardware at the beginning and end of rendering. As the hardware "tilebuffer" is simply local memory, these programs are necessary to implement API-level render targets. The fragment-like background program is responsible for loading either the clear colour or the existing render target contents, while the compute-like end-of-tile program stores the tilebuffer contents to memory.h]hXThe background and end-of-tile programs are dispatched by the hardware at the beginning and end of rendering. As the hardware “tilebuffer” is simply local memory, these programs are necessary to implement API-level render targets. The fragment-like background program is responsible for loading either the clear colour or the existing render target contents, while the compute-like end-of-tile program stores the tilebuffer contents to memory.}(hj܆hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubh)}(hIThis struct is embedded in other structs and therefore is not extensible.h]hIThis struct is embedded in other structs and therefore is not extensible.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_cmd_render (C struct)c.drm_asahi_cmd_renderhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_cmd_renderh]j)}(hstruct drm_asahi_cmd_renderh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj!)}(hdrm_asahi_cmd_renderh]j')}(hj h]hdrm_asahi_cmd_render}(hj3hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj/ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhj hMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhj hhhj hMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj hMhjhhubjU)}(hhh]h)}(hCommand to submit 3Dh]hCommand to submit 3D}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjRhhubah}(h]h ]h"]h$]h&]uh1jThjhhhj hMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjmjxjmjyjzj{uh1jhhhjpMhNhNubj})}(hXh**Definition**:: struct drm_asahi_cmd_render { __u32 flags; __u32 isp_zls_pixels; __u64 vdm_ctrl_stream_base; struct drm_asahi_helper_program vertex_helper; struct drm_asahi_helper_program fragment_helper; __u64 isp_scissor_base; __u64 isp_dbias_base; __u64 isp_oclqry_base; struct drm_asahi_zls_buffer depth; struct drm_asahi_zls_buffer stencil; __u64 zls_ctrl; __u64 ppp_multisamplectl; __u64 sampler_heap; __u32 ppp_ctrl; __u16 width_px; __u16 height_px; __u16 layers; __u16 sampler_count; __u8 utile_width_px; __u8 utile_height_px; __u8 samples; __u8 sample_size_B; __u32 isp_merge_upper_x; __u32 isp_merge_upper_y; struct drm_asahi_bg_eot bg; struct drm_asahi_bg_eot eot; struct drm_asahi_bg_eot partial_bg; struct drm_asahi_bg_eot partial_eot; __u32 isp_bgobjdepth; __u32 isp_bgobjvals; struct drm_asahi_timestamps ts_vtx; struct drm_asahi_timestamps ts_frag; }; **Members** ``flags`` Combination of drm_asahi_render_flags flags. ``isp_zls_pixels`` ISP_ZLS_PIXELS register value. This contains the depth/stencil width/height, which may differ from the framebuffer width/height. ``vdm_ctrl_stream_base`` VDM_CTRL_STREAM_BASE register value. GPU address to the beginning of the VDM control stream. ``vertex_helper`` Helper program used for the vertex shader ``fragment_helper`` Helper program used for the fragment shader ``isp_scissor_base`` ISP_SCISSOR_BASE register value. GPU address of an array of scissor descriptors indexed in the render pass. ``isp_dbias_base`` ISP_DBIAS_BASE register value. GPU address of an array of depth bias values indexed in the render pass. ``isp_oclqry_base`` ISP_OCLQRY_BASE register value. GPU address of an array of occlusion query results written by the render pass. ``depth`` Depth buffer ``stencil`` Stencil buffer ``zls_ctrl`` ZLS_CTRL register value ``ppp_multisamplectl`` PPP_MULTISAMPLECTL register value ``sampler_heap`` Base address of the sampler heap. This heap is used for both vertex shaders and fragment shaders. The registers are per-stage, but there is no known use case for separate heaps. ``ppp_ctrl`` PPP_CTRL register value ``width_px`` Framebuffer width in pixels ``height_px`` Framebuffer height in pixels ``layers`` Number of layers in the framebuffer ``sampler_count`` Number of samplers in the sampler heap. ``utile_width_px`` Width of a logical tilebuffer tile in pixels ``utile_height_px`` Height of a logical tilebuffer tile in pixels ``samples`` # of samples in the framebuffer. Must be 1, 2, or 4. ``sample_size_B`` # of bytes in the tilebuffer required per sample. ``isp_merge_upper_x`` 32-bit float used in the hardware triangle merging. Calculate as: tan(60 deg) * width. Making these values UAPI avoids requiring floating-point calculations in the kernel in the hot path. ``isp_merge_upper_y`` 32-bit float. Calculate as: tan(60 deg) * height. See **isp_merge_upper_x**. ``bg`` Background program run for each tile at the start ``eot`` End-of-tile program ran for each tile at the end ``partial_bg`` Background program ran at the start of each tile when resuming the render pass during a partial render. ``partial_eot`` End-of-tile program ran at the end of each tile when pausing the render pass during a partial render. ``isp_bgobjdepth`` ISP_BGOBJDEPTH register value. This is the depth buffer clear value, encoded in the depth buffer's format: either a 32-bit float or a 16-bit unorm (with upper bits zeroed). ``isp_bgobjvals`` ISP_BGOBJVALS register value. The bottom 8-bits contain the stencil buffer clear value. ``ts_vtx`` Timestamps for the vertex portion of the render ``ts_frag`` Timestamps for the fragment portion of the renderh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh:}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjqubj)}(hXstruct drm_asahi_cmd_render { __u32 flags; __u32 isp_zls_pixels; __u64 vdm_ctrl_stream_base; struct drm_asahi_helper_program vertex_helper; struct drm_asahi_helper_program fragment_helper; __u64 isp_scissor_base; __u64 isp_dbias_base; __u64 isp_oclqry_base; struct drm_asahi_zls_buffer depth; struct drm_asahi_zls_buffer stencil; __u64 zls_ctrl; __u64 ppp_multisamplectl; __u64 sampler_heap; __u32 ppp_ctrl; __u16 width_px; __u16 height_px; __u16 layers; __u16 sampler_count; __u8 utile_width_px; __u8 utile_height_px; __u8 samples; __u8 sample_size_B; __u32 isp_merge_upper_x; __u32 isp_merge_upper_y; struct drm_asahi_bg_eot bg; struct drm_asahi_bg_eot eot; struct drm_asahi_bg_eot partial_bg; struct drm_asahi_bg_eot partial_eot; __u32 isp_bgobjdepth; __u32 isp_bgobjvals; struct drm_asahi_timestamps ts_vtx; struct drm_asahi_timestamps ts_frag; };h]hXstruct drm_asahi_cmd_render { __u32 flags; __u32 isp_zls_pixels; __u64 vdm_ctrl_stream_base; struct drm_asahi_helper_program vertex_helper; struct drm_asahi_helper_program fragment_helper; __u64 isp_scissor_base; __u64 isp_dbias_base; __u64 isp_oclqry_base; struct drm_asahi_zls_buffer depth; struct drm_asahi_zls_buffer stencil; __u64 zls_ctrl; __u64 ppp_multisamplectl; __u64 sampler_heap; __u32 ppp_ctrl; __u16 width_px; __u16 height_px; __u16 layers; __u16 sampler_count; __u8 utile_width_px; __u8 utile_height_px; __u8 samples; __u8 sample_size_B; __u32 isp_merge_upper_x; __u32 isp_merge_upper_y; struct drm_asahi_bg_eot bg; struct drm_asahi_bg_eot eot; struct drm_asahi_bg_eot partial_bg; struct drm_asahi_bg_eot partial_eot; __u32 isp_bgobjdepth; __u32 isp_bgobjvals; struct drm_asahi_timestamps ts_vtx; struct drm_asahi_timestamps ts_frag; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjqubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjqubj8)}(hhh](j=)}(h7``flags`` Combination of drm_asahi_render_flags flags. h](jC)}(h ``flags``h]j)}(hj‡h]hflags}(hjćhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(h,Combination of drm_asahi_render_flags flags.h]h,Combination of drm_asahi_render_flags flags.}(hjۇhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjׇhMhj؇ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjׇhMhjubj=)}(h``isp_zls_pixels`` ISP_ZLS_PIXELS register value. This contains the depth/stencil width/height, which may differ from the framebuffer width/height. h](jC)}(h``isp_zls_pixels``h]j)}(hjh]hisp_zls_pixels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(hISP_ZLS_PIXELS register value. This contains the depth/stencil width/height, which may differ from the framebuffer width/height.h]hISP_ZLS_PIXELS register value. This contains the depth/stencil width/height, which may differ from the framebuffer width/height.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hv``vdm_ctrl_stream_base`` VDM_CTRL_STREAM_BASE register value. GPU address to the beginning of the VDM control stream. h](jC)}(h``vdm_ctrl_stream_base``h]j)}(hj5h]hvdm_ctrl_stream_base}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj/ubjT)}(hhh]h)}(h\VDM_CTRL_STREAM_BASE register value. GPU address to the beginning of the VDM control stream.h]h\VDM_CTRL_STREAM_BASE register value. GPU address to the beginning of the VDM control stream.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjKubah}(h]h ]h"]h$]h&]uh1jShj/ubeh}(h]h ]h"]h$]h&]uh1j<hjJhMhjubj=)}(h<``vertex_helper`` Helper program used for the vertex shader h](jC)}(h``vertex_helper``h]j)}(hjoh]h vertex_helper}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjiubjT)}(hhh]h)}(h)Helper program used for the vertex shaderh]h)Helper program used for the vertex shader}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjiubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h@``fragment_helper`` Helper program used for the fragment shader h](jC)}(h``fragment_helper``h]j)}(hjh]hfragment_helper}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(h+Helper program used for the fragment shaderh]h+Helper program used for the fragment shader}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``isp_scissor_base`` ISP_SCISSOR_BASE register value. GPU address of an array of scissor descriptors indexed in the render pass. h](jC)}(h``isp_scissor_base``h]j)}(hjh]hisp_scissor_base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj߈ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjۈubjT)}(hhh]h)}(hkISP_SCISSOR_BASE register value. GPU address of an array of scissor descriptors indexed in the render pass.h]hkISP_SCISSOR_BASE register value. GPU address of an array of scissor descriptors indexed in the render pass.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjۈubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h{``isp_dbias_base`` ISP_DBIAS_BASE register value. GPU address of an array of depth bias values indexed in the render pass. h](jC)}(h``isp_dbias_base``h]j)}(hjh]hisp_dbias_base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(hgISP_DBIAS_BASE register value. GPU address of an array of depth bias values indexed in the render pass.h]hgISP_DBIAS_BASE register value. GPU address of an array of depth bias values indexed in the render pass.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj1ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj0hMhjubj=)}(h``isp_oclqry_base`` ISP_OCLQRY_BASE register value. GPU address of an array of occlusion query results written by the render pass. h](jC)}(h``isp_oclqry_base``h]j)}(hjUh]hisp_oclqry_base}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjOubjT)}(hhh]h)}(hnISP_OCLQRY_BASE register value. GPU address of an array of occlusion query results written by the render pass.h]hnISP_OCLQRY_BASE register value. GPU address of an array of occlusion query results written by the render pass.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjkubah}(h]h ]h"]h$]h&]uh1jShjOubeh}(h]h ]h"]h$]h&]uh1j<hjjhMhjubj=)}(h``depth`` Depth buffer h](jC)}(h ``depth``h]j)}(hjh]hdepth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(h Depth bufferh]h Depth buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h``stencil`` Stencil buffer h](jC)}(h ``stencil``h]j)}(hjȉh]hstencil}(hjʉhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƉubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj‰ubjT)}(hhh]h)}(hStencil bufferh]hStencil buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj݉hMhjމubah}(h]h ]h"]h$]h&]uh1jShj‰ubeh}(h]h ]h"]h$]h&]uh1j<hj݉hMhjubj=)}(h%``zls_ctrl`` ZLS_CTRL register value h](jC)}(h ``zls_ctrl``h]j)}(hjh]hzls_ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(hZLS_CTRL register valueh]hZLS_CTRL register value}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h9``ppp_multisamplectl`` PPP_MULTISAMPLECTL register value h](jC)}(h``ppp_multisamplectl``h]j)}(hj:h]hppp_multisamplectl}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj4ubjT)}(hhh]h)}(h!PPP_MULTISAMPLECTL register valueh]h!PPP_MULTISAMPLECTL register value}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjPubah}(h]h ]h"]h$]h&]uh1jShj4ubeh}(h]h ]h"]h$]h&]uh1j<hjOhMhjubj=)}(h``sampler_heap`` Base address of the sampler heap. This heap is used for both vertex shaders and fragment shaders. The registers are per-stage, but there is no known use case for separate heaps. h](jC)}(h``sampler_heap``h]j)}(hjsh]h sampler_heap}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjmubjT)}(hhh]h)}(hBase address of the sampler heap. This heap is used for both vertex shaders and fragment shaders. The registers are per-stage, but there is no known use case for separate heaps.h]hBase address of the sampler heap. This heap is used for both vertex shaders and fragment shaders. The registers are per-stage, but there is no known use case for separate heaps.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjmubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h%``ppp_ctrl`` PPP_CTRL register value h](jC)}(h ``ppp_ctrl``h]j)}(hjh]hppp_ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM hjubjT)}(hhh]h)}(hPPP_CTRL register valueh]hPPP_CTRL register value}(hjƊhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjŠhM hjÊubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjŠhM hjubj=)}(h)``width_px`` Framebuffer width in pixels h](jC)}(h ``width_px``h]j)}(hjh]hwidth_px}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM hjubjT)}(hhh]h)}(hFramebuffer width in pixelsh]hFramebuffer width in pixels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhM hjubj=)}(h+``height_px`` Framebuffer height in pixels h](jC)}(h ``height_px``h]j)}(hjh]h height_px}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(hFramebuffer height in pixelsh]hFramebuffer height in pixels}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj4hMhjubj=)}(h/``layers`` Number of layers in the framebuffer h](jC)}(h ``layers``h]j)}(hjXh]hlayers}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjRubjT)}(hhh]h)}(h#Number of layers in the framebufferh]h#Number of layers in the framebuffer}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jShjRubeh}(h]h ]h"]h$]h&]uh1j<hjmhMhjubj=)}(h:``sampler_count`` Number of samplers in the sampler heap. h](jC)}(h``sampler_count``h]j)}(hjh]h sampler_count}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(h'Number of samplers in the sampler heap.h]h'Number of samplers in the sampler heap.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(h@``utile_width_px`` Width of a logical tilebuffer tile in pixels h](jC)}(h``utile_width_px``h]j)}(hjʋh]hutile_width_px}(hj̋hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȋubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjċubjT)}(hhh]h)}(h,Width of a logical tilebuffer tile in pixelsh]h,Width of a logical tilebuffer tile in pixels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjߋhMhjubah}(h]h ]h"]h$]h&]uh1jShjċubeh}(h]h ]h"]h$]h&]uh1j<hjߋhMhjubj=)}(hB``utile_height_px`` Height of a logical tilebuffer tile in pixels h](jC)}(h``utile_height_px``h]j)}(hjh]hutile_height_px}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(h-Height of a logical tilebuffer tile in pixelsh]h-Height of a logical tilebuffer tile in pixels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubj=)}(hA``samples`` # of samples in the framebuffer. Must be 1, 2, or 4. h](jC)}(h ``samples``h]j)}(hj<h]hsamples}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj6ubjT)}(hhh]h)}(h4# of samples in the framebuffer. Must be 1, 2, or 4.h]h4# of samples in the framebuffer. Must be 1, 2, or 4.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jShj6ubeh}(h]h ]h"]h$]h&]uh1j<hjQhMhjubj=)}(hD``sample_size_B`` # of bytes in the tilebuffer required per sample. h](jC)}(h``sample_size_B``h]j)}(hjuh]h sample_size_B}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM!hjoubjT)}(hhh]h)}(h1# of bytes in the tilebuffer required per sample.h]h1# of bytes in the tilebuffer required per sample.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jShjoubeh}(h]h ]h"]h$]h&]uh1j<hjhM!hjubj=)}(h``isp_merge_upper_x`` 32-bit float used in the hardware triangle merging. Calculate as: tan(60 deg) * width. Making these values UAPI avoids requiring floating-point calculations in the kernel in the hot path. h](jC)}(h``isp_merge_upper_x``h]j)}(hjh]hisp_merge_upper_x}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM)hjubjT)}(hhh](h)}(hV32-bit float used in the hardware triangle merging. Calculate as: tan(60 deg) * width.h]hV32-bit float used in the hardware triangle merging. Calculate as: tan(60 deg) * width.}(hjnjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM%hjČubh)}(hdMaking these values UAPI avoids requiring floating-point calculations in the kernel in the hot path.h]hdMaking these values UAPI avoids requiring floating-point calculations in the kernel in the hot path.}(hj֌hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM(hjČubeh}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjÌhM)hjubj=)}(hc``isp_merge_upper_y`` 32-bit float. Calculate as: tan(60 deg) * height. See **isp_merge_upper_x**. h](jC)}(h``isp_merge_upper_y``h]j)}(hjh]hisp_merge_upper_y}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM/hjubjT)}(hhh]h)}(hL32-bit float. Calculate as: tan(60 deg) * height. See **isp_merge_upper_x**.h](h632-bit float. Calculate as: tan(60 deg) * height. See }(hjhhhNhNubj)}(h**isp_merge_upper_x**h]hisp_merge_upper_x}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM.hj ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj hM/hjubj=)}(h9``bg`` Background program run for each tile at the start h](jC)}(h``bg``h]j)}(hjCh]hbg}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM3hj=ubjT)}(hhh]h)}(h1Background program run for each tile at the starth]h1Background program run for each tile at the start}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM3hjYubah}(h]h ]h"]h$]h&]uh1jShj=ubeh}(h]h ]h"]h$]h&]uh1j<hjXhM3hjubj=)}(h9``eot`` End-of-tile program ran for each tile at the end h](jC)}(h``eot``h]j)}(hj|h]heot}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM6hjvubjT)}(hhh]h)}(h0End-of-tile program ran for each tile at the endh]h0End-of-tile program ran for each tile at the end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM6hjubah}(h]h ]h"]h$]h&]uh1jShjvubeh}(h]h ]h"]h$]h&]uh1j<hjhM6hjubj=)}(hw``partial_bg`` Background program ran at the start of each tile when resuming the render pass during a partial render. h](jC)}(h``partial_bg``h]j)}(hjh]h partial_bg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM;hjubjT)}(hhh]h)}(hgBackground program ran at the start of each tile when resuming the render pass during a partial render.h]hgBackground program ran at the start of each tile when resuming the render pass during a partial render.}(hj΍hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM:hjˍubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjʍhM;hjubj=)}(hv``partial_eot`` End-of-tile program ran at the end of each tile when pausing the render pass during a partial render. h](jC)}(h``partial_eot``h]j)}(hjh]h partial_eot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMAhjubjT)}(hhh]h)}(heEnd-of-tile program ran at the end of each tile when pausing the render pass during a partial render.h]heEnd-of-tile program ran at the end of each tile when pausing the render pass during a partial render.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM@hjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMAhjubj=)}(h``isp_bgobjdepth`` ISP_BGOBJDEPTH register value. This is the depth buffer clear value, encoded in the depth buffer's format: either a 32-bit float or a 16-bit unorm (with upper bits zeroed). h](jC)}(h``isp_bgobjdepth``h]j)}(hj)h]hisp_bgobjdepth}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMHhj#ubjT)}(hhh]h)}(hISP_BGOBJDEPTH register value. This is the depth buffer clear value, encoded in the depth buffer's format: either a 32-bit float or a 16-bit unorm (with upper bits zeroed).h]hISP_BGOBJDEPTH register value. This is the depth buffer clear value, encoded in the depth buffer’s format: either a 32-bit float or a 16-bit unorm (with upper bits zeroed).}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMFhj?ubah}(h]h ]h"]h$]h&]uh1jShj#ubeh}(h]h ]h"]h$]h&]uh1j<hj>hMHhjubj=)}(hj``isp_bgobjvals`` ISP_BGOBJVALS register value. The bottom 8-bits contain the stencil buffer clear value. h](jC)}(h``isp_bgobjvals``h]j)}(hjch]h isp_bgobjvals}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMNhj]ubjT)}(hhh]h)}(hWISP_BGOBJVALS register value. The bottom 8-bits contain the stencil buffer clear value.h]hWISP_BGOBJVALS register value. The bottom 8-bits contain the stencil buffer clear value.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMMhjyubah}(h]h ]h"]h$]h&]uh1jShj]ubeh}(h]h ]h"]h$]h&]uh1j<hjxhMNhjubj=)}(h;``ts_vtx`` Timestamps for the vertex portion of the render h](jC)}(h ``ts_vtx``h]j)}(hjh]hts_vtx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMRhjubjT)}(hhh]h)}(h/Timestamps for the vertex portion of the renderh]h/Timestamps for the vertex portion of the render}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMRhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMRhjubj=)}(h=``ts_frag`` Timestamps for the fragment portion of the renderh](jC)}(h ``ts_frag``h]j)}(hj֎h]hts_frag}(hj؎hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԎubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMThjЎubjT)}(hhh]h)}(h1Timestamps for the fragment portion of the renderh]h1Timestamps for the fragment portion of the render}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMUhjubah}(h]h ]h"]h$]h&]uh1jShjЎubeh}(h]h ]h"]h$]h&]uh1j<hjhMThjubeh}(h]h ]h"]h$]h&]uh1j7hjqubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMXhjpMhhubh)}(hThis command submits a single render pass. The hardware control stream may include many draws and subpasses, but within the command, the framebuffer dimensions and attachments are fixed.h]hThis command submits a single render pass. The hardware control stream may include many draws and subpasses, but within the command, the framebuffer dimensions and attachments are fixed.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubh)}(hXBThe hardware requires the firmware to set a large number of Control Registers setting up state at render pass granularity before each command rendering 3D. The firmware bundles this state into data structures. Unfortunately, we cannot expose either any of that directly to userspace, because the kernel-firmware ABI is not stable. Although we can guarantee the firmware updates in tandem with the kernel, we cannot break old userspace when upgrading the firmware and kernel. Therefore, we need to abstract well the data structures to avoid tying our hands with future firmwares.h]hXBThe hardware requires the firmware to set a large number of Control Registers setting up state at render pass granularity before each command rendering 3D. The firmware bundles this state into data structures. Unfortunately, we cannot expose either any of that directly to userspace, because the kernel-firmware ABI is not stable. Although we can guarantee the firmware updates in tandem with the kernel, we cannot break old userspace when upgrading the firmware and kernel. Therefore, we need to abstract well the data structures to avoid tying our hands with future firmwares.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubh)}(hThe bulk of drm_asahi_cmd_render therefore consists of values of hardware control registers, marshalled via the firmware interface.h]hThe bulk of drm_asahi_cmd_render therefore consists of values of hardware control registers, marshalled via the firmware interface.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubh)}(hXThe framebuffer/tilebuffer dimensions are also specified here. In addition to being passed to the firmware/hardware, the kernel requires these dimensions to calculate various essential tiling-related data structures. It is unfortunate that our submits are heavier than on vendors with saner hardware-software interfaces. The upshot is all of this information is readily available to userspace with all current APIs.h]hXThe framebuffer/tilebuffer dimensions are also specified here. In addition to being passed to the firmware/hardware, the kernel requires these dimensions to calculate various essential tiling-related data structures. It is unfortunate that our submits are heavier than on vendors with saner hardware-software interfaces. The upshot is all of this information is readily available to userspace with all current APIs.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubh)}(hiIt looks odd - but it's not overly burdensome and it ensures we can remain compatible with old userspace.h]hkIt looks odd - but it’s not overly burdensome and it ensures we can remain compatible with old userspace.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j drm_asahi_cmd_compute (C struct)c.drm_asahi_cmd_computehNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_cmd_computeh]j)}(hstruct drm_asahi_cmd_computeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj!)}(hdrm_asahi_cmd_computeh]j')}(hjh]hdrm_asahi_cmd_compute}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hjubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhjhMubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjhMhjhhubjU)}(hhh]h)}(hCommand to submit computeh]hCommand to submit compute}(hjՏhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMYhjҏhhubah}(h]h ]h"]h$]h&]uh1jThjhhhjhMubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjpMhNhNubj})}(hXV**Definition**:: struct drm_asahi_cmd_compute { __u32 flags; __u32 sampler_count; __u64 cdm_ctrl_stream_base; __u64 cdm_ctrl_stream_end; __u64 sampler_heap; struct drm_asahi_helper_program helper; struct drm_asahi_timestamps ts; }; **Members** ``flags`` MBZ ``sampler_count`` Number of samplers in the sampler heap. ``cdm_ctrl_stream_base`` CDM_CTRL_STREAM_BASE register value. GPU address to the beginning of the CDM control stream. ``cdm_ctrl_stream_end`` GPU base address to the end of the hardware control stream. Note this only considers the first contiguous segment of the control stream, as the stream might jump elsewhere. ``sampler_heap`` Base address of the sampler heap. ``helper`` Helper program used for this compute command ``ts`` Timestamps for the compute commandh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM]hjubj)}(hstruct drm_asahi_cmd_compute { __u32 flags; __u32 sampler_count; __u64 cdm_ctrl_stream_base; __u64 cdm_ctrl_stream_end; __u64 sampler_heap; struct drm_asahi_helper_program helper; struct drm_asahi_timestamps ts; };h]hstruct drm_asahi_cmd_compute { __u32 flags; __u32 sampler_count; __u64 cdm_ctrl_stream_base; __u64 cdm_ctrl_stream_end; __u64 sampler_heap; struct drm_asahi_helper_program helper; struct drm_asahi_timestamps ts; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM_hjubh)}(h **Members**h]j)}(hj#h]hMembers}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMihjubj8)}(hhh](j=)}(h``flags`` MBZ h](jC)}(h ``flags``h]j)}(hjBh]hflags}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMahj<ubjT)}(hhh]h)}(hMBZh]hMBZ}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMahjXubah}(h]h ]h"]h$]h&]uh1jShj<ubeh}(h]h ]h"]h$]h&]uh1j<hjWhMahj9ubj=)}(h:``sampler_count`` Number of samplers in the sampler heap. h](jC)}(h``sampler_count``h]j)}(hj{h]h sampler_count}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMdhjuubjT)}(hhh]h)}(h'Number of samplers in the sampler heap.h]h'Number of samplers in the sampler heap.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMdhjubah}(h]h ]h"]h$]h&]uh1jShjuubeh}(h]h ]h"]h$]h&]uh1j<hjhMdhj9ubj=)}(hv``cdm_ctrl_stream_base`` CDM_CTRL_STREAM_BASE register value. GPU address to the beginning of the CDM control stream. h](jC)}(h``cdm_ctrl_stream_base``h]j)}(hjh]hcdm_ctrl_stream_base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMihjubjT)}(hhh]h)}(h\CDM_CTRL_STREAM_BASE register value. GPU address to the beginning of the CDM control stream.h]h\CDM_CTRL_STREAM_BASE register value. GPU address to the beginning of the CDM control stream.}(hj͐hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhhjʐubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjɐhMihj9ubj=)}(h``cdm_ctrl_stream_end`` GPU base address to the end of the hardware control stream. Note this only considers the first contiguous segment of the control stream, as the stream might jump elsewhere. h](jC)}(h``cdm_ctrl_stream_end``h]j)}(hjh]hcdm_ctrl_stream_end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMphjubjT)}(hhh]h)}(hGPU base address to the end of the hardware control stream. Note this only considers the first contiguous segment of the control stream, as the stream might jump elsewhere.h]hGPU base address to the end of the hardware control stream. Note this only considers the first contiguous segment of the control stream, as the stream might jump elsewhere.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMnhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMphj9ubj=)}(h3``sampler_heap`` Base address of the sampler heap. h](jC)}(h``sampler_heap``h]j)}(hj(h]h sampler_heap}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMthj"ubjT)}(hhh]h)}(h!Base address of the sampler heap.h]h!Base address of the sampler heap.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMthj>ubah}(h]h ]h"]h$]h&]uh1jShj"ubeh}(h]h ]h"]h$]h&]uh1j<hj=hMthj9ubj=)}(h8``helper`` Helper program used for this compute command h](jC)}(h ``helper``h]j)}(hjah]hhelper}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMwhj[ubjT)}(hhh]h)}(h,Helper program used for this compute commandh]h,Helper program used for this compute command}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMwhjwubah}(h]h ]h"]h$]h&]uh1jShj[ubeh}(h]h ]h"]h$]h&]uh1j<hjvhMwhj9ubj=)}(h)``ts`` Timestamps for the compute commandh](jC)}(h``ts``h]j)}(hjh]hts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMyhjubjT)}(hhh]h)}(h"Timestamps for the compute commandh]h"Timestamps for the compute command}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMzhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMyhj9ubeh}(h]h ]h"]h$]h&]uh1j7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubh)}(h**Description**h]j)}(hjݑh]h Description}(hjߑhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjۑubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM}hjpMhhubh)}(hThis command submits a control stream consisting of compute dispatches. There is essentially no limit on how many compute dispatches may be included in a single compute command, although timestamps are at command granularity.h]hThis command submits a control stream consisting of compute dispatches. There is essentially no limit on how many compute dispatches may be included in a single compute command, although timestamps are at command granularity.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMZhjpMhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdrm_asahi_get_time (C struct)c.drm_asahi_get_timehNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hdrm_asahi_get_timeh]j)}(hstruct drm_asahi_get_timeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMaubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj(hMaubj!)}(hdrm_asahi_get_timeh]j')}(hjh]hdrm_asahi_get_time}(hj;hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj7ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjhhhj(hMaubeh}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjhhhj(hMaubah}(h]jah ](jLjMeh"]h$]h&]jQjR)jShuh1jhj(hMahjhhubjU)}(hhh]h)}(h,Arguments passed to DRM_IOCTL_ASAHI_GET_TIMEh]h,Arguments passed to DRM_IOCTL_ASAHI_GET_TIME}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhM~hjZhhubah}(h]h ]h"]h$]h&]uh1jThjhhhj(hMaubeh}(h]h ](jqstructeh"]h$]h&]jvjqjwjujxjujyjzj{uh1jhhhjpMhNhNubj})}(h**Definition**:: struct drm_asahi_get_time { __u64 flags; __u64 gpu_timestamp; }; **Members** ``flags`` MBZ. ``gpu_timestamp`` On return, the GPU timestamp in nanoseconds.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh:}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjyubj)}(hHstruct drm_asahi_get_time { __u64 flags; __u64 gpu_timestamp; };h]hHstruct drm_asahi_get_time { __u64 flags; __u64 gpu_timestamp; };}hjsbah}(h]h ]h"]h$]h&]j>j?uh1jh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjyubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjyubj8)}(hhh](j=)}(h``flags`` MBZ. h](jC)}(h ``flags``h]j)}(hjʒh]hflags}(hj̒hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjȒubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjĒubjT)}(hhh]h)}(hMBZ.h]hMBZ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjߒhMhjubah}(h]h ]h"]h$]h&]uh1jShjĒubeh}(h]h ]h"]h$]h&]uh1j<hjߒhMhjubj=)}(h>``gpu_timestamp`` On return, the GPU timestamp in nanoseconds.h](jC)}(h``gpu_timestamp``h]j)}(hjh]h gpu_timestamp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(h,On return, the GPU timestamp in nanoseconds.h]h,On return, the GPU timestamp in nanoseconds.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjubeh}(h]h ]h"]h$]h&]uh1j7hjyubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jDRM_IOCTL_ASAHI (C macro)c.DRM_IOCTL_ASAHIhNtauh1jhjpMhhhNhNubj)}(hhh](j)}(hDRM_IOCTL_ASAHIh]j)}(hDRM_IOCTL_ASAHIh]j!)}(hDRM_IOCTL_ASAHIh]j')}(hjWh]hDRM_IOCTL_ASAHI}(hjahhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j&hj]ubah}(h]h ](j9j:eh"]h$]h&]j>j?uh1j hjYhhh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMubah}(h]h ]h"]h$]h&]j>j?jFuh1jjGjHhjUhhhjthMubah}(h]jPah ](jLjMeh"]h$]h&]jQjR)jShuh1jhjthMhjRhhubjU)}(hhh]h}(h]h ]h"]h$]h&]uh1jThjRhhhjthMubeh}(h]h ](jqmacroeh"]h$]h&]jvjqjwjjxjjyjzj{uh1jhhhjpMhNhNubh)}(h,``DRM_IOCTL_ASAHI (__access, __id, __type)``h]j)}(hjh]h(DRM_IOCTL_ASAHI (__access, __id, __type)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjpMhhubj)}(hBuild an Asahi IOCTL number h]h)}(hBuild an Asahi IOCTL numberh]hBuild an Asahi IOCTL number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjhMhjpMhhubj})}(hXF**Parameters** ``__access`` Access type. Must be R, W or RW. ``__id`` One of the DRM_ASAHI_xxx id. ``__type`` Suffix of the type being passed to the IOCTL. **Description** Don't use this macro directly, use the DRM_IOCTL_ASAHI_xxx values instead. **Return** An IOCTL number to be passed to ioctl() from userspace.h](h)}(h**Parameters**h]j)}(hjȓh]h Parameters}(hjʓhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƓubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj“ubj8)}(hhh](j=)}(h.``__access`` Access type. Must be R, W or RW. h](jC)}(h ``__access``h]j)}(hjh]h__access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(h Access type. Must be R, W or RW.h]h Access type. Must be R, W or RW.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hjhMhjޓubj=)}(h&``__id`` One of the DRM_ASAHI_xxx id. h](jC)}(h``__id``h]j)}(hj h]h__id}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjubjT)}(hhh]h)}(hOne of the DRM_ASAHI_xxx id.h]hOne of the DRM_ASAHI_xxx id.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj6ubah}(h]h ]h"]h$]h&]uh1jShjubeh}(h]h ]h"]h$]h&]uh1j<hj5hMhjޓubj=)}(h9``__type`` Suffix of the type being passed to the IOCTL. h](jC)}(h ``__type``h]j)}(hjYh]h__type}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jBh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhjSubjT)}(hhh]h)}(h-Suffix of the type being passed to the IOCTL.h]h-Suffix of the type being passed to the IOCTL.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMhjoubah}(h]h ]h"]h$]h&]uh1jShjSubeh}(h]h ]h"]h$]h&]uh1j<hjnhMhjޓubeh}(h]h ]h"]h$]h&]uh1j7hj“ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj“ubh)}(hJDon't use this macro directly, use the DRM_IOCTL_ASAHI_xxx values instead.h]hLDon’t use this macro directly, use the DRM_IOCTL_ASAHI_xxx values instead.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj“ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj“ubh)}(h7An IOCTL number to be passed to ioctl() from userspace.h]h7An IOCTL number to be passed to ioctl() from userspace.}(hjєhhhNhNubah}(h]h ]h"]h$]h&]uh1hh\/var/lib/git/docbuild/linux/Documentation/gpu/driver-uapi:36: ./include/uapi/drm/asahi_drm.hhMhj“ubeh}(h]h ] kernelindentah"]h$]h&]uh1j|hjpMhhhNhNubeh}(h]jah ]h"]drm/asahi uapiah$]h&]uh1hhhhhhhhK"ubeh}(h]jah ]h"]drm driver uapiah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceȟ _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}engine discovery uapi]j asrefids}(j]j aj]jajU ]jK aj$]j$aj ]j&9ajL]jLajeg]j[gajh]jhaji]jiaji]jiaj]jaj]]jSaj]jݹaj>M]j4MajM]jMaunameids}(jjjjjVjj/jj jjk jU j'$j$jF9j jLjLjGgjAj@gj`jjj{gjegjhjhjijij jjijmMjj/jjsj]jjjTMj>MjjjMjMu nametypes}(jjjVj/j jk j'$jF9jLjGgj@gjj{gjhjij jjmMj/jsjjTMjjMuh}(jhjhjjjjjjjpjujjjjj& j+ jv j{ j j jjj/j4jjjjjjjjjjjU jV j!j!j$j$j$j$j &j%&jd(ji(j+j+jc.jh.j!3j&3j5j5j j19j=:jB:j<j<jG>jL>jBjBjCjCjDjDj`IjeIjKjKjLjLj MjMjgPjlPjISjNSjTjTjAjVj`jVjWjXjYjYj&[j+[j^j^jVbj[bjdj djjJgjegjfgjhjhjhjhjHijMijijijijijjj"jjkjkjmjmjnjnjNpjSpjqjrjLsjQsjyj$yj|{j{j!~j&~j+j0jjj=jBjjj8j=jljj̉j!j&jjjxj}jɏjΏjjj?jDjjj)j.jjjKjPjjjўj֞jjjjj~jjZj_j@jEjjjj jijnjjjpjujyj~jjj_jdjjjjj]j^jjjjjojjjjjjjLjQjTjYjjjojjjjj1j6jqjvjjj\jajjjjj"j'jIjNjAjFjj$j:j?jjjjj-j2jjjjjqjvj j jjjjjZj_jpjujjjjjjj j j#j#j%j%j'j'j-j-jI/jN/j0j0jc2jh2j3j3j5j5j8j8jrCjwCjGjGjKjKj>Mj?MjjpMjMjMjNjNj:Rj?Rj8Wj=WjKXjPXjYjZj-\j2\jo]jt]j^j^j`j`jajbjcjcjejejhjhjijijijijljljnjnjpjpjrjrj$tj)tj:uj?ujvjvjdwjiwjzj zj}j }j~j~j܀jjUjZj̓j҃jjjj jjjjjPjUhhjjj;j2jZjQjjjjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j&KsRparse_messages]transform_messages](hsystem_message)}(hhh]h)}(hhh]hRHyperlink target "uevents-generated-by-i915-on-its-device-node" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOlineKsourcehuh1jubj)}(hhh]h)}(hhh]hlHyperlink target "perf-events-exposed-by-i915-through-sys-bus-event-sources-drivers-i915" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypejlineKsourcehuh1jubj)}(hhh]h)}(hhh]h9Hyperlink target "virtual-engine-uapi" is not referenced.}hjǕsbah}(h]h ]h"]h$]h&]uh1hhjĕubah}(h]h ]h"]h$]h&]levelKtypejlineMsourcehuh1jubj)}(hhh]h)}(hhh]h=Hyperlink target "context-engine-map-uapi" is not referenced. }hjsbah}(h]h ]h"]h$]h&]uh1hhjޕubah}(h]h ]h"]h$]h&]levelKtypejlineMsourcehuh1jubj)}(hhh]h)}(hhh]h