€•IŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ/translations/zh_CN/gpu/i915”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/zh_TW/gpu/i915”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/it_IT/gpu/i915”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ja_JP/gpu/i915”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ko_KR/gpu/i915”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/pt_BR/gpu/i915”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/sp_SP/gpu/i915”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒtarget”“”)�”}”(hŒ .. _drm/i915:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œdrm-i915”uh1hµh´Khhh²hh³Œ6/var/lib/git/docbuild/linux/Documentation/gpu/i915.rst”ubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒdrm/i915 Intel GFX Driver”h]”hŒdrm/i915 Intel GFX Driver”…”�”}”(hhËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhhÆh²hh³hÃh´KubhŒ paragraph”“”)�”}”(hXThe drm/i915 driver supports all (with the exception of some very early models) integrated GFX chipsets with both Intel display and rendering blocks. This excludes a set of SoC platforms with an SGX rendering unit, those have basic support through the gma500 drm driver.”h]”hXThe drm/i915 driver supports all (with the exception of some very early models) integrated GFX chipsets with both Intel display and rendering blocks. This excludes a set of SoC platforms with an SGX rendering unit, those have basic support through the gma500 drm driver.”…”�”}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KhhÆh²hubhÚ)�”}”(hŒ…The display, or :ref:`drm-kms`, support for drm/i915 is provided by :ref:`drm/intel-display`, and shared with :ref:`drm/xe `.”h]”(hŒThe display, or ”…”�”}”(hhéh²hh³Nh´Nubh)�”}”(hŒ:ref:`drm-kms`”h]”hŒinline”“”)�”}”(hhóh]”hŒdrm-kms”…”�”}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hõhhñubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œgpu/i915”Œ refdomain”jŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆŒ reftarget”Œdrm-kms”uh1hh³hÃh´K hhéubhŒ&, support for drm/i915 is provided by ”…”�”}”(hhéh²hh³Nh´Nubh)�”}”(hŒ:ref:`drm/intel-display`”h]”hö)�”}”(hjh]”hŒdrm/intel-display”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hõhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j(Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒdrm/intel-display”uh1hh³hÃh´K hhéubhŒ, and shared with ”…”�”}”(hhéh²hh³Nh´Nubh)�”}”(hŒ:ref:`drm/xe `”h]”hö)�”}”(hj@h]”hŒdrm/xe”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hõhj>ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jLŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒdrm/xe”uh1hh³hÃh´K hhéubhŒ.”…”�”}”(hhéh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K hhÆh²hubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒCore Driver Infrastructure”h]”hŒCore Driver Infrastructure”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjhh²hh³hÃh´KubhÚ)�”}”(hŒhThis section covers core driver infrastructure used by both the display and the GEM parts of the driver.”h]”hŒhThis section covers core driver infrastructure used by both the display and the GEM parts of the driver.”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Khjhh²hubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒRuntime Power Management”h]”hŒRuntime Power Management”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj‡h²hh³hÃh´KubhÚ)�”}”(hXrThe i915 driver supports dynamic enabling and disabling of entire hardware blocks at runtime. This is especially important on the display side where software is supposed to control many power gates manually on recent hardware, since on the GT side a lot of the power management is done by the hardware. But even there some manual control at the device level is required.”h]”hXrThe i915 driver supports dynamic enabling and disabling of entire hardware blocks at runtime. This is especially important on the display side where software is supposed to control many power gates manually on recent hardware, since on the GT side a lot of the power management is done by the hardware. But even there some manual control at the device level is required.”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:25: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´K&hj‡h²hubhÚ)�”}”(hX�Since i915 supports a diverse set of platforms with a unified codebase and hardware engineers just love to shuffle functionality around between power domains there's a sizeable amount of indirection required. This file provides generic functions to the driver for grabbing and releasing references for abstract power domains. It then maps those to the actual power wells present for a given platform.”h]”hX’Since i915 supports a diverse set of platforms with a unified codebase and hardware engineers just love to shuffle functionality around between power domains there’s a sizeable amount of indirection required. This file provides generic functions to the driver for grabbing and releasing references for abstract power domains. It then maps those to the actual power wells present for a given platform.”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:25: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´K,hj‡h²hubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œ%intel_runtime_pm_get_raw (C function)”Œc.intel_runtime_pm_get_raw”hNt”auh1j¶hj‡h²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒGintel_wakeref_t intel_runtime_pm_get_raw (struct intel_runtime_pm *rpm)”h]”hŒdesc_signature_line”“”)�”}”(hŒFintel_wakeref_t intel_runtime_pm_get_raw(struct intel_runtime_pm *rpm)”h]”(h)�”}”(hhh]”hŒ desc_sig_name”“”)�”}”(hŒintel_wakeref_t”h]”hŒintel_wakeref_t”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jÛhjØubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”Œc”Œreftype”Œ identifier”Œ reftarget”jߌmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”júŒ ASTIdentifier”“”)�”}”jõŒintel_runtime_pm_get_raw”sbŒc.intel_runtime_pm_get_raw”†”asbuh1hhjÔh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j hjÔh²hh³jh´MubhŒ desc_name”“”)�”}”(hŒintel_runtime_pm_get_raw”h]”jÜ)�”}”(hjh]”hŒintel_runtime_pm_get_raw”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jhjÔh²hh³jh´MubhŒdesc_parameterlist”“”)�”}”(hŒ(struct intel_runtime_pm *rpm)”h]”hŒdesc_parameter”“”)�”}”(hŒstruct intel_runtime_pm *rpm”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jChj?ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj?ubh)�”}”(hhh]”jÜ)�”}”(hŒintel_runtime_pm”h]”hŒintel_runtime_pm”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jgŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jŒc.intel_runtime_pm_get_raw”†”asbuh1hhj?ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj?ubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j‘hj?ubjÜ)�”}”(hŒrpm”h]”hŒrpm”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj9ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÔh²hh³jh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j5j6Œ add_permalink”ˆuh1jÒŒsphinx_line_type”Œ declarator”hjÎh²hh³jh´Mubah}”(h]”jÅah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jÌh³jh´MhjÉh²hubhŒ desc_content”“”)�”}”(hhh]”hÚ)�”}”(hŒgrab a raw runtime pm reference”h]”hŒgrab a raw runtime pm reference”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MhjÓh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÉh²hh³jh´Mubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”Œdomain”jóŒobjtype”jîŒdesctype”jîŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jÇh²hhj‡h³Nh´NubhŒ container”“”)�”}”(hXñ**Parameters** ``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure **Description** This is the unlocked version of intel_display_power_is_enabled() and should only be used from error capture and recovery code where deadlocks are possible. This function grabs a device-level runtime pm reference (mostly used for asynchronous PM management from display code) and ensures that it is powered up. Raw references are not considered during wakelock assert checks. Any runtime pm reference obtained by this function must have a symmetric call to intel_runtime_pm_put_raw() to release the reference again. **Return** the wakeref cookie to pass to intel_runtime_pm_put_raw(), evaluates as True if the wakeref was acquired, or False otherwise.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MhjúubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ@``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure ”h]”(hŒterm”“”)�”}”(hŒ ``struct intel_runtime_pm *rpm``”h]”hŒliteral”“”)�”}”(hj'h]”hŒstruct intel_runtime_pm *rpm”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MhjubhŒ definition”“”)�”}”(hhh]”hÚ)�”}”(hŒthe intel_runtime_pm structure”h]”hŒthe intel_runtime_pm structure”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j>h´MhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j>h´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjúubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjfh]”hŒ Description”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MhjúubhÚ)�”}”(hXvThis is the unlocked version of intel_display_power_is_enabled() and should only be used from error capture and recovery code where deadlocks are possible. This function grabs a device-level runtime pm reference (mostly used for asynchronous PM management from display code) and ensures that it is powered up. Raw references are not considered during wakelock assert checks.”h]”hXvThis is the unlocked version of intel_display_power_is_enabled() and should only be used from error capture and recovery code where deadlocks are possible. This function grabs a device-level runtime pm reference (mostly used for asynchronous PM management from display code) and ensures that it is powered up. Raw references are not considered during wakelock assert checks.”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MhjúubhÚ)�”}”(hŒ‹Any runtime pm reference obtained by this function must have a symmetric call to intel_runtime_pm_put_raw() to release the reference again.”h]”hŒ‹Any runtime pm reference obtained by this function must have a symmetric call to intel_runtime_pm_put_raw() to release the reference again.”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M hjúubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjœh]”hŒReturn”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MhjúubhÚ)�”}”(hŒ|the wakeref cookie to pass to intel_runtime_pm_put_raw(), evaluates as True if the wakeref was acquired, or False otherwise.”h]”hŒ|the wakeref cookie to pass to intel_runtime_pm_put_raw(), evaluates as True if the wakeref was acquired, or False otherwise.”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´Mhjúubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ!intel_runtime_pm_get (C function)”Œc.intel_runtime_pm_get”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒCintel_wakeref_t intel_runtime_pm_get (struct intel_runtime_pm *rpm)”h]”jÓ)�”}”(hŒBintel_wakeref_t intel_runtime_pm_get(struct intel_runtime_pm *rpm)”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒintel_wakeref_t”h]”hŒintel_wakeref_t”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjáubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jæŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõŒintel_runtime_pm_get”sbŒc.intel_runtime_pm_get”†”asbuh1hhjÝh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´Mubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÝh²hh³jh´Mubj)�”}”(hŒintel_runtime_pm_get”h]”jÜ)�”}”(hjh]”hŒintel_runtime_pm_get”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÝh²hh³jh´Mubj8)�”}”(hŒ(struct intel_runtime_pm *rpm)”h]”j>)�”}”(hŒstruct intel_runtime_pm *rpm”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj/ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj/ubh)�”}”(hhh]”jÜ)�”}”(hŒintel_runtime_pm”h]”hŒintel_runtime_pm”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jSŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jŒc.intel_runtime_pm_get”†”asbuh1hhj/ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj/ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj/ubjÜ)�”}”(hŒrpm”h]”hŒrpm”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj+ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÝh²hh³jh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÙh²hh³jh´Mubah}”(h]”jÔah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jh´MhjÖh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒgrab a runtime pm reference”h]”hŒgrab a runtime pm reference”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´Mhj±h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÖh²hh³jh´Mubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójÌjôjÌjõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hXÂ**Parameters** ``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure **Description** This function grabs a device-level runtime pm reference (mostly used for GEM code to ensure the GTT or GT is on) and ensures that it is powered up. Any runtime pm reference obtained by this function must have a symmetric call to intel_runtime_pm_put() to release the reference again. **Return** the wakeref cookie to pass to intel_runtime_pm_put()”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÖh]”hŒ Parameters”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MhjÐubj)�”}”(hhh]”j)�”}”(hŒ@``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure ”h]”(j$)�”}”(hŒ ``struct intel_runtime_pm *rpm``”h]”j*)�”}”(hjõh]”hŒstruct intel_runtime_pm *rpm”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjóubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´Mhjïubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_runtime_pm structure”h]”hŒthe intel_runtime_pm structure”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j h´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´Mhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÐubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj0h]”hŒ Description”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MhjÐubhÚ)�”}”(hŒ“This function grabs a device-level runtime pm reference (mostly used for GEM code to ensure the GTT or GT is on) and ensures that it is powered up.”h]”hŒ“This function grabs a device-level runtime pm reference (mostly used for GEM code to ensure the GTT or GT is on) and ensures that it is powered up.”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MhjÐubhÚ)�”}”(hŒ‡Any runtime pm reference obtained by this function must have a symmetric call to intel_runtime_pm_put() to release the reference again.”h]”hŒ‡Any runtime pm reference obtained by this function must have a symmetric call to intel_runtime_pm_put() to release the reference again.”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MhjÐubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjfh]”hŒReturn”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M hjÐubhÚ)�”}”(hŒ4the wakeref cookie to pass to intel_runtime_pm_put()”h]”hŒ4the wakeref cookie to pass to intel_runtime_pm_put()”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M!hjÐubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ-__intel_runtime_pm_get_if_active (C function)”Œ"c.__intel_runtime_pm_get_if_active”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒeintel_wakeref_t __intel_runtime_pm_get_if_active (struct intel_runtime_pm *rpm, bool ignore_usecount)”h]”jÓ)�”}”(hŒdintel_wakeref_t __intel_runtime_pm_get_if_active(struct intel_runtime_pm *rpm, bool ignore_usecount)”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒintel_wakeref_t”h]”hŒintel_wakeref_t”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j°Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõŒ __intel_runtime_pm_get_if_active”sbŒ"c.__intel_runtime_pm_get_if_active”†”asbuh1hhj§h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M)ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj§h²hh³jÏh´M)ubj)�”}”(hŒ __intel_runtime_pm_get_if_active”h]”jÜ)�”}”(hjÌh]”hŒ __intel_runtime_pm_get_if_active”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÞubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj§h²hh³jÏh´M)ubj8)�”}”(hŒ4(struct intel_runtime_pm *rpm, bool ignore_usecount)”h]”(j>)�”}”(hŒstruct intel_runtime_pm *rpm”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjùubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjùubh)�”}”(hhh]”jÜ)�”}”(hŒintel_runtime_pm”h]”hŒintel_runtime_pm”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jÊŒ"c.__intel_runtime_pm_get_if_active”†”asbuh1hhjùubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjùubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjùubjÜ)�”}”(hŒrpm”h]”hŒrpm”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjõubj>)�”}”(hŒbool ignore_usecount”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒbool”h]”hŒbool”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jmhjiubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjiubjÜ)�”}”(hŒignore_usecount”h]”hŒignore_usecount”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjõubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj§h²hh³jÏh´M)ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj£h²hh³jÏh´M)ubah}”(h]”jžah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÏh´M)hj h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ/grab a runtime pm reference if device is active”h]”hŒ/grab a runtime pm reference if device is active”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M)hj³h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj h²hh³jÏh´M)ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójÎjôjÎjõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hX-**Parameters** ``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure ``bool ignore_usecount`` get a ref even if dev->power.usage_count is 0 **Description** This function grabs a device-level runtime pm reference if the device is already active and ensures that it is powered up. It is illegal to try and access the HW should intel_runtime_pm_get_if_active() report failure. If **ignore_usecount** is true, a reference will be acquired even if there is no user requiring the device to be powered up (dev->power.usage_count == 0). If the function returns false in this case then it's guaranteed that the device's runtime suspend hook has been called already or that it will be called (and hence it's also guaranteed that the device's runtime resume hook will be called eventually). Any runtime pm reference obtained by this function must have a symmetric call to intel_runtime_pm_put() to release the reference again. **Return** the wakeref cookie to pass to intel_runtime_pm_put(), evaluates as True if the wakeref was acquired, or False otherwise.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjØh]”hŒ Parameters”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M-hjÒubj)�”}”(hhh]”(j)�”}”(hŒ@``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure ”h]”(j$)�”}”(hŒ ``struct intel_runtime_pm *rpm``”h]”j*)�”}”(hj÷h]”hŒstruct intel_runtime_pm *rpm”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjõubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M*hjñubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_runtime_pm structure”h]”hŒthe intel_runtime_pm structure”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j h´M*hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´M*hjîubj)�”}”(hŒG``bool ignore_usecount`` get a ref even if dev->power.usage_count is 0 ”h]”(j$)�”}”(hŒ``bool ignore_usecount``”h]”j*)�”}”(hj0h]”hŒbool ignore_usecount”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M+hj*ubj@)�”}”(hhh]”hÚ)�”}”(hŒ-get a ref even if dev->power.usage_count is 0”h]”hŒ-get a ref even if dev->power.usage_count is 0”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jEh´M+hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jEh´M+hjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjkh]”hŒ Description”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M-hjÒubhÚ)�”}”(hŒÙThis function grabs a device-level runtime pm reference if the device is already active and ensures that it is powered up. It is illegal to try and access the HW should intel_runtime_pm_get_if_active() report failure.”h]”hŒÙThis function grabs a device-level runtime pm reference if the device is already active and ensures that it is powered up. It is illegal to try and access the HW should intel_runtime_pm_get_if_active() report failure.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M,hjÒubhÚ)�”}”(hX•If **ignore_usecount** is true, a reference will be acquired even if there is no user requiring the device to be powered up (dev->power.usage_count == 0). If the function returns false in this case then it's guaranteed that the device's runtime suspend hook has been called already or that it will be called (and hence it's also guaranteed that the device's runtime resume hook will be called eventually).”h]”(hŒIf ”…”�”}”(hj�h²hh³Nh´Nubj)�”}”(hŒ**ignore_usecount**”h]”hŒignore_usecount”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubhX‡ is true, a reference will be acquired even if there is no user requiring the device to be powered up (dev->power.usage_count == 0). If the function returns false in this case then it’s guaranteed that the device’s runtime suspend hook has been called already or that it will be called (and hence it’s also guaranteed that the device’s runtime resume hook will be called eventually).”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M0hjÒubhÚ)�”}”(hŒ‡Any runtime pm reference obtained by this function must have a symmetric call to intel_runtime_pm_put() to release the reference again.”h]”hŒ‡Any runtime pm reference obtained by this function must have a symmetric call to intel_runtime_pm_put() to release the reference again.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M7hjÒubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjÂh]”hŒReturn”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M:hjÒubhÚ)�”}”(hŒxthe wakeref cookie to pass to intel_runtime_pm_put(), evaluates as True if the wakeref was acquired, or False otherwise.”h]”hŒxthe wakeref cookie to pass to intel_runtime_pm_put(), evaluates as True if the wakeref was acquired, or False otherwise.”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M;hjÒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ*intel_runtime_pm_get_noresume (C function)”Œc.intel_runtime_pm_get_noresume”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒLintel_wakeref_t intel_runtime_pm_get_noresume (struct intel_runtime_pm *rpm)”h]”jÓ)�”}”(hŒKintel_wakeref_t intel_runtime_pm_get_noresume(struct intel_runtime_pm *rpm)”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒintel_wakeref_t”h]”hŒintel_wakeref_t”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõŒintel_runtime_pm_get_noresume”sbŒc.intel_runtime_pm_get_noresume”†”asbuh1hhjh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M_ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjh²hh³j+h´M_ubj)�”}”(hŒintel_runtime_pm_get_noresume”h]”jÜ)�”}”(hj(h]”hŒintel_runtime_pm_get_noresume”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj:ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjh²hh³j+h´M_ubj8)�”}”(hŒ(struct intel_runtime_pm *rpm)”h]”j>)�”}”(hŒstruct intel_runtime_pm *rpm”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjUubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjUubh)�”}”(hhh]”jÜ)�”}”(hŒintel_runtime_pm”h]”hŒintel_runtime_pm”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjtubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jyŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j&Œc.intel_runtime_pm_get_noresume”†”asbuh1hhjUubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjUubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjUubjÜ)�”}”(hŒrpm”h]”hŒrpm”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjQubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjh²hh³j+h´M_ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÿh²hh³j+h´M_ubah}”(h]”júah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j+h´M_hjüh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒgrab a runtime pm reference”h]”hŒgrab a runtime pm reference”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M_hj×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjüh²hh³j+h´M_ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójòjôjòjõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hX@**Parameters** ``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure **Description** This function grabs a device-level runtime pm reference. It will _not_ resume the device but instead only get an extra wakeref. Therefore it is only valid to call this functions from contexts where the device is known to be active and with another wakeref previously hold. Any runtime pm reference obtained by this function must have a symmetric call to intel_runtime_pm_put() to release the reference again. **Return** the wakeref cookie to pass to intel_runtime_pm_put()”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjüh]”hŒ Parameters”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´Mchjöubj)�”}”(hhh]”j)�”}”(hŒ@``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure ”h]”(j$)�”}”(hŒ ``struct intel_runtime_pm *rpm``”h]”j*)�”}”(hj h]”hŒstruct intel_runtime_pm *rpm”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M`hj ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_runtime_pm structure”h]”hŒthe intel_runtime_pm structure”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j0 h´M`hj1 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j0 h´M`hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjV h]”hŒ Description”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MbhjöubhÚ)�”}”(hŒ8This function grabs a device-level runtime pm reference.”h]”hŒ8This function grabs a device-level runtime pm reference.”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MahjöubhÚ)�”}”(hŒ×It will _not_ resume the device but instead only get an extra wakeref. Therefore it is only valid to call this functions from contexts where the device is known to be active and with another wakeref previously hold.”h]”hŒ×It will _not_ resume the device but instead only get an extra wakeref. Therefore it is only valid to call this functions from contexts where the device is known to be active and with another wakeref previously hold.”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MchjöubhÚ)�”}”(hŒ‡Any runtime pm reference obtained by this function must have a symmetric call to intel_runtime_pm_put() to release the reference again.”h]”hŒ‡Any runtime pm reference obtained by this function must have a symmetric call to intel_runtime_pm_put() to release the reference again.”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MghjöubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj› h]”hŒReturn”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MjhjöubhÚ)�”}”(hŒ4the wakeref cookie to pass to intel_runtime_pm_put()”h]”hŒ4the wakeref cookie to pass to intel_runtime_pm_put()”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´Mkhjöubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ%intel_runtime_pm_put_raw (C function)”Œc.intel_runtime_pm_put_raw”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒRvoid intel_runtime_pm_put_raw (struct intel_runtime_pm *rpm, intel_wakeref_t wref)”h]”jÓ)�”}”(hŒQvoid intel_runtime_pm_put_raw(struct intel_runtime_pm *rpm, intel_wakeref_t wref)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÜ h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M†ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÜ h²hh³jî h´M†ubj)�”}”(hŒintel_runtime_pm_put_raw”h]”jÜ)�”}”(hŒintel_runtime_pm_put_raw”h]”hŒintel_runtime_pm_put_raw”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjý ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÜ h²hh³jî h´M†ubj8)�”}”(hŒ4(struct intel_runtime_pm *rpm, intel_wakeref_t wref)”h]”(j>)�”}”(hŒstruct intel_runtime_pm *rpm”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj ubh)�”}”(hhh]”jÜ)�”}”(hŒintel_runtime_pm”h]”hŒintel_runtime_pm”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj8 ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j= Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj sbŒc.intel_runtime_pm_put_raw”†”asbuh1hhj ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj ubjÜ)�”}”(hŒrpm”h]”hŒrpm”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj ubj>)�”}”(hŒintel_wakeref_t wref”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒintel_wakeref_t”h]”hŒintel_wakeref_t”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj� ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j” Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jW Œc.intel_runtime_pm_put_raw”†”asbuh1hhj‹ ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj‹ ubjÜ)�”}”(hŒwref”h]”hŒwref”…”�”}”(hj¾ h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj‹ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÜ h²hh³jî h´M†ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjØ h²hh³jî h´M†ubah}”(h]”jÓ ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jî h´M†hjÕ h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ"release a raw runtime pm reference”h]”hŒ"release a raw runtime pm reference”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M†hjå h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÕ h²hh³jî h´M†ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój jôj jõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hXz**Parameters** ``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure ``intel_wakeref_t wref`` wakeref acquired for the reference that is being released **Description** This function drops the device-level runtime pm reference obtained by intel_runtime_pm_get_raw() and might power down the corresponding hardware block right away if this is the last reference.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MŠhj ubj)�”}”(hhh]”(j)�”}”(hŒ@``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure ”h]”(j$)�”}”(hŒ ``struct intel_runtime_pm *rpm``”h]”j*)�”}”(hj) h]”hŒstruct intel_runtime_pm *rpm”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj' ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M‡hj# ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_runtime_pm structure”h]”hŒthe intel_runtime_pm structure”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j> h´M‡hj? ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj# ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j> h´M‡hj ubj)�”}”(hŒS``intel_wakeref_t wref`` wakeref acquired for the reference that is being released ”h]”(j$)�”}”(hŒ``intel_wakeref_t wref``”h]”j*)�”}”(hjb h]”hŒintel_wakeref_t wref”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj` ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´Mˆhj\ ubj@)�”}”(hhh]”hÚ)�”}”(hŒ9wakeref acquired for the reference that is being released”h]”hŒ9wakeref acquired for the reference that is being released”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jw h´Mˆhjx ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj\ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jw h´Mˆhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj� h]”hŒ Description”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj› ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MŠhj ubhÚ)�”}”(hŒÀThis function drops the device-level runtime pm reference obtained by intel_runtime_pm_get_raw() and might power down the corresponding hardware block right away if this is the last reference.”h]”hŒÀThis function drops the device-level runtime pm reference obtained by intel_runtime_pm_get_raw() and might power down the corresponding hardware block right away if this is the last reference.”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M‰hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ+intel_runtime_pm_put_unchecked (C function)”Œ c.intel_runtime_pm_put_unchecked”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒBvoid intel_runtime_pm_put_unchecked (struct intel_runtime_pm *rpm)”h]”jÓ)�”}”(hŒAvoid intel_runtime_pm_put_unchecked(struct intel_runtime_pm *rpm)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÞ h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M•ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÞ h²hh³jð h´M•ubj)�”}”(hŒintel_runtime_pm_put_unchecked”h]”jÜ)�”}”(hŒintel_runtime_pm_put_unchecked”h]”hŒintel_runtime_pm_put_unchecked”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÿ ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÞ h²hh³jð h´M•ubj8)�”}”(hŒ(struct intel_runtime_pm *rpm)”h]”j>)�”}”(hŒstruct intel_runtime_pm *rpm”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj ubh)�”}”(hhh]”jÜ)�”}”(hŒintel_runtime_pm”h]”hŒintel_runtime_pm”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj: ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j? Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj sbŒ c.intel_runtime_pm_put_unchecked”†”asbuh1hhj ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj ubjÜ)�”}”(hŒrpm”h]”hŒrpm”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÞ h²hh³jð h´M•ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÚ h²hh³jð h´M•ubah}”(h]”jÕ ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jð h´M•hj× h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ)release an unchecked runtime pm reference”h]”hŒ)release an unchecked runtime pm reference”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M•hjŸ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj× h²hh³jð h´M•ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójº jôjº jõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hXÑ**Parameters** ``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure **Description** This function drops the device-level runtime pm reference obtained by intel_runtime_pm_get() and might power down the corresponding hardware block right away if this is the last reference. This function exists only for historical reasons and should be avoided in new code, as the correctness of its use cannot be checked. Always use intel_runtime_pm_put() instead.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÄ h]”hŒ Parameters”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M™hj¾ ubj)�”}”(hhh]”j)�”}”(hŒ@``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure ”h]”(j$)�”}”(hŒ ``struct intel_runtime_pm *rpm``”h]”j*)�”}”(hjã h]”hŒstruct intel_runtime_pm *rpm”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjá ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M–hjÝ ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_runtime_pm structure”h]”hŒthe intel_runtime_pm structure”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jø h´M–hjù ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÝ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jø h´M–hjÚ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾ ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M˜hj¾ ubhÚ)�”}”(hŒ¼This function drops the device-level runtime pm reference obtained by intel_runtime_pm_get() and might power down the corresponding hardware block right away if this is the last reference.”h]”hŒ¼This function drops the device-level runtime pm reference obtained by intel_runtime_pm_get() and might power down the corresponding hardware block right away if this is the last reference.”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M—hj¾ ubhÚ)�”}”(hŒ¯This function exists only for historical reasons and should be avoided in new code, as the correctness of its use cannot be checked. Always use intel_runtime_pm_put() instead.”h]”hŒ¯This function exists only for historical reasons and should be avoided in new code, as the correctness of its use cannot be checked. Always use intel_runtime_pm_put() instead.”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M›hj¾ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ!intel_runtime_pm_put (C function)”Œc.intel_runtime_pm_put”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒNvoid intel_runtime_pm_put (struct intel_runtime_pm *rpm, intel_wakeref_t wref)”h]”jÓ)�”}”(hŒMvoid intel_runtime_pm_put(struct intel_runtime_pm *rpm, intel_wakeref_t wref)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjn h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M§ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjn h²hh³j€ h´M§ubj)�”}”(hŒintel_runtime_pm_put”h]”jÜ)�”}”(hŒintel_runtime_pm_put”h]”hŒintel_runtime_pm_put”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj� ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjn h²hh³j€ h´M§ubj8)�”}”(hŒ4(struct intel_runtime_pm *rpm, intel_wakeref_t wref)”h]”(j>)�”}”(hŒstruct intel_runtime_pm *rpm”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj« ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj« ubh)�”}”(hhh]”jÜ)�”}”(hŒintel_runtime_pm”h]”hŒintel_runtime_pm”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÊ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÏ Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj• sbŒc.intel_runtime_pm_put”†”asbuh1hhj« ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj« ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjû h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj« ubjÜ)�”}”(hŒrpm”h]”hŒrpm”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj« ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj§ ubj>)�”}”(hŒintel_wakeref_t wref”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒintel_wakeref_t”h]”hŒintel_wakeref_t”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j&Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jé Œc.intel_runtime_pm_put”†”asbuh1hhjubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjubjÜ)�”}”(hŒwref”h]”hŒwref”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj§ ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjn h²hh³j€ h´M§ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjj h²hh³j€ h´M§ubah}”(h]”je ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j€ h´M§hjg h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒrelease a runtime pm reference”h]”hŒrelease a runtime pm reference”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M§hjwh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjg h²hh³j€ h´M§ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój’jôj’jõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hXv**Parameters** ``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure ``intel_wakeref_t wref`` wakeref acquired for the reference that is being released **Description** This function drops the device-level runtime pm reference obtained by intel_runtime_pm_get() and might power down the corresponding hardware block right away if this is the last reference.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjœh]”hŒ Parameters”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M«hj–ubj)�”}”(hhh]”(j)�”}”(hŒ@``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure ”h]”(j$)�”}”(hŒ ``struct intel_runtime_pm *rpm``”h]”j*)�”}”(hj»h]”hŒstruct intel_runtime_pm *rpm”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M¨hjµubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_runtime_pm structure”h]”hŒthe intel_runtime_pm structure”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÐh´M¨hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÐh´M¨hj²ubj)�”}”(hŒS``intel_wakeref_t wref`` wakeref acquired for the reference that is being released ”h]”(j$)�”}”(hŒ``intel_wakeref_t wref``”h]”j*)�”}”(hjôh]”hŒintel_wakeref_t wref”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjòubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M©hjîubj@)�”}”(hhh]”hÚ)�”}”(hŒ9wakeref acquired for the reference that is being released”h]”hŒ9wakeref acquired for the reference that is being released”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j h´M©hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´M©hj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj–ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj/h]”hŒ Description”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M«hj–ubhÚ)�”}”(hŒ¼This function drops the device-level runtime pm reference obtained by intel_runtime_pm_get() and might power down the corresponding hardware block right away if this is the last reference.”h]”hŒ¼This function drops the device-level runtime pm reference obtained by intel_runtime_pm_get() and might power down the corresponding hardware block right away if this is the last reference.”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´Mªhj–ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ$intel_runtime_pm_enable (C function)”Œc.intel_runtime_pm_enable”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ;void intel_runtime_pm_enable (struct intel_runtime_pm *rpm)”h]”jÓ)�”}”(hŒ:void intel_runtime_pm_enable(struct intel_runtime_pm *rpm)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjph²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M¶ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjph²hh³j‚h´M¶ubj)�”}”(hŒintel_runtime_pm_enable”h]”jÜ)�”}”(hŒintel_runtime_pm_enable”h]”hŒintel_runtime_pm_enable”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj‘ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjph²hh³j‚h´M¶ubj8)�”}”(hŒ(struct intel_runtime_pm *rpm)”h]”j>)�”}”(hŒstruct intel_runtime_pm *rpm”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj­ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj­ubh)�”}”(hhh]”jÜ)�”}”(hŒintel_runtime_pm”h]”hŒintel_runtime_pm”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÌubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÑŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj—sbŒc.intel_runtime_pm_enable”†”asbuh1hhj­ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj­ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj­ubjÜ)�”}”(hŒrpm”h]”hŒrpm”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj©ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjph²hh³j‚h´M¶ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjlh²hh³j‚h´M¶ubah}”(h]”jgah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j‚h´M¶hjih²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒenable runtime pm”h]”hŒenable runtime pm”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M¶hj1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjih²hh³j‚h´M¶ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójLjôjLjõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hXC**Parameters** ``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure **Description** This function enables runtime pm at the end of the driver load sequence. Note that this function does currently not enable runtime pm for the subordinate display power domains. That is done by intel_display_power_enable().”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjVh]”hŒ Parameters”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MºhjPubj)�”}”(hhh]”j)�”}”(hŒ@``struct intel_runtime_pm *rpm`` the intel_runtime_pm structure ”h]”(j$)�”}”(hŒ ``struct intel_runtime_pm *rpm``”h]”j*)�”}”(hjuh]”hŒstruct intel_runtime_pm *rpm”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjsubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M·hjoubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_runtime_pm structure”h]”hŒthe intel_runtime_pm structure”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jŠh´M·hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŠh´M·hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj°h]”hŒ Description”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M¹hjPubhÚ)�”}”(hŒHThis function enables runtime pm at the end of the driver load sequence.”h]”hŒHThis function enables runtime pm at the end of the driver load sequence.”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´M¸hjPubhÚ)�”}”(hŒ•Note that this function does currently not enable runtime pm for the subordinate display power domains. That is done by intel_display_power_enable().”h]”hŒ•Note that this function does currently not enable runtime pm for the subordinate display power domains. That is done by intel_display_power_enable().”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:28: ./drivers/gpu/drm/i915/intel_runtime_pm.c”h´MºhjPubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ'intel_uncore_forcewake_get (C function)”Œc.intel_uncore_forcewake_get”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ`void intel_uncore_forcewake_get (struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”jÓ)�”}”(hŒ_void intel_uncore_forcewake_get(struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M¹ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjh²hh³jh´M¹ubj)�”}”(hŒintel_uncore_forcewake_get”h]”jÜ)�”}”(hŒintel_uncore_forcewake_get”h]”hŒintel_uncore_forcewake_get”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj!ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjh²hh³jh´M¹ubj8)�”}”(hŒ@(struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”(j>)�”}”(hŒstruct intel_uncore *uncore”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj=ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj=ubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_uncore”h]”hŒ intel_uncore”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jaŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj'sbŒc.intel_uncore_forcewake_get”†”asbuh1hhj=ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj=ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj=ubjÜ)�”}”(hŒuncore”h]”hŒuncore”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj9ubj>)�”}”(hŒ!enum forcewake_domains fw_domains”h]”(jD)�”}”(hŒenum”h]”hŒenum”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj¯ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¯ubh)�”}”(hhh]”jÜ)�”}”(hŒforcewake_domains”h]”hŒforcewake_domains”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÏubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÔŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j{Œc.intel_uncore_forcewake_get”†”asbuh1hhj¯ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¯ubjÜ)�”}”(hŒ fw_domains”h]”hŒ fw_domains”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj9ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjh²hh³jh´M¹ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjüh²hh³jh´M¹ubah}”(h]”j÷ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jh´M¹hjùh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ grab forcewake domain references”h]”hŒ grab forcewake domain references”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M¹hj%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjùh²hh³jh´M¹ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój@jôj@jõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hXž**Parameters** ``struct intel_uncore *uncore`` the intel_uncore structure ``enum forcewake_domains fw_domains`` forcewake domains to get reference on **Description** This function can be used get GT's forcewake domain references. Normal register access will handle the forcewake domains automatically. However if some sequence requires the GT to not power down a particular forcewake domains this function should be called at the beginning of the sequence. And subsequently the reference should be dropped by symmetric call to intel_unforce_forcewake_put(). Usually caller wants all the domains to be kept awake so the **fw_domains** would be then FORCEWAKE_ALL.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjJh]”hŒ Parameters”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”•h´M½hjDubj)�”}”(hhh]”(j)�”}”(hŒ;``struct intel_uncore *uncore`` the intel_uncore structure ”h]”(j$)�”}”(hŒ``struct intel_uncore *uncore``”h]”j*)�”}”(hjih]”hŒstruct intel_uncore *uncore”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjgubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mºhjcubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_uncore structure”h]”hŒthe intel_uncore structure”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j~h´Mºhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j~h´Mºhj`ubj)�”}”(hŒL``enum forcewake_domains fw_domains`` forcewake domains to get reference on ”h]”(j$)�”}”(hŒ%``enum forcewake_domains fw_domains``”h]”j*)�”}”(hj¢h]”hŒ!enum forcewake_domains fw_domains”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M»hjœubj@)�”}”(hhh]”hÚ)�”}”(hŒ%forcewake domains to get reference on”h]”hŒ%forcewake domains to get reference on”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j·h´M»hj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·h´M»hj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjDubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjÝh]”hŒ Description”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M½hjDubhÚ)�”}”(hXðThis function can be used get GT's forcewake domain references. Normal register access will handle the forcewake domains automatically. However if some sequence requires the GT to not power down a particular forcewake domains this function should be called at the beginning of the sequence. And subsequently the reference should be dropped by symmetric call to intel_unforce_forcewake_put(). Usually caller wants all the domains to be kept awake so the **fw_domains** would be then FORCEWAKE_ALL.”h]”(hXÇThis function can be used get GT’s forcewake domain references. Normal register access will handle the forcewake domains automatically. However if some sequence requires the GT to not power down a particular forcewake domains this function should be called at the beginning of the sequence. And subsequently the reference should be dropped by symmetric call to intel_unforce_forcewake_put(). Usually caller wants all the domains to be kept awake so the ”…”�”}”(hjóh²hh³Nh´Nubj)�”}”(hŒ**fw_domains**”h]”hŒ fw_domains”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjóubhŒ would be then FORCEWAKE_ALL.”…”�”}”(hjóh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M¼hjDubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ,intel_uncore_forcewake_user_get (C function)”Œ!c.intel_uncore_forcewake_user_get”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒBvoid intel_uncore_forcewake_user_get (struct intel_uncore *uncore)”h]”jÓ)�”}”(hŒAvoid intel_uncore_forcewake_user_get(struct intel_uncore *uncore)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj0h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MÕubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj0h²hh³jBh´MÕubj)�”}”(hŒintel_uncore_forcewake_user_get”h]”jÜ)�”}”(hŒintel_uncore_forcewake_user_get”h]”hŒintel_uncore_forcewake_user_get”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjQubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj0h²hh³jBh´MÕubj8)�”}”(hŒ(struct intel_uncore *uncore)”h]”j>)�”}”(hŒstruct intel_uncore *uncore”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjmubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjmubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_uncore”h]”hŒ intel_uncore”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j‘Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjWsbŒ!c.intel_uncore_forcewake_user_get”†”asbuh1hhjmubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjmubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjmubjÜ)�”}”(hŒuncore”h]”hŒuncore”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjmubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjiubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj0h²hh³jBh´MÕubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj,h²hh³jBh´MÕubah}”(h]”j'ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jBh´MÕhj)h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ&claim forcewake on behalf of userspace”h]”hŒ&claim forcewake on behalf of userspace”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MÕhjñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj)h²hh³jBh´MÕubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój jôj jõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hX **Parameters** ``struct intel_uncore *uncore`` the intel_uncore structure **Description** This function is a wrapper around intel_uncore_forcewake_get() to acquire the GT powerwell and in the process disable our debugging for the duration of userspace's bypass.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MÙhjubj)�”}”(hhh]”j)�”}”(hŒ;``struct intel_uncore *uncore`` the intel_uncore structure ”h]”(j$)�”}”(hŒ``struct intel_uncore *uncore``”h]”j*)�”}”(hj5h]”hŒstruct intel_uncore *uncore”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MÖhj/ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_uncore structure”h]”hŒthe intel_uncore structure”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jJh´MÖhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jJh´MÖhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjph]”hŒ Description”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MØhjubhÚ)�”}”(hŒ«This function is a wrapper around intel_uncore_forcewake_get() to acquire the GT powerwell and in the process disable our debugging for the duration of userspace's bypass.”h]”hŒ­This function is a wrapper around intel_uncore_forcewake_get() to acquire the GT powerwell and in the process disable our debugging for the duration of userspace’s bypass.”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M×hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ,intel_uncore_forcewake_user_put (C function)”Œ!c.intel_uncore_forcewake_user_put”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒBvoid intel_uncore_forcewake_user_put (struct intel_uncore *uncore)”h]”jÓ)�”}”(hŒAvoid intel_uncore_forcewake_user_put(struct intel_uncore *uncore)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj±h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mçubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj±h²hh³jÃh´Mçubj)�”}”(hŒintel_uncore_forcewake_user_put”h]”jÜ)�”}”(hŒintel_uncore_forcewake_user_put”h]”hŒintel_uncore_forcewake_user_put”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÒubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj±h²hh³jÃh´Mçubj8)�”}”(hŒ(struct intel_uncore *uncore)”h]”j>)�”}”(hŒstruct intel_uncore *uncore”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjîubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjîubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_uncore”h]”hŒ intel_uncore”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjØsbŒ!c.intel_uncore_forcewake_user_put”†”asbuh1hhjîubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjîubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjîubjÜ)�”}”(hŒuncore”h]”hŒuncore”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjîubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjêubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj±h²hh³jÃh´Mçubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj­h²hh³jÃh´Mçubah}”(h]”j¨ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÃh´Mçhjªh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ(release forcewake on behalf of userspace”h]”hŒ(release forcewake on behalf of userspace”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mçhjrh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjªh²hh³jÃh´Mçubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój�jôj�jõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hŒá**Parameters** ``struct intel_uncore *uncore`` the intel_uncore structure **Description** This function complements intel_uncore_forcewake_user_get() and releases the GT powerwell taken on behalf of the userspace bypass.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj—h]”hŒ Parameters”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mëhj‘ubj)�”}”(hhh]”j)�”}”(hŒ;``struct intel_uncore *uncore`` the intel_uncore structure ”h]”(j$)�”}”(hŒ``struct intel_uncore *uncore``”h]”j*)�”}”(hj¶h]”hŒstruct intel_uncore *uncore”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mèhj°ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_uncore structure”h]”hŒthe intel_uncore structure”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jËh´MèhjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jËh´Mèhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjñh]”hŒ Description”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mêhj‘ubhÚ)�”}”(hŒ‚This function complements intel_uncore_forcewake_user_get() and releases the GT powerwell taken on behalf of the userspace bypass.”h]”hŒ‚This function complements intel_uncore_forcewake_user_get() and releases the GT powerwell taken on behalf of the userspace bypass.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Méhj‘ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ/intel_uncore_forcewake_get__locked (C function)”Œ$c.intel_uncore_forcewake_get__locked”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒhvoid intel_uncore_forcewake_get__locked (struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”jÓ)�”}”(hŒgvoid intel_uncore_forcewake_get__locked(struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj2h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Møubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj2h²hh³jDh´Møubj)�”}”(hŒ"intel_uncore_forcewake_get__locked”h]”jÜ)�”}”(hŒ"intel_uncore_forcewake_get__locked”h]”hŒ"intel_uncore_forcewake_get__locked”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjSubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj2h²hh³jDh´Møubj8)�”}”(hŒ@(struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”(j>)�”}”(hŒstruct intel_uncore *uncore”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjoubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjoubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_uncore”h]”hŒ intel_uncore”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j“Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjYsbŒ$c.intel_uncore_forcewake_get__locked”†”asbuh1hhjoubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjoubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjoubjÜ)�”}”(hŒuncore”h]”hŒuncore”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjkubj>)�”}”(hŒ!enum forcewake_domains fw_domains”h]”(jD)�”}”(hjµh]”hŒenum”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjáubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjáubh)�”}”(hhh]”jÜ)�”}”(hŒforcewake_domains”h]”hŒforcewake_domains”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j­Œ$c.intel_uncore_forcewake_get__locked”†”asbuh1hhjáubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjáubjÜ)�”}”(hŒ fw_domains”h]”hŒ fw_domains”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjáubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjkubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj2h²hh³jDh´Møubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj.h²hh³jDh´Møubah}”(h]”j)ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jDh´Møhj+h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ grab forcewake domain references”h]”hŒ grab forcewake domain references”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MøhjVh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj+h²hh³jDh´Møubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójqjôjqjõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hX3**Parameters** ``struct intel_uncore *uncore`` the intel_uncore structure ``enum forcewake_domains fw_domains`` forcewake domains to get reference on **Description** See intel_uncore_forcewake_get(). This variant places the onus on the caller to explicitly handle the dev_priv->uncore.lock spinlock.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj{h]”hŒ Parameters”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mühjuubj)�”}”(hhh]”(j)�”}”(hŒ;``struct intel_uncore *uncore`` the intel_uncore structure ”h]”(j$)�”}”(hŒ``struct intel_uncore *uncore``”h]”j*)�”}”(hjšh]”hŒstruct intel_uncore *uncore”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mùhj”ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_uncore structure”h]”hŒthe intel_uncore structure”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¯h´Mùhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¯h´Mùhj‘ubj)�”}”(hŒL``enum forcewake_domains fw_domains`` forcewake domains to get reference on ”h]”(j$)�”}”(hŒ%``enum forcewake_domains fw_domains``”h]”j*)�”}”(hjÓh]”hŒ!enum forcewake_domains fw_domains”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MúhjÍubj@)�”}”(hhh]”hÚ)�”}”(hŒ%forcewake domains to get reference on”h]”hŒ%forcewake domains to get reference on”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jèh´Múhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèh´Múhj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjuubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MühjuubhÚ)�”}”(hŒ…See intel_uncore_forcewake_get(). This variant places the onus on the caller to explicitly handle the dev_priv->uncore.lock spinlock.”h]”hŒ…See intel_uncore_forcewake_get(). This variant places the onus on the caller to explicitly handle the dev_priv->uncore.lock spinlock.”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mûhjuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ'intel_uncore_forcewake_put (C function)”Œc.intel_uncore_forcewake_put”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ`void intel_uncore_forcewake_put (struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”jÓ)�”}”(hŒ_void intel_uncore_forcewake_put(struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjOh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M$ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjOh²hh³jah´M$ubj)�”}”(hŒintel_uncore_forcewake_put”h]”jÜ)�”}”(hŒintel_uncore_forcewake_put”h]”hŒintel_uncore_forcewake_put”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjpubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjOh²hh³jah´M$ubj8)�”}”(hŒ@(struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”(j>)�”}”(hŒstruct intel_uncore *uncore”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjŒubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŒubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_uncore”h]”hŒ intel_uncore”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j°Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjvsbŒc.intel_uncore_forcewake_put”†”asbuh1hhjŒubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŒubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjŒubjÜ)�”}”(hŒuncore”h]”hŒuncore”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjˆubj>)�”}”(hŒ!enum forcewake_domains fw_domains”h]”(jD)�”}”(hjµh]”hŒenum”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjþubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjþubh)�”}”(hhh]”jÜ)�”}”(hŒforcewake_domains”h]”hŒforcewake_domains”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j"Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jÊŒc.intel_uncore_forcewake_put”†”asbuh1hhjþubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjþubjÜ)�”}”(hŒ fw_domains”h]”hŒ fw_domains”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjþubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjˆubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjOh²hh³jah´M$ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjKh²hh³jah´M$ubah}”(h]”jFah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jah´M$hjHh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ$release a forcewake domain reference”h]”hŒ$release a forcewake domain reference”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M$hjsh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjHh²hh³jah´M$ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójŽjôjŽjõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hX**Parameters** ``struct intel_uncore *uncore`` the intel_uncore structure ``enum forcewake_domains fw_domains`` forcewake domains to put references **Description** This function drops the device-level forcewakes for specified domains obtained by intel_uncore_forcewake_get().”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj˜h]”hŒ Parameters”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M(hj’ubj)�”}”(hhh]”(j)�”}”(hŒ;``struct intel_uncore *uncore`` the intel_uncore structure ”h]”(j$)�”}”(hŒ``struct intel_uncore *uncore``”h]”j*)�”}”(hj·h]”hŒstruct intel_uncore *uncore”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M%hj±ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_uncore structure”h]”hŒthe intel_uncore structure”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÌh´M%hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÌh´M%hj®ubj)�”}”(hŒJ``enum forcewake_domains fw_domains`` forcewake domains to put references ”h]”(j$)�”}”(hŒ%``enum forcewake_domains fw_domains``”h]”j*)�”}”(hjðh]”hŒ!enum forcewake_domains fw_domains”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjîubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M&hjêubj@)�”}”(hhh]”hÚ)�”}”(hŒ#forcewake domains to put references”h]”hŒ#forcewake domains to put references”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jh´M&hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M&hj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj+h]”hŒ Description”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M(hj’ubhÚ)�”}”(hŒoThis function drops the device-level forcewakes for specified domains obtained by intel_uncore_forcewake_get().”h]”hŒoThis function drops the device-level forcewakes for specified domains obtained by intel_uncore_forcewake_get().”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M'hj’ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ)intel_uncore_forcewake_flush (C function)”Œc.intel_uncore_forcewake_flush”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒbvoid intel_uncore_forcewake_flush (struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”jÓ)�”}”(hŒavoid intel_uncore_forcewake_flush(struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjlh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MFubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjlh²hh³j~h´MFubj)�”}”(hŒintel_uncore_forcewake_flush”h]”jÜ)�”}”(hŒintel_uncore_forcewake_flush”h]”hŒintel_uncore_forcewake_flush”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjlh²hh³j~h´MFubj8)�”}”(hŒ@(struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”(j>)�”}”(hŒstruct intel_uncore *uncore”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj©ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj©ubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_uncore”h]”hŒ intel_uncore”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÈubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÍŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj“sbŒc.intel_uncore_forcewake_flush”†”asbuh1hhj©ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj©ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj©ubjÜ)�”}”(hŒuncore”h]”hŒuncore”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¥ubj>)�”}”(hŒ!enum forcewake_domains fw_domains”h]”(jD)�”}”(hjµh]”hŒenum”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjubh)�”}”(hhh]”jÜ)�”}”(hŒforcewake_domains”h]”hŒforcewake_domains”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j?Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jçŒc.intel_uncore_forcewake_flush”†”asbuh1hhjubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjubjÜ)�”}”(hŒ fw_domains”h]”hŒ fw_domains”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¥ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjlh²hh³j~h´MFubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjhh²hh³j~h´MFubah}”(h]”jcah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j~h´MFhjeh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒflush the delayed release”h]”hŒflush the delayed release”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MFhj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjeh²hh³j~h´MFubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój«jôj«jõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hŒ�**Parameters** ``struct intel_uncore *uncore`` the intel_uncore structure ``enum forcewake_domains fw_domains`` forcewake domains to flush”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjµh]”hŒ Parameters”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MJhj¯ubj)�”}”(hhh]”(j)�”}”(hŒ;``struct intel_uncore *uncore`` the intel_uncore structure ”h]”(j$)�”}”(hŒ``struct intel_uncore *uncore``”h]”j*)�”}”(hjÔh]”hŒstruct intel_uncore *uncore”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MGhjÎubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_uncore structure”h]”hŒthe intel_uncore structure”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jéh´MGhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jéh´MGhjËubj)�”}”(hŒ@``enum forcewake_domains fw_domains`` forcewake domains to flush”h]”(j$)�”}”(hŒ%``enum forcewake_domains fw_domains``”h]”j*)�”}”(hj h]”hŒ!enum forcewake_domains fw_domains”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MIhjubj@)�”}”(hhh]”hÚ)�”}”(hŒforcewake domains to flush”h]”hŒforcewake domains to flush”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MHhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j"h´MIhjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ/intel_uncore_forcewake_put__locked (C function)”Œ$c.intel_uncore_forcewake_put__locked”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒhvoid intel_uncore_forcewake_put__locked (struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”jÓ)�”}”(hŒgvoid intel_uncore_forcewake_put__locked(struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjch²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M\ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjch²hh³juh´M\ubj)�”}”(hŒ"intel_uncore_forcewake_put__locked”h]”jÜ)�”}”(hŒ"intel_uncore_forcewake_put__locked”h]”hŒ"intel_uncore_forcewake_put__locked”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj„ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjch²hh³juh´M\ubj8)�”}”(hŒ@(struct intel_uncore *uncore, enum forcewake_domains fw_domains)”h]”(j>)�”}”(hŒstruct intel_uncore *uncore”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj ubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_uncore”h]”hŒ intel_uncore”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÄŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjŠsbŒ$c.intel_uncore_forcewake_put__locked”†”asbuh1hhj ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj ubjÜ)�”}”(hŒuncore”h]”hŒuncore”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjœubj>)�”}”(hŒ!enum forcewake_domains fw_domains”h]”(jD)�”}”(hjµh]”hŒenum”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjubh)�”}”(hhh]”jÜ)�”}”(hŒforcewake_domains”h]”hŒforcewake_domains”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j6Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jÞŒ$c.intel_uncore_forcewake_put__locked”†”asbuh1hhjubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjubjÜ)�”}”(hŒ fw_domains”h]”hŒ fw_domains”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjœubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjch²hh³juh´M\ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj_h²hh³juh´M\ubah}”(h]”jZah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³juh´M\hj\h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ#release forcewake domain references”h]”hŒ#release forcewake domain references”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M\hj‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj\h²hh³juh´M\ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój¢jôj¢jõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hX1**Parameters** ``struct intel_uncore *uncore`` the intel_uncore structure ``enum forcewake_domains fw_domains`` forcewake domains to put references **Description** See intel_uncore_forcewake_put(). This variant places the onus on the caller to explicitly handle the dev_priv->uncore.lock spinlock.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¬h]”hŒ Parameters”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M`hj¦ubj)�”}”(hhh]”(j)�”}”(hŒ;``struct intel_uncore *uncore`` the intel_uncore structure ”h]”(j$)�”}”(hŒ``struct intel_uncore *uncore``”h]”j*)�”}”(hjËh]”hŒstruct intel_uncore *uncore”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M]hjÅubj@)�”}”(hhh]”hÚ)�”}”(hŒthe intel_uncore structure”h]”hŒthe intel_uncore structure”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jàh´M]hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jàh´M]hjÂubj)�”}”(hŒJ``enum forcewake_domains fw_domains`` forcewake domains to put references ”h]”(j$)�”}”(hŒ%``enum forcewake_domains fw_domains``”h]”j*)�”}”(hjh]”hŒ!enum forcewake_domains fw_domains”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M^hjþubj@)�”}”(hhh]”hÚ)�”}”(hŒ#forcewake domains to put references”h]”hŒ#forcewake domains to put references”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jh´M^hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjþubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M^hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj?h]”hŒ Description”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M`hj¦ubhÚ)�”}”(hŒ…See intel_uncore_forcewake_put(). This variant places the onus on the caller to explicitly handle the dev_priv->uncore.lock spinlock.”h]”hŒ…See intel_uncore_forcewake_put(). This variant places the onus on the caller to explicitly handle the dev_priv->uncore.lock spinlock.”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M_hj¦ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ)__intel_wait_for_register_fw (C function)”Œc.__intel_wait_for_register_fw”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ¯int __intel_wait_for_register_fw (struct intel_uncore *uncore, i915_reg_t reg, u32 mask, u32 value, unsigned int fast_timeout_us, unsigned int slow_timeout_ms, u32 *out_value)”h]”jÓ)�”}”(hŒ®int __intel_wait_for_register_fw(struct intel_uncore *uncore, i915_reg_t reg, u32 mask, u32 value, unsigned int fast_timeout_us, unsigned int slow_timeout_ms, u32 *out_value)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj€h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mª ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj€h²hh³j’h´Mª ubj)�”}”(hŒ__intel_wait_for_register_fw”h]”jÜ)�”}”(hŒ__intel_wait_for_register_fw”h]”hŒ__intel_wait_for_register_fw”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¡ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj€h²hh³j’h´Mª ubj8)�”}”(hŒŽ(struct intel_uncore *uncore, i915_reg_t reg, u32 mask, u32 value, unsigned int fast_timeout_us, unsigned int slow_timeout_ms, u32 *out_value)”h]”(j>)�”}”(hŒstruct intel_uncore *uncore”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj½ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj½ubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_uncore”h]”hŒ intel_uncore”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÜubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jáŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj§sbŒc.__intel_wait_for_register_fw”†”asbuh1hhj½ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj½ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj½ubjÜ)�”}”(hŒuncore”h]”hŒuncore”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¹ubj>)�”}”(hŒi915_reg_t reg”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒ i915_reg_t”h]”hŒ i915_reg_t”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j8Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jûŒc.__intel_wait_for_register_fw”†”asbuh1hhj/ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj/ubjÜ)�”}”(hŒreg”h]”hŒreg”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¹ubj>)�”}”(hŒu32 mask”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j€Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jûŒc.__intel_wait_for_register_fw”†”asbuh1hhjwubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjwubjÜ)�”}”(hŒmask”h]”hŒmask”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¹ubj>)�”}”(hŒ u32 value”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÃubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÈŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jûŒc.__intel_wait_for_register_fw”†”asbuh1hhj¿ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¿ubjÜ)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¹ubj>)�”}”(hŒunsigned int fast_timeout_us”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj ubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj ubjÜ)�”}”(hŒfast_timeout_us”h]”hŒfast_timeout_us”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¹ubj>)�”}”(hŒunsigned int slow_timeout_ms”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjX ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjX ubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjX ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj† h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjX ubjÜ)�”}”(hŒslow_timeout_ms”h]”hŒslow_timeout_ms”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjX ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¹ubj>)�”}”(hŒu32 *out_value”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj­ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j² Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jûŒc.__intel_wait_for_register_fw”†”asbuh1hhj© ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj© ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj© ubjÜ)�”}”(hŒ out_value”h]”hŒ out_value”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj© ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¹ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj€h²hh³j’h´Mª ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj|h²hh³j’h´Mª ubah}”(h]”jwah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j’h´Mª hjyh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ*wait until register matches expected state”h]”hŒ*wait until register matches expected state”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mª hj!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjyh²hh³j’h´Mª ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój+!jôj+!jõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hXr**Parameters** ``struct intel_uncore *uncore`` the struct intel_uncore ``i915_reg_t reg`` the register to read ``u32 mask`` mask to apply to register value ``u32 value`` expected value ``unsigned int fast_timeout_us`` fast timeout in microsecond for atomic/tight wait ``unsigned int slow_timeout_ms`` slow timeout in millisecond ``u32 *out_value`` optional placeholder to hold registry value **Description** This routine waits until the target register **reg** contains the expected **value** after applying the **mask**, i.e. it waits until :: (intel_uncore_read_fw(uncore, reg) & mask) == value Otherwise, the wait will timeout after **slow_timeout_ms** milliseconds. For atomic context **slow_timeout_ms** must be zero and **fast_timeout_us** must be not larger than 20,0000 microseconds. Note that this routine assumes the caller holds forcewake asserted, it is not suitable for very long waits. See intel_wait_for_register() if you wish to wait without holding forcewake for the duration (i.e. you expect the wait to be slow). **Return** 0 if the register matches the desired condition, or -ETIMEDOUT.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj5!h]”hŒ Parameters”…”�”}”(hj7!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M® hj/!ubj)�”}”(hhh]”(j)�”}”(hŒ8``struct intel_uncore *uncore`` the struct intel_uncore ”h]”(j$)�”}”(hŒ``struct intel_uncore *uncore``”h]”j*)�”}”(hjT!h]”hŒstruct intel_uncore *uncore”…”�”}”(hjV!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjR!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M« hjN!ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe struct intel_uncore”h]”hŒthe struct intel_uncore”…”�”}”(hjm!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ji!h´M« hjj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjN!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³ji!h´M« hjK!ubj)�”}”(hŒ(``i915_reg_t reg`` the register to read ”h]”(j$)�”}”(hŒ``i915_reg_t reg``”h]”j*)�”}”(hj�!h]”hŒi915_reg_t reg”…”�”}”(hj�!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj‹!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M¬ hj‡!ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe register to read”h]”hŒthe register to read”…”�”}”(hj¦!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¢!h´M¬ hj£!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj‡!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¢!h´M¬ hjK!ubj)�”}”(hŒ-``u32 mask`` mask to apply to register value ”h]”(j$)�”}”(hŒ ``u32 mask``”h]”j*)�”}”(hjÆ!h]”hŒu32 mask”…”�”}”(hjÈ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÄ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M­ hjÀ!ubj@)�”}”(hhh]”hÚ)�”}”(hŒmask to apply to register value”h]”hŒmask to apply to register value”…”�”}”(hjß!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÛ!h´M­ hjÜ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÀ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÛ!h´M­ hjK!ubj)�”}”(hŒ``u32 value`` expected value ”h]”(j$)�”}”(hŒ ``u32 value``”h]”j*)�”}”(hjÿ!h]”hŒ u32 value”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjý!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M® hjù!ubj@)�”}”(hhh]”hÚ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j"h´M® hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjù!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j"h´M® hjK!ubj)�”}”(hŒS``unsigned int fast_timeout_us`` fast timeout in microsecond for atomic/tight wait ”h]”(j$)�”}”(hŒ ``unsigned int fast_timeout_us``”h]”j*)�”}”(hj8"h]”hŒunsigned int fast_timeout_us”…”�”}”(hj:"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj6"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M¯ hj2"ubj@)�”}”(hhh]”hÚ)�”}”(hŒ1fast timeout in microsecond for atomic/tight wait”h]”hŒ1fast timeout in microsecond for atomic/tight wait”…”�”}”(hjQ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jM"h´M¯ hjN"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj2"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jM"h´M¯ hjK!ubj)�”}”(hŒ=``unsigned int slow_timeout_ms`` slow timeout in millisecond ”h]”(j$)�”}”(hŒ ``unsigned int slow_timeout_ms``”h]”j*)�”}”(hjq"h]”hŒunsigned int slow_timeout_ms”…”�”}”(hjs"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjo"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M° hjk"ubj@)�”}”(hhh]”hÚ)�”}”(hŒslow timeout in millisecond”h]”hŒslow timeout in millisecond”…”�”}”(hjŠ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j†"h´M° hj‡"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjk"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†"h´M° hjK!ubj)�”}”(hŒ?``u32 *out_value`` optional placeholder to hold registry value ”h]”(j$)�”}”(hŒ``u32 *out_value``”h]”j*)�”}”(hjª"h]”hŒu32 *out_value”…”�”}”(hj¬"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¨"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M± hj¤"ubj@)�”}”(hhh]”hÚ)�”}”(hŒ+optional placeholder to hold registry value”h]”hŒ+optional placeholder to hold registry value”…”�”}”(hjÃ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¿"h´M± hjÀ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¤"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¿"h´M± hjK!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj/!ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjå"h]”hŒ Description”…”�”}”(hjç"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjã"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M³ hj/!ubhÚ)�”}”(hŒˆThis routine waits until the target register **reg** contains the expected **value** after applying the **mask**, i.e. it waits until ::”h]”(hŒ-This routine waits until the target register ”…”�”}”(hjû"h²hh³Nh´Nubj)�”}”(hŒ**reg**”h]”hŒreg”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû"ubhŒ contains the expected ”…”�”}”(hjû"h²hh³Nh´Nubj)�”}”(hŒ **value**”h]”hŒvalue”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû"ubhŒ after applying the ”…”�”}”(hjû"h²hh³Nh´Nubj)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hj'#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû"ubhŒ, i.e. it waits until”…”�”}”(hjû"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M² hj/!ubhŒ literal_block”“”)�”}”(hŒ3(intel_uncore_read_fw(uncore, reg) & mask) == value”h]”hŒ3(intel_uncore_read_fw(uncore, reg) & mask) == value”…”�”}”hjB#sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mµ hj/!ubhÚ)�”}”(hŒÂOtherwise, the wait will timeout after **slow_timeout_ms** milliseconds. For atomic context **slow_timeout_ms** must be zero and **fast_timeout_us** must be not larger than 20,0000 microseconds.”h]”(hŒ'Otherwise, the wait will timeout after ”…”�”}”(hjQ#h²hh³Nh´Nubj)�”}”(hŒ**slow_timeout_ms**”h]”hŒslow_timeout_ms”…”�”}”(hjY#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ#ubhŒ" milliseconds. For atomic context ”…”�”}”(hjQ#h²hh³Nh´Nubj)�”}”(hŒ**slow_timeout_ms**”h]”hŒslow_timeout_ms”…”�”}”(hjk#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ#ubhŒ must be zero and ”…”�”}”(hjQ#h²hh³Nh´Nubj)�”}”(hŒ**fast_timeout_us**”h]”hŒfast_timeout_us”…”�”}”(hj}#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ#ubhŒ. must be not larger than 20,0000 microseconds.”…”�”}”(hjQ#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M· hj/!ubhÚ)�”}”(hŒïNote that this routine assumes the caller holds forcewake asserted, it is not suitable for very long waits. See intel_wait_for_register() if you wish to wait without holding forcewake for the duration (i.e. you expect the wait to be slow).”h]”hŒïNote that this routine assumes the caller holds forcewake asserted, it is not suitable for very long waits. See intel_wait_for_register() if you wish to wait without holding forcewake for the duration (i.e. you expect the wait to be slow).”…”�”}”(hj–#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´M» hj/!ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj§#h]”hŒReturn”…”�”}”(hj©#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MÀ hj/!ubhÚ)�”}”(hŒ?0 if the register matches the desired condition, or -ETIMEDOUT.”h]”hŒ?0 if the register matches the desired condition, or -ETIMEDOUT.”…”�”}”(hj½#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MÁ hj/!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ&__intel_wait_for_register (C function)”Œc.__intel_wait_for_register”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ¬int __intel_wait_for_register (struct intel_uncore *uncore, i915_reg_t reg, u32 mask, u32 value, unsigned int fast_timeout_us, unsigned int slow_timeout_ms, u32 *out_value)”h]”jÓ)�”}”(hŒ«int __intel_wait_for_register(struct intel_uncore *uncore, i915_reg_t reg, u32 mask, u32 value, unsigned int fast_timeout_us, unsigned int slow_timeout_ms, u32 *out_value)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjì#h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjè#h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mâ ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjè#h²hh³jú#h´Mâ ubj)�”}”(hŒ__intel_wait_for_register”h]”jÜ)�”}”(hŒ__intel_wait_for_register”h]”hŒ__intel_wait_for_register”…”�”}”(hj $h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj $ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjè#h²hh³jú#h´Mâ ubj8)�”}”(hŒŽ(struct intel_uncore *uncore, i915_reg_t reg, u32 mask, u32 value, unsigned int fast_timeout_us, unsigned int slow_timeout_ms, u32 *out_value)”h]”(j>)�”}”(hŒstruct intel_uncore *uncore”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj)$h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj%$ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj%$ubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_uncore”h]”hŒ intel_uncore”…”�”}”(hjG$h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjD$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jI$Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj$sbŒc.__intel_wait_for_register”†”asbuh1hhj%$ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj%$ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hju$h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj%$ubjÜ)�”}”(hŒuncore”h]”hŒuncore”…”�”}”(hj‚$h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj%$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj!$ubj>)�”}”(hŒi915_reg_t reg”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒ i915_reg_t”h]”hŒ i915_reg_t”…”�”}”(hjž$h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj›$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j $Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jc$Œc.__intel_wait_for_register”†”asbuh1hhj—$ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj—$ubjÜ)�”}”(hŒreg”h]”hŒreg”…”�”}”(hjÊ$h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj—$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj!$ubj>)�”}”(hŒu32 mask”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjæ$h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjã$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jè$Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jc$Œc.__intel_wait_for_register”†”asbuh1hhjß$ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjß$ubjÜ)�”}”(hŒmask”h]”hŒmask”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjß$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj!$ubj>)�”}”(hŒ u32 value”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj.%h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj+%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j0%Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jc$Œc.__intel_wait_for_register”†”asbuh1hhj'%ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj'%ubjÜ)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hjZ%h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj'%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj!$ubj>)�”}”(hŒunsigned int fast_timeout_us”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjs%h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjo%ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjo%ubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hj�%h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjo%ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjo%ubjÜ)�”}”(hŒfast_timeout_us”h]”hŒfast_timeout_us”…”�”}”(hj«%h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjo%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj!$ubj>)�”}”(hŒunsigned int slow_timeout_ms”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÄ%h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÀ%ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÀ%ubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hjà%h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÀ%ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÀ%ubjÜ)�”}”(hŒslow_timeout_ms”h]”hŒslow_timeout_ms”…”�”}”(hjü%h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÀ%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj!$ubj>)�”}”(hŒu32 *out_value”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j&Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jc$Œc.__intel_wait_for_register”†”asbuh1hhj&ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj&ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjD&h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj&ubjÜ)�”}”(hŒ out_value”h]”hŒ out_value”…”�”}”(hjQ&h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj!$ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjè#h²hh³jú#h´Mâ ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjä#h²hh³jú#h´Mâ ubah}”(h]”jß#ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jú#h´Mâ hjá#h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ*wait until register matches expected state”h]”hŒ*wait until register matches expected state”…”�”}”(hj{&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mâ hjx&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjá#h²hh³jú#h´Mâ ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój“&jôj“&jõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hXÿ**Parameters** ``struct intel_uncore *uncore`` the struct intel_uncore ``i915_reg_t reg`` the register to read ``u32 mask`` mask to apply to register value ``u32 value`` expected value ``unsigned int fast_timeout_us`` fast timeout in microsecond for atomic/tight wait ``unsigned int slow_timeout_ms`` slow timeout in millisecond ``u32 *out_value`` optional placeholder to hold registry value **Description** This routine waits until the target register **reg** contains the expected **value** after applying the **mask**, i.e. it waits until :: (intel_uncore_read(uncore, reg) & mask) == value Otherwise, the wait will timeout after **timeout_ms** milliseconds. **Return** 0 if the register matches the desired condition, or -ETIMEDOUT.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj�&h]”hŒ Parameters”…”�”}”(hjŸ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mæ hj—&ubj)�”}”(hhh]”(j)�”}”(hŒ8``struct intel_uncore *uncore`` the struct intel_uncore ”h]”(j$)�”}”(hŒ``struct intel_uncore *uncore``”h]”j*)�”}”(hj¼&h]”hŒstruct intel_uncore *uncore”…”�”}”(hj¾&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjº&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mã hj¶&ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe struct intel_uncore”h]”hŒthe struct intel_uncore”…”�”}”(hjÕ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÑ&h´Mã hjÒ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¶&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÑ&h´Mã hj³&ubj)�”}”(hŒ(``i915_reg_t reg`` the register to read ”h]”(j$)�”}”(hŒ``i915_reg_t reg``”h]”j*)�”}”(hjõ&h]”hŒi915_reg_t reg”…”�”}”(hj÷&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjó&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mä hjï&ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe register to read”h]”hŒthe register to read”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j 'h´Mä hj 'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjï&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j 'h´Mä hj³&ubj)�”}”(hŒ-``u32 mask`` mask to apply to register value ”h]”(j$)�”}”(hŒ ``u32 mask``”h]”j*)�”}”(hj.'h]”hŒu32 mask”…”�”}”(hj0'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj,'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Må hj('ubj@)�”}”(hhh]”hÚ)�”}”(hŒmask to apply to register value”h]”hŒmask to apply to register value”…”�”}”(hjG'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jC'h´Må hjD'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj('ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jC'h´Må hj³&ubj)�”}”(hŒ``u32 value`` expected value ”h]”(j$)�”}”(hŒ ``u32 value``”h]”j*)�”}”(hjg'h]”hŒ u32 value”…”�”}”(hji'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hje'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mæ hja'ubj@)�”}”(hhh]”hÚ)�”}”(hŒexpected value”h]”hŒexpected value”…”�”}”(hj€'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j|'h´Mæ hj}'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hja'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j|'h´Mæ hj³&ubj)�”}”(hŒS``unsigned int fast_timeout_us`` fast timeout in microsecond for atomic/tight wait ”•h]”(j$)�”}”(hŒ ``unsigned int fast_timeout_us``”h]”j*)�”}”(hj 'h]”hŒunsigned int fast_timeout_us”…”�”}”(hj¢'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjž'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mç hjš'ubj@)�”}”(hhh]”hÚ)�”}”(hŒ1fast timeout in microsecond for atomic/tight wait”h]”hŒ1fast timeout in microsecond for atomic/tight wait”…”�”}”(hj¹'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jµ'h´Mç hj¶'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjš'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµ'h´Mç hj³&ubj)�”}”(hŒ=``unsigned int slow_timeout_ms`` slow timeout in millisecond ”h]”(j$)�”}”(hŒ ``unsigned int slow_timeout_ms``”h]”j*)�”}”(hjÙ'h]”hŒunsigned int slow_timeout_ms”…”�”}”(hjÛ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj×'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mè hjÓ'ubj@)�”}”(hhh]”hÚ)�”}”(hŒslow timeout in millisecond”h]”hŒslow timeout in millisecond”…”�”}”(hjò'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jî'h´Mè hjï'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÓ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jî'h´Mè hj³&ubj)�”}”(hŒ?``u32 *out_value`` optional placeholder to hold registry value ”h]”(j$)�”}”(hŒ``u32 *out_value``”h]”j*)�”}”(hj(h]”hŒu32 *out_value”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mé hj (ubj@)�”}”(hhh]”hÚ)�”}”(hŒ+optional placeholder to hold registry value”h]”hŒ+optional placeholder to hold registry value”…”�”}”(hj+(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j'(h´Mé hj((ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj (ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j'(h´Mé hj³&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj—&ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjM(h]”hŒ Description”…”�”}”(hjO(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjK(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Më hj—&ubhÚ)�”}”(hŒˆThis routine waits until the target register **reg** contains the expected **value** after applying the **mask**, i.e. it waits until ::”h]”(hŒ-This routine waits until the target register ”…”�”}”(hjc(h²hh³Nh´Nubj)�”}”(hŒ**reg**”h]”hŒreg”…”�”}”(hjk(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjc(ubhŒ contains the expected ”…”�”}”(hjc(h²hh³Nh´Nubj)�”}”(hŒ **value**”h]”hŒvalue”…”�”}”(hj}(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjc(ubhŒ after applying the ”…”�”}”(hjc(h²hh³Nh´Nubj)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hj�(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjc(ubhŒ, i.e. it waits until”…”�”}”(hjc(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mê hj—&ubjA#)�”}”(hŒ0(intel_uncore_read(uncore, reg) & mask) == value”h]”hŒ0(intel_uncore_read(uncore, reg) & mask) == value”…”�”}”hj¨(sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mí hj—&ubhÚ)�”}”(hŒCOtherwise, the wait will timeout after **timeout_ms** milliseconds.”h]”(hŒ'Otherwise, the wait will timeout after ”…”�”}”(hj·(h²hh³Nh´Nubj)�”}”(hŒ**timeout_ms**”h]”hŒ timeout_ms”…”�”}”(hj¿(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·(ubhŒ milliseconds.”…”�”}”(hj·(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mï hj—&ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjÚ(h]”hŒReturn”…”�”}”(hjÜ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mñ hj—&ubhÚ)�”}”(hŒ?0 if the register matches the desired condition, or -ETIMEDOUT.”h]”hŒ?0 if the register matches the desired condition, or -ETIMEDOUT.”…”�”}”(hjð(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´Mò hj—&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ+intel_uncore_forcewake_for_reg (C function)”Œ c.intel_uncore_forcewake_for_reg”hNt”auh1j¶hj‡h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒtenum forcewake_domains intel_uncore_forcewake_for_reg (struct intel_uncore *uncore, i915_reg_t reg, unsigned int op)”h]”jÓ)�”}”(hŒsenum forcewake_domains intel_uncore_forcewake_for_reg(struct intel_uncore *uncore, i915_reg_t reg, unsigned int op)”h]”(jD)�”}”(hjµh]”hŒenum”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj)h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MJ ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj)h²hh³j,)h´MJ ubh)�”}”(hhh]”jÜ)�”}”(hŒforcewake_domains”h]”hŒforcewake_domains”…”�”}”(hj>)h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj;)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j@)Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõŒintel_uncore_forcewake_for_reg”sbŒ c.intel_uncore_forcewake_for_reg”†”asbuh1hhj)h²hh³j,)h´MJ ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj)h²hh³j,)h´MJ ubj)�”}”(hŒintel_uncore_forcewake_for_reg”h]”jÜ)�”}”(hj\)h]”hŒintel_uncore_forcewake_for_reg”…”�”}”(hjq)h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjm)ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj)h²hh³j,)h´MJ ubj8)�”}”(hŒ>(struct intel_uncore *uncore, i915_reg_t reg, unsigned int op)”h]”(j>)�”}”(hŒstruct intel_uncore *uncore”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjŒ)h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjˆ)ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjˆ)ubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_uncore”h]”hŒ intel_uncore”…”�”}”(hjª)h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj§)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j¬)Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jZ)Œ c.intel_uncore_forcewake_for_reg”†”asbuh1hhjˆ)ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjˆ)ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÖ)h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjˆ)ubjÜ)�”}”(hŒuncore”h]”hŒuncore”…”�”}”(hjã)h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjˆ)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj„)ubj>)�”}”(hŒi915_reg_t reg”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒ i915_reg_t”h]”hŒ i915_reg_t”…”�”}”(hjÿ)h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjü)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j*Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jZ)Œ c.intel_uncore_forcewake_for_reg”†”asbuh1hhjø)ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjø)ubjÜ)�”}”(hŒreg”h]”hŒreg”…”�”}”(hj+*h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjø)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj„)ubj>)�”}”(hŒunsigned int op”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjD*h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj@*ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj@*ubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hj`*h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj@*ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj@*ubjÜ)�”}”(hŒop”h]”hŒop”…”�”}”(hj|*h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj@*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj„)ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj)h²hh³j,)h´MJ ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj)h²hh³j,)h´MJ ubah}”(h]”j)ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j,)h´MJ hj)h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ7which forcewake domains are needed to access a register”h]”hŒ7which forcewake domains are needed to access a register”…”�”}”(hj¦*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MJ hj£*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj)h²hh³j,)h´MJ ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój¾*jôj¾*jõ‰jö‰j÷‰uh1jÇh²hhj‡h³Nh´Nubjù)�”}”(hXI**Parameters** ``struct intel_uncore *uncore`` pointer to struct intel_uncore ``i915_reg_t reg`` register in question ``unsigned int op`` operation bitmask of FW_REG_READ and/or FW_REG_WRITE **Description** Returns a set of forcewake domains required to be taken with for example intel_uncore_forcewake_get for the specified register to be accessible in the specified mode (read, write or read/write) with raw mmio accessors. **NOTE** On Gen6 and Gen7 write forcewake domain (FORCEWAKE_RENDER) requires the callers to do FIFO management on their own or risk losing writes.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÈ*h]”hŒ Parameters”…”�”}”(hjÊ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MN hjÂ*ubj)�”}”(hhh]”(j)�”}”(hŒ?``struct intel_uncore *uncore`` pointer to struct intel_uncore ”h]”(j$)�”}”(hŒ``struct intel_uncore *uncore``”h]”j*)�”}”(hjç*h]”hŒstruct intel_uncore *uncore”…”�”}”(hjé*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjå*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´ML hjá*ubj@)�”}”(hhh]”hÚ)�”}”(hŒpointer to struct intel_uncore”h]”hŒpointer to struct intel_uncore”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jü*h´ML hjý*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjá*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jü*h´ML hjÞ*ubj)�”}”(hŒ(``i915_reg_t reg`` register in question ”h]”(j$)�”}”(hŒ``i915_reg_t reg``”h]”j*)�”}”(hj +h]”hŒi915_reg_t reg”…”�”}”(hj"+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MM hj+ubj@)�”}”(hhh]”hÚ)�”}”(hŒregister in question”h]”hŒregister in question”…”�”}”(hj9+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j5+h´MM hj6+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j5+h´MM hjÞ*ubj)�”}”(hŒI``unsigned int op`` operation bitmask of FW_REG_READ and/or FW_REG_WRITE ”h]”(j$)�”}”(hŒ``unsigned int op``”h]”j*)�”}”(hjY+h]”hŒunsigned int op”…”�”}”(hj[+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjW+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MN hjS+ubj@)�”}”(hhh]”hÚ)�”}”(hŒ4operation bitmask of FW_REG_READ and/or FW_REG_WRITE”h]”hŒ4operation bitmask of FW_REG_READ and/or FW_REG_WRITE”…”�”}”(hjr+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jn+h´MN hjo+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjS+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jn+h´MN hjÞ*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÂ*ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj”+h]”hŒ Description”…”�”}”(hj–+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MP hjÂ*ubhÚ)�”}”(hŒÚReturns a set of forcewake domains required to be taken with for example intel_uncore_forcewake_get for the specified register to be accessible in the specified mode (read, write or read/write) with raw mmio accessors.”h]”hŒÚReturns a set of forcewake domains required to be taken with for example intel_uncore_forcewake_get for the specified register to be accessible in the specified mode (read, write or read/write) with raw mmio accessors.”…”�”}”(hjª+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MO hjÂ*ubhÚ)�”}”(hŒ**NOTE**”h]”j)�”}”(hj»+h]”hŒNOTE”…”�”}”(hj½+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MS hjÂ*ubhÚ)�”}”(hŒ‰On Gen6 and Gen7 write forcewake domain (FORCEWAKE_RENDER) requires the callers to do FIFO management on their own or risk losing writes.”h]”hŒ‰On Gen6 and Gen7 write forcewake domain (FORCEWAKE_RENDER) requires the callers to do FIFO management on their own or risk losing writes.”…”�”}”(hjÑ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ\/var/lib/git/docbuild/linux/Documentation/gpu/i915:31: ./drivers/gpu/drm/i915/intel_uncore.c”h´MT hjÂ*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj‡h²hh³Nh´Nubeh}”(h]”Œruntime-power-management”ah ]”h"]”Œruntime power management”ah$]”h&]”uh1hÄhjhh²hh³hÃh´KubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒInterrupt Handling”h]”hŒInterrupt Handling”…”�”}”(hjò+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjï+h²hh³hÃh´K#ubhÚ)�”}”(hŒ×These functions provide the basic support for enabling and disabling the interrupt handling support. There's a lot more functionality in i915_irq.c and related files, but that will be described in separate chapters.”h]”hŒÙThese functions provide the basic support for enabling and disabling the interrupt handling support. There’s a lot more functionality in i915_irq.c and related files, but that will be described in separate chapters.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:37: ./drivers/gpu/drm/i915/i915_irq.c”h´K6hjï+h²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒintel_irq_init (C function)”Œc.intel_irq_init”hNt”auh1j¶hjï+h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ7void intel_irq_init (struct drm_i915_private *dev_priv)”h]”jÓ)�”}”(hŒ6void intel_irq_init(struct drm_i915_private *dev_priv)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj(,h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj$,h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:40: ./drivers/gpu/drm/i915/i915_irq.c”h´Mëubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj$,h²hh³j6,h´Mëubj)�”}”(hŒintel_irq_init”h]”jÜ)�”}”(hŒintel_irq_init”h]”hŒintel_irq_init”…”�”}”(hjI,h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjE,ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj$,h²hh³j6,h´Mëubj8)�”}”(hŒ#(struct drm_i915_private *dev_priv)”h]”j>)�”}”(hŒ!struct drm_i915_private *dev_priv”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hje,h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChja,ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hja,ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hjƒ,h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj€,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j…,Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjK,sbŒc.intel_irq_init”†”asbuh1hhja,ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hja,ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj±,h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hja,ubjÜ)�”}”(hŒdev_priv”h]”hŒdev_priv”…”�”}”(hj¾,h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhja,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj],ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj$,h²hh³j6,h´Mëubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj ,h²hh³j6,h´Mëubah}”(h]”j,ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j6,h´Mëhj,h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒinitializes irq support”h]”hŒinitializes irq support”…”�”}”(hjè,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:40: ./drivers/gpu/drm/i915/i915_irq.c”h´Mëhjå,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj,h²hh³j6,h´Mëubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój-jôj-jõ‰jö‰j÷‰uh1jÇh²hhjï+h³Nh´Nubjù)�”}”(hŒí**Parameters** ``struct drm_i915_private *dev_priv`` i915 device instance **Description** This function initializes all the irq support including work items, timers and all the vtables. It does not setup the interrupt itself though.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj -h]”hŒ Parameters”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:40: ./drivers/gpu/drm/i915/i915_irq.c”h´Mïhj-ubj)�”}”(hhh]”j)�”}”(hŒ;``struct drm_i915_private *dev_priv`` i915 device instance ”h]”(j$)�”}”(hŒ%``struct drm_i915_private *dev_priv``”h]”j*)�”}”(hj)-h]”hŒ!struct drm_i915_private *dev_priv”…”�”}”(hj+-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj'-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:40: ./drivers/gpu/drm/i915/i915_irq.c”h´Mìhj#-ubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 device instance”h]”hŒi915 device instance”…”�”}”(hjB-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j>-h´Mìhj?-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj#-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j>-h´Mìhj -ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjd-h]”hŒ Description”…”�”}”(hjf-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjb-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:40: ./drivers/gpu/drm/i915/i915_irq.c”h´Mîhj-ubhÚ)�”}”(hŒŽThis function initializes all the irq support including work items, timers and all the vtables. It does not setup the interrupt itself though.”h]”hŒŽThis function initializes all the irq support including work items, timers and all the vtables. It does not setup the interrupt itself though.”…”�”}”(hjz-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:40: ./drivers/gpu/drm/i915/i915_irq.c”h´Míhj-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjï+h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒintel_irq_suspend (C function)”Œc.intel_irq_suspend”hNt”auh1j¶hjï+h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ6void intel_irq_suspend (struct drm_i915_private *i915)”h]”jÓ)�”}”(hŒ5void intel_irq_suspend(struct drm_i915_private *i915)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj©-h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj¥-h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:43: ./drivers/gpu/drm/i915/i915_irq.c”h´Mƒubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¥-h²hh³j·-h´Mƒubj)�”}”(hŒintel_irq_suspend”h]”jÜ)�”}”(hŒintel_irq_suspend”h]”hŒintel_irq_suspend”…”�”}”(hjÊ-h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÆ-ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj¥-h²hh³j·-h´Mƒubj8)�”}”(hŒ(struct drm_i915_private *i915)”h]”j>)�”}”(hŒstruct drm_i915_private *i915”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjæ-h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjâ-ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjâ-ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j.Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjÌ-sbŒc.intel_irq_suspend”†”asbuh1hhjâ-ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjâ-ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj2.h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjâ-ubjÜ)�”}”(hŒi915”h]”hŒi915”…”�”}”(hj?.h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjâ-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÞ-ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj¥-h²hh³j·-h´Mƒubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj¡-h²hh³j·-h´Mƒubah}”(h]”jœ-ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j·-h´Mƒhjž-h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒSuspend interrupts”h]”hŒSuspend interrupts”…”�”}”(hji.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:43: ./drivers/gpu/drm/i915/i915_irq.c”h´Mƒhjf.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjž-h²hh³j·-h´Mƒubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój�.jôj�.jõ‰jö‰j÷‰uh1jÇh²hhjï+h³Nh´Nubjù)�”}”(hŒ’**Parameters** ``struct drm_i915_private *i915`` i915 device instance **Description** This function is used to disable interrupts at runtime.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj‹.h]”hŒ Parameters”…”�”}”(hj�.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‰.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:43: ./drivers/gpu/drm/i915/i915_irq.c”h´M‡hj….ubj)�”}”(hhh]”j)�”}”(hŒ7``struct drm_i915_private *i915`` i915 device instance ”h]”(j$)�”}”(hŒ!``struct drm_i915_private *i915``”h]”j*)�”}”(hjª.h]”hŒstruct drm_i915_private *i915”…”�”}”(hj¬.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¨.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:43: ./drivers/gpu/drm/i915/i915_irq.c”h´M„hj¤.ubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 device instance”h]”hŒi915 device instance”…”�”}”(hjÃ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¿.h´M„hjÀ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¤.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¿.h´M„hj¡.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj….ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjå.h]”hŒ Description”…”�”}”(hjç.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjã.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:43: ./drivers/gpu/drm/i915/i915_irq.c”h´M†hj….ubhÚ)�”}”(hŒ7This function is used to disable interrupts at runtime.”h]”hŒ7This function is used to disable interrupts at runtime.”…”�”}”(hjû.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:43: ./drivers/gpu/drm/i915/i915_irq.c”h´M…hj….ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjï+h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒintel_irq_resume (C function)”Œc.intel_irq_resume”hNt”auh1j¶hjï+h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ5void intel_irq_resume (struct drm_i915_private *i915)”h]”jÓ)�”}”(hŒ4void intel_irq_resume(struct drm_i915_private *i915)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj*/h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj&/h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:46: ./drivers/gpu/drm/i915/i915_irq.c”h´M�ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj&/h²hh³j8/h´M�ubj)�”}”(hŒintel_irq_resume”h]”jÜ)�”}”(hŒintel_irq_resume”h]”hŒintel_irq_resume”…”�”}”(hjK/h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjG/ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj&/h²hh³j8/h´M�ubj8)�”}”(hŒ(struct drm_i915_private *i915)”h]”j>)�”}”(hŒstruct drm_i915_private *i915”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjg/h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjc/ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjc/ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hj…/h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj‚/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j‡/Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjM/sbŒc.intel_irq_resume”†”asbuh1hhjc/ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjc/ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj³/h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjc/ubjÜ)�”}”(hŒi915”h]”hŒi915”…”�”}”(hjÀ/h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjc/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj_/ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj&/h²hh³j8/h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj"/h²hh³j8/h´M�ubah}”(h]”j/ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j8/h´M�hj/h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒResume interrupts”h]”hŒResume interrupts”…”�”}”(hjê/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:46: ./drivers/gpu/drm/i915/i915_irq.c”h´M�hjç/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj/h²hh³j8/h´M�ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój0jôj0jõ‰jö‰j÷‰uh1jÇh²hhjï+h³Nh´Nubjù)�”}”(hŒ‘**Parameters** ``struct drm_i915_private *i915`` i915 device instance **Description** This function is used to enable interrupts at runtime.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj 0h]”hŒ Parameters”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj 0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:46: ./drivers/gpu/drm/i915/i915_irq.c”h´M”hj0ubj)�”}”(hhh]”j)�”}”(hŒ7``struct drm_i915_private *i915`` i915 device instance ”h]”(j$)�”}”(hŒ!``struct drm_i915_private *i915``”h]”j*)�”}”(hj+0h]”hŒstruct drm_i915_private *i915”…”�”}”(hj-0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj)0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:46: ./drivers/gpu/drm/i915/i915_irq.c”h´M‘hj%0ubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 device instance”h]”hŒi915 device instance”…”�”}”(hjD0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j@0h´M‘hjA0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj%0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@0h´M‘hj"0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjf0h]”hŒ Description”…”�”}”(hjh0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjd0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:46: ./drivers/gpu/drm/i915/i915_irq.c”h´M“hj0ubhÚ)�”}”(hŒ6This function is used to enable interrupts at runtime.”h]”hŒ6This function is used to enable interrupts at runtime.”…”�”}”(hj|0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒX/var/lib/git/docbuild/linux/Documentation/gpu/i915:46: ./drivers/gpu/drm/i915/i915_irq.c”h´M’hj0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjï+h²hh³Nh´Nubeh}”(h]”Œinterrupt-handling”ah ]”h"]”Œinterrupt handling”ah$]”h&]”uh1hÄhjhh²hh³hÃh´K#ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒIntel GVT-g Guest Support(vGPU)”h]”hŒIntel GVT-g Guest Support(vGPU)”…”�”}”(hj�0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjš0h²hh³hÃh´K2ubhÚ)�”}”(hXÛIntel GVT-g is a graphics virtualization technology which shares the GPU among multiple virtual machines on a time-sharing basis. Each virtual machine is presented a virtual GPU (vGPU), which has equivalent features as the underlying physical GPU (pGPU), so i915 driver can run seamlessly in a virtual machine. This file provides vGPU specific optimizations when running in a virtual machine, to reduce the complexity of vGPU emulation and to improve the overall performance.”h]”hXÛIntel GVT-g is a graphics virtualization technology which shares the GPU among multiple virtual machines on a time-sharing basis. Each virtual machine is presented a virtual GPU (vGPU), which has equivalent features as the underlying physical GPU (pGPU), so i915 driver can run seamlessly in a virtual machine. This file provides vGPU specific optimizations when running in a virtual machine, to reduce the complexity of vGPU emulation and to improve the overall performance.”…”�”}”(hj«0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:52: ./drivers/gpu/drm/i915/i915_vgpu.c”h´Khjš0h²hubhÚ)�”}”(hX¨A primary function introduced here is so-called "address space ballooning" technique. Intel GVT-g partitions global graphics memory among multiple VMs, so each VM can directly access a portion of the memory without hypervisor's intervention, e.g. filling textures or queuing commands. However with the partitioning an unmodified i915 driver would assume a smaller graphics memory starting from address ZERO, then requires vGPU emulation module to translate the graphics address between 'guest view' and 'host view', for all registers and command opcodes which contain a graphics memory address. To reduce the complexity, Intel GVT-g introduces "address space ballooning", by telling the exact partitioning knowledge to each guest i915 driver, which then reserves and prevents non-allocated portions from allocation. Thus vGPU emulation module only needs to scan and validate graphics addresses without complexity of address translation.”h]”hXºA primary function introduced here is so-called “address space ballooningâ€� technique. Intel GVT-g partitions global graphics memory among multiple VMs, so each VM can directly access a portion of the memory without hypervisor’s intervention, e.g. filling textures or queuing commands. However with the partitioning an unmodified i915 driver would assume a smaller graphics memory starting from address ZERO, then requires vGPU emulation module to translate the graphics address between ‘guest view’ and ‘host view’, for all registers and command opcodes which contain a graphics memory address. To reduce the complexity, Intel GVT-g introduces “address space ballooningâ€�, by telling the exact partitioning knowledge to each guest i915 driver, which then reserves and prevents non-allocated portions from allocation. Thus vGPU emulation module only needs to scan and validate graphics addresses without complexity of address translation.”…”�”}”(hjº0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:52: ./drivers/gpu/drm/i915/i915_vgpu.c”h´K'hjš0h²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒintel_vgpu_detect (C function)”Œc.intel_vgpu_detect”hNt”auh1j¶hjš0h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ:void intel_vgpu_detect (struct drm_i915_private *dev_priv)”h]”jÓ)�”}”(hŒ9void intel_vgpu_detect(struct drm_i915_private *dev_priv)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjâ0h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÞ0h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´K:ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÞ0h²hh³jð0h´K:ubj)�”}”(hŒintel_vgpu_detect”h]”jÜ)�”}”(hŒintel_vgpu_detect”h]”hŒintel_vgpu_detect”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÿ0ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÞ0h²hh³jð0h´K:ubj8)�”}”(hŒ#(struct drm_i915_private *dev_priv)”h]”j>)�”}”(hŒ!struct drm_i915_private *dev_priv”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj1ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj1ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hj=1h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj:1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j?1Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj1sbŒc.intel_vgpu_detect”†”asbuh1hhj1ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj1ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjk1h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj1ubjÜ)�”}”(hŒdev_priv”h]”hŒdev_priv”…”�”}”(hjx1h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj1ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÞ0h²hh³jð0h´K:ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÚ0h²hh³jð0h´K:ubah}”(h]”jÕ0ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jð0h´K:hj×0h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒdetect virtual GPU”h]”hŒdetect virtual GPU”…”�”}”(hj¢1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´K:hjŸ1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj×0h²hh³jð0h´K:ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójº1jôjº1jõ‰jö‰j÷‰uh1jÇh²hhjš0h³Nh´Nubjù)�”}”(hŒ·**Parameters** ``struct drm_i915_private *dev_priv`` i915 device private **Description** This function is called at the initialization stage, to detect whether running on a vGPU.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÄ1h]”hŒ Parameters”…”�”}”(hjÆ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÂ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´K>hj¾1ubj)�”}”(hhh]”j)�”}”(hŒ:``struct drm_i915_private *dev_priv`` i915 device private ”h]”(j$)�”}”(hŒ%``struct drm_i915_private *dev_priv``”h]”j*)�”}”(hjã1h]”hŒ!struct drm_i915_private *dev_priv”…”�”}”(hjå1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjá1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´K;hjÝ1ubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 device private”h]”hŒi915 device private”…”�”}”(hjü1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jø1h´K;hjù1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÝ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jø1h´K;hjÚ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾1ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj2h]”hŒ Description”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´K=hj¾1ubhÚ)�”}”(hŒYThis function is called at the initialization stage, to detect whether running on a vGPU.”h]”hŒYThis function is called at the initialization stage, to detect whether running on a vGPU.”…”�”}”(hj42h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´K)�”}”(hŒstruct i915_ggtt *ggtt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjœ2ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjœ2ubh)�”}”(hhh]”jÜ)�”}”(hŒ i915_ggtt”h]”hŒ i915_ggtt”…”�”}”(hj¾2h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj»2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÀ2Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj†2sbŒc.intel_vgt_deballoon”†”asbuh1hhjœ2ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjœ2ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjì2h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjœ2ubjÜ)�”}”(hŒggtt”h]”hŒggtt”…”�”}”(hjù2h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjœ2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj˜2ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj_2h²hh³jq2h´K¨ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj[2h²hh³jq2h´K¨ubah}”(h]”jV2ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jq2h´K¨hjX2h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ*deballoon reserved graphics address trunks”h]”hŒ*deballoon reserved graphics address trunks”…”�”}”(hj#3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´K¨hj 3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjX2h²hh³jq2h´K¨ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój;3jôj;3jõ‰jö‰j÷‰uh1jÇh²hhjš0h³Nh´Nubjù)�”}”(hŒç**Parameters** ``struct i915_ggtt *ggtt`` the global GGTT from which we reserved earlier **Description** This function is called to deallocate the ballooned-out graphic memory, when driver is unloaded or when ballooning fails.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjE3h]”hŒ Parameters”…”�”}”(hjG3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjC3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´K¬hj?3ubj)�”}”(hhh]”j)�”}”(hŒJ``struct i915_ggtt *ggtt`` the global GGTT from which we reserved earlier ”h]”(j$)�”}”(hŒ``struct i915_ggtt *ggtt``”h]”j*)�”}”(hjd3h]”hŒstruct i915_ggtt *ggtt”…”�”}”(hjf3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjb3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´K©hj^3ubj@)�”}”(hhh]”hÚ)�”}”(hŒ.the global GGTT from which we reserved earlier”h]”hŒ.the global GGTT from which we reserved earlier”…”�”}”(hj}3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jy3h´K©hjz3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj^3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jy3h´K©hj[3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?3ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjŸ3h]”hŒ Description”…”�”}”(hj¡3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´K«hj?3ubhÚ)�”}”(hŒyThis function is called to deallocate the ballooned-out graphic memory, when driver is unloaded or when ballooning fails.”h]”hŒyThis function is called to deallocate the ballooned-out graphic memory, when driver is unloaded or when ballooning fails.”…”�”}”(hjµ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´Kªhj?3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjš0h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒintel_vgt_balloon (C function)”Œc.intel_vgt_balloon”hNt”auh1j¶hjš0h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ.int intel_vgt_balloon (struct i915_ggtt *ggtt)”h]”jÓ)�”}”(hŒ-int intel_vgt_balloon(struct i915_ggtt *ggtt)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjä3h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjà3h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´KÔubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjà3h²hh³jò3h´KÔubj)�”}”(hŒintel_vgt_balloon”h]”jÜ)�”}”(hŒintel_vgt_balloon”h]”hŒintel_vgt_balloon”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj4ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjà3h²hh³jò3h´KÔubj8)�”}”(hŒ(struct i915_ggtt *ggtt)”h]”j>)�”}”(hŒstruct i915_ggtt *ggtt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj!4h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj4ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj4ubh)�”}”(hhh]”jÜ)�”}”(hŒ i915_ggtt”h]”hŒ i915_ggtt”…”�”}”(hj?4h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj<4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jA4Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj4sbŒc.intel_vgt_balloon”†”asbuh1hhj4ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj4ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjm4h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj4ubjÜ)�”}”(hŒggtt”h]”hŒggtt”…”�”}”(hjz4h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj4ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjà3h²hh³jò3h´KÔubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÜ3h²hh³jò3h´KÔubah}”(h]”j×3ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jò3h´KÔhjÙ3h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ,balloon out reserved graphics address trunks”h]”hŒ,balloon out reserved graphics address trunks”…”�”}”(hj¤4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´KÔhj¡4h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÙ3h²hh³jò3h´KÔubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój¼4jôj¼4jõ‰jö‰j÷‰uh1jÇh²hhjš0h³Nh´Nubjù)�”}”(hX§**Parameters** ``struct i915_ggtt *ggtt`` the global GGTT from which to reserve **Description** This function is called at the initialization stage, to balloon out the graphic address space allocated to other vGPUs, by marking these spaces as reserved. The ballooning related knowledge(starting address and size of the mappable/unmappable graphic memory) is described in the vgt_if structure in a reserved mmio range. To give an example, the drawing below depicts one typical scenario after ballooning. Here the vGPU1 has 2 pieces of graphic address spaces ballooned out each for the mappable and the non-mappable part. From the vGPU1 point of view, the total size is the same as the physical one, with the start address of its graphic space being zero. Yet there are some portions ballooned out( the shadow part, which are marked as reserved by drm allocator). From the host point of view, the graphic address space is partitioned by multiple vGPUs in different VMs. :: vGPU1 view Host view 0 ------> +-----------+ +-----------+ ^ |###########| | vGPU3 | | |###########| +-----------+ | |###########| | vGPU2 | | +-----------+ +-----------+ mappable GM | available | ==> | vGPU1 | | +-----------+ +-----------+ | |###########| | | v |###########| | Host | +=======+===========+ +===========+ ^ |###########| | vGPU3 | | |###########| +-----------+ | |###########| | vGPU2 | | +-----------+ +-----------+ unmappable GM | available | ==> | vGPU1 | | +-----------+ +-----------+ | |###########| | | | |###########| | Host | v |###########| | | total GM size ------> +-----------+ +-----------+ **Return** zero on success, non-zero if configuration invalid or ballooning failed”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÆ4h]”hŒ Parameters”…”�”}”(hjÈ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´KØhjÀ4ubj)�”}”(hhh]”j)�”}”(hŒA``struct i915_ggtt *ggtt`` the global GGTT from which to reserve ”h]”(j$)�”}”(hŒ``struct i915_ggtt *ggtt``”h]”j*)�”}”(hjå4h]”hŒstruct i915_ggtt *ggtt”…”�”}”(hjç4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjã4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´KÕhjß4ubj@)�”}”(hhh]”hÚ)�”}”(hŒ%the global GGTT from which to reserve”h]”hŒ%the global GGTT from which to reserve”…”�”}”(hjþ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jú4h´KÕhjû4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjß4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jú4h´KÕhjÜ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀ4ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj 5h]”hŒ Description”…”�”}”(hj"5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´K×hjÀ4ubhÚ)�”}”(hXAThis function is called at the initialization stage, to balloon out the graphic address space allocated to other vGPUs, by marking these spaces as reserved. The ballooning related knowledge(starting address and size of the mappable/unmappable graphic memory) is described in the vgt_if structure in a reserved mmio range.”h]”hXAThis function is called at the initialization stage, to balloon out the graphic address space allocated to other vGPUs, by marking these spaces as reserved. The ballooning related knowledge(starting address and size of the mappable/unmappable graphic memory) is described in the vgt_if structure in a reserved mmio range.”…”�”}”(hj65h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´KÖhjÀ4ubhÚ)�”}”(hX(To give an example, the drawing below depicts one typical scenario after ballooning. Here the vGPU1 has 2 pieces of graphic address spaces ballooned out each for the mappable and the non-mappable part. From the vGPU1 point of view, the total size is the same as the physical one, with the start address of its graphic space being zero. Yet there are some portions ballooned out( the shadow part, which are marked as reserved by drm allocator). From the host point of view, the graphic address space is partitioned by multiple vGPUs in different VMs. ::”h]”hX%To give an example, the drawing below depicts one typical scenario after ballooning. Here the vGPU1 has 2 pieces of graphic address spaces ballooned out each for the mappable and the non-mappable part. From the vGPU1 point of view, the total size is the same as the physical one, with the start address of its graphic space being zero. Yet there are some portions ballooned out( the shadow part, which are marked as reserved by drm allocator). From the host point of view, the graphic address space is partitioned by multiple vGPUs in different VMs.”…”�”}”(hjE5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´KÜhjÀ4ubjA#)�”}”(hXk vGPU1 view Host view 0 ------> +-----------+ +-----------+ ^ |###########| | vGPU3 | | |###########| +-----------+ | |###########| | vGPU2 | | +-----------+ +-----------+ mappable GM | available | ==> | vGPU1 | | +-----------+ +-----------+ | |###########| | | v |###########| | Host | +=======+===========+ +===========+ ^ |###########| | vGPU3 | | |###########| +-----------+ | |###########| | vGPU2 | | +-----------+ +-----------+ unmappable GM | available | ==> | vGPU1 | | +-----------+ +-----------+ | |###########| | | | |###########| | Host | v |###########| | | total GM size ------> +-----------+ +-----------+”h]”hXk vGPU1 view Host view 0 ------> +-----------+ +-----------+ ^ |###########| | vGPU3 | | |###########| +-----------+ | |###########| | vGPU2 | | +-----------+ +-----------+ mappable GM | available | ==> | vGPU1 | | +-----------+ +-----------+ | |###########| | | v |###########| | Host | +=======+===========+ +===========+ ^ |###########| | vGPU3 | | |###########| +-----------+ | |###########| | vGPU2 | | +-----------+ +-----------+ unmappable GM | available | ==> | vGPU1 | | +-----------+ +-----------+ | |###########| | | | |###########| | Host | v |###########| | | total GM size ------> +-----------+ +-----------+”…”�”}”hjT5sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´KåhjÀ4ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hje5h]”hŒReturn”…”�”}”(hjg5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjc5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´KûhjÀ4ubhÚ)�”}”(hŒGzero on success, non-zero if configuration invalid or ballooning failed”h]”hŒGzero on success, non-zero if configuration invalid or ballooning failed”…”�”}”(hj{5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:55: ./drivers/gpu/drm/i915/i915_vgpu.c”h´KühjÀ4ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjš0h²hh³Nh´Nubeh}”(h]”Œintel-gvt-g-guest-support-vgpu”ah ]”h"]”Œintel gvt-g guest support(vgpu)”ah$]”h&]”uh1hÄhjhh²hh³hÃh´K2ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ+Intel GVT-g Host Support(vGPU device model)”h]”hŒ+Intel GVT-g Host Support(vGPU device model)”…”�”}”(hjœ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj™5h²hh³hÃh´K;ubhÚ)�”}”(hX6Intel GVT-g is a graphics virtualization technology which shares the GPU among multiple virtual machines on a time-sharing basis. Each virtual machine is presented a virtual GPU (vGPU), which has equivalent features as the underlying physical GPU (pGPU), so i915 driver can run seamlessly in a virtual machine.”h]”hX6Intel GVT-g is a graphics virtualization technology which shares the GPU among multiple virtual machines on a time-sharing basis. Each virtual machine is presented a virtual GPU (vGPU), which has equivalent features as the underlying physical GPU (pGPU), so i915 driver can run seamlessly in a virtual machine.”…”�”}”(hjª5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:61: ./drivers/gpu/drm/i915/intel_gvt.c”h´K'hj™5h²hubhÚ)�”}”(hXTo virtualize GPU resources GVT-g driver depends on hypervisor technology e.g KVM/VFIO/mdev, Xen, etc. to provide resource access trapping capability and be virtualized within GVT-g device module. More architectural design doc is available on https://github.com/intel/gvt-linux/wiki.”h]”(hŒóTo virtualize GPU resources GVT-g driver depends on hypervisor technology e.g KVM/VFIO/mdev, Xen, etc. to provide resource access trapping capability and be virtualized within GVT-g device module. More architectural design doc is available on ”…”�”}”(hj¹5h²hh³Nh´NubhŒ reference”“”)�”}”(hŒ'https://github.com/intel/gvt-linux/wiki”h]”hŒ'https://github.com/intel/gvt-linux/wiki”…”�”}”(hjÃ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jÅ5uh1jÁ5hj¹5ubhŒ.”…”�”}”(hj¹5h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:61: ./drivers/gpu/drm/i915/intel_gvt.c”h´K-hj™5h²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒintel_gvt_init (C function)”Œc.intel_gvt_init”hNt”auh1j¶hj™5h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ6int intel_gvt_init (struct drm_i915_private *dev_priv)”h]”jÓ)�”}”(hŒ5int intel_gvt_init(struct drm_i915_private *dev_priv)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjö5h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjò5h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Kéubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjò5h²hh³j6h´Kéubj)�”}”(hŒintel_gvt_init”h]”jÜ)�”}”(hŒintel_gvt_init”h]”hŒintel_gvt_init”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj6ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjò5h²hh³j6h´Kéubj8)�”}”(hŒ#(struct drm_i915_private *dev_priv)”h]”j>)�”}”(hŒ!struct drm_i915_private *dev_priv”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj36h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj/6ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj/6ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hjQ6h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjN6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jS6Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj6sbŒc.intel_gvt_init”†”asbuh1hhj/6ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj/6ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj/6ubjÜ)�”}”(hŒdev_priv”h]”hŒdev_priv”…”�”}”(hjŒ6h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj/6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj+6ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjò5h²hh³j6h´Kéubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjî5h²hh³j6h´Kéubah}”(h]”jé5ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j6h´Kéhjë5h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒinitialize GVT components”h]”hŒinitialize GVT components”…”�”}”(hj¶6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Kéhj³6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjë5h²hh³j6h´Kéubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójÎ6jôjÎ6jõ‰jö‰j÷‰uh1jÇh²hhj™5h³Nh´Nubjù)�”}”(hŒè**Parameters** ``struct drm_i915_private *dev_priv`` drm i915 private data **Description** This function is called at the initialization stage to create a GVT device. **Return** Zero on success, negative error code if failed.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjØ6h]”hŒ Parameters”…”�”}”(hjÚ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´KíhjÒ6ubj)�”}”(hhh]”j)�”}”(hŒ<``struct drm_i915_private *dev_priv`` drm i915 private data ”h]”(j$)�”}”(hŒ%``struct drm_i915_private *dev_priv``”h]”j*)�”}”(hj÷6h]”hŒ!struct drm_i915_private *dev_priv”…”�”}”(hjù6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjõ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Kêhjñ6ubj@)�”}”(hhh]”hÚ)�”}”(hŒdrm i915 private data”h]”hŒdrm i915 private data”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j 7h´Kêhj 7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjñ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j 7h´Kêhjî6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒ6ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj27h]”hŒ Description”…”�”}”(hj47h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj07ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´KìhjÒ6ubhÚ)�”}”(hŒKThis function is called at the initialization stage to create a GVT device.”h]”hŒKThis function is called at the initialization stage to create a GVT device.”…”�”}”(hjH7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´KëhjÒ6ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjY7h]”hŒReturn”…”�”}”(hj[7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjW7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´KíhjÒ6ubhÚ)�”}”(hŒ/Zero on success, negative error code if failed.”h]”hŒ/Zero on success, negative error code if failed.”…”�”}”(hjo7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´KîhjÒ6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj™5h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ$intel_gvt_driver_remove (C function)”Œc.intel_gvt_driver_remove”hNt”auh1j¶hj™5h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ@void intel_gvt_driver_remove (struct drm_i915_private *dev_priv)”h]”jÓ)�”}”(hŒ?void intel_gvt_driver_remove(struct drm_i915_private *dev_priv)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjž7h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjš7h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Kþubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjš7h²hh³j¬7h´Kþubj)�”}”(hŒintel_gvt_driver_remove”h]”jÜ)�”}”(hŒintel_gvt_driver_remove”h]”hŒintel_gvt_driver_remove”…”�”}”(hj¿7h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj»7ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjš7h²hh³j¬7h´Kþubj8)�”}”(hŒ#(struct drm_i915_private *dev_priv)”h]”j>)�”}”(hŒ!struct drm_i915_private *dev_priv”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÛ7h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj×7ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj×7ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hjù7h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjö7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jû7Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjÁ7sbŒc.intel_gvt_driver_remove”†”asbuh1hhj×7ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj×7ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj'8h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj×7ubjÜ)�”}”(hŒdev_priv”h]”hŒdev_priv”…”�”}”(hj48h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj×7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÓ7ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjš7h²hh³j¬7h´Kþubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj–7h²hh³j¬7h´Kþubah}”(h]”j‘7ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j¬7h´Kþhj“7h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ4cleanup GVT components when i915 driver is unbinding”h]”hŒ4cleanup GVT components when i915 driver is unbinding”…”�”}”(hj^8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Kþhj[8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj“7h²hh³j¬7h´Kþubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójv8jôjv8jõ‰jö‰j÷‰uh1jÇh²hhj™5h³Nh´Nubjù)�”}”(hŒÖ**Parameters** ``struct drm_i915_private *dev_priv`` drm i915 private * **Description** This function is called at the i915 driver unloading stage, to shutdown GVT components and release the related resources.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj€8h]”hŒ Parameters”…”�”}”(hj‚8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj~8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Mhjz8ubj)�”}”(hhh]”j)�”}”(hŒ9``struct drm_i915_private *dev_priv`` drm i915 private * ”h]”(j$)�”}”(hŒ%``struct drm_i915_private *dev_priv``”h]”j*)�”}”(hjŸ8h]”hŒ!struct drm_i915_private *dev_priv”…”�”}”(hj¡8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj�8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Mhj™8ubj@)�”}”(hhh]”hÚ)�”}”(hŒdrm i915 private *”h]”hŒdrm i915 private *”…”�”}”(hj¸8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j´8h´Mhjµ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj™8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´8h´Mhj–8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjz8ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjÚ8h]”hŒ Description”…”�”}”(hjÜ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Mhjz8ubhÚ)�”}”(hŒyThis function is called at the i915 driver unloading stage, to shutdown GVT components and release the related resources.”h]”hŒyThis function is called at the i915 driver unloading stage, to shutdown GVT components and release the related resources.”…”�”}”(hjð8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Mhjz8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj™5h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒintel_gvt_resume (C function)”Œc.intel_gvt_resume”hNt”auh1j¶hj™5h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ9void intel_gvt_resume (struct drm_i915_private *dev_priv)”h]”jÓ)�”}”(hŒ8void intel_gvt_resume(struct drm_i915_private *dev_priv)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj9h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Mubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj9h²hh³j-9h´Mubj)�”}”(hŒintel_gvt_resume”h]”jÜ)�”}”(hŒintel_gvt_resume”h]”hŒintel_gvt_resume”…”�”}”(hj@9h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj<9ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj9h²hh³j-9h´Mubj8)�”}”(hŒ#(struct drm_i915_private *dev_priv)”h]”j>)�”}”(hŒ!struct drm_i915_private *dev_priv”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj\9h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjX9ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hji9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjX9ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hjz9h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjw9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”•XjóŒreftype”jõŒ reftarget”j|9Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjB9sbŒc.intel_gvt_resume”†”asbuh1hhjX9ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjX9ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¨9h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjX9ubjÜ)�”}”(hŒdev_priv”h]”hŒdev_priv”…”�”}”(hjµ9h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjX9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjT9ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj9h²hh³j-9h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj9h²hh³j-9h´Mubah}”(h]”j9ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j-9h´Mhj9h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒGVT resume routine wrapper”h]”hŒGVT resume routine wrapper”…”�”}”(hjß9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´MhjÜ9h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj9h²hh³j-9h´Mubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój÷9jôj÷9jõ‰jö‰j÷‰uh1jÇh²hhj™5h³Nh´Nubjù)�”}”(hŒë**Parameters** ``struct drm_i915_private *dev_priv`` drm i915 private * **Description** This function is called at the i915 driver resume stage to restore required HW status for GVT so that vGPU can continue running after resumed.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj:h]”hŒ Parameters”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Mhjû9ubj)�”}”(hhh]”j)�”}”(hŒ9``struct drm_i915_private *dev_priv`` drm i915 private * ”h]”(j$)�”}”(hŒ%``struct drm_i915_private *dev_priv``”h]”j*)�”}”(hj :h]”hŒ!struct drm_i915_private *dev_priv”…”�”}”(hj":h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Mhj:ubj@)�”}”(hhh]”hÚ)�”}”(hŒdrm i915 private *”h]”hŒdrm i915 private *”…”�”}”(hj9:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j5:h´Mhj6:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j5:h´Mhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû9ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj[:h]”hŒ Description”…”�”}”(hj]:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjY:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Mhjû9ubhÚ)�”}”(hŒŽThis function is called at the i915 driver resume stage to restore required HW status for GVT so that vGPU can continue running after resumed.”h]”hŒŽThis function is called at the i915 driver resume stage to restore required HW status for GVT so that vGPU can continue running after resumed.”…”�”}”(hjq:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:64: ./drivers/gpu/drm/i915/intel_gvt.c”h´Mhjû9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj™5h²hh³Nh´Nubeh}”(h]”Œ*intel-gvt-g-host-support-vgpu-device-model”ah ]”h"]”Œ+intel gvt-g host support(vgpu device model)”ah$]”h&]”uh1hÄhjhh²hh³hÃh´K;ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ Workarounds”h]”hŒ Workarounds”…”�”}”(hj’:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj�:h²hh³hÃh´KDubhÚ)�”}”(hŒóHardware workarounds are register programming documented to be executed in the driver that fall outside of the normal programming sequences for a platform. There are some basic categories of workarounds, depending on how/when they are applied:”h]”hŒóHardware workarounds are register programming documented to be executed in the driver that fall outside of the normal programming sequences for a platform. There are some basic categories of workarounds, depending on how/when they are applied:”…”�”}”(hj :h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´Khj�:h²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hXContext workarounds: workarounds that touch registers that are saved/restored to/from the HW context image. The list is emitted (via Load Register Immediate commands) once when initializing the device and saved in the default context. That default context is then used on every context creation to have a "primed golden context", i.e. a context image that already contains the changes needed to all the registers. Context workarounds should be implemented in the \*_ctx_workarounds_init() variants respective to the targeted platforms. ”h]”(hÚ)�”}”(hX�Context workarounds: workarounds that touch registers that are saved/restored to/from the HW context image. The list is emitted (via Load Register Immediate commands) once when initializing the device and saved in the default context. That default context is then used on every context creation to have a "primed golden context", i.e. a context image that already contains the changes needed to all the registers.”h]”hX¡Context workarounds: workarounds that touch registers that are saved/restored to/from the HW context image. The list is emitted (via Load Register Immediate commands) once when initializing the device and saved in the default context. That default context is then used on every context creation to have a “primed golden contextâ€�, i.e. a context image that already contains the changes needed to all the registers.”…”�”}”(hjº:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´Khj¶:ubhÚ)�”}”(hŒyContext workarounds should be implemented in the \*_ctx_workarounds_init() variants respective to the targeted platforms.”h]”hŒyContext workarounds should be implemented in the *_ctx_workarounds_init() variants respective to the targeted platforms.”…”�”}”(hjÉ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´K&hj¶:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj±:ubjµ:)�”}”(hX Engine workarounds: the list of these WAs is applied whenever the specific engine is reset. It's also possible that a set of engine classes share a common power domain and they are reset together. This happens on some platforms with render and compute engines. In this case (at least) one of them need to keeep the workaround programming: the approach taken in the driver is to tie those workarounds to the first compute/render engine that is registered. When executing with GuC submission, engine resets are outside of kernel driver control, hence the list of registers involved in written once, on engine initialization, and then passed to GuC, that saves/restores their values before/after the reset takes place. See ``drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c`` for reference. Workarounds for registers specific to RCS and CCS should be implemented in rcs_engine_wa_init() and ccs_engine_wa_init(), respectively; those for registers belonging to BCS, VCS or VECS should be implemented in xcs_engine_wa_init(). Workarounds for registers not belonging to a specific engine's MMIO range but that are part of of the common RCS/CCS reset domain should be implemented in general_render_compute_wa_init(). The settings about the CCS load balancing should be added in ccs_engine_wa_mode(). ”h]”(hÚ)�”}”(hXEngine workarounds: the list of these WAs is applied whenever the specific engine is reset. It's also possible that a set of engine classes share a common power domain and they are reset together. This happens on some platforms with render and compute engines. In this case (at least) one of them need to keeep the workaround programming: the approach taken in the driver is to tie those workarounds to the first compute/render engine that is registered. When executing with GuC submission, engine resets are outside of kernel driver control, hence the list of registers involved in written once, on engine initialization, and then passed to GuC, that saves/restores their values before/after the reset takes place. See ``drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c`` for reference.”h]”(hXÓEngine workarounds: the list of these WAs is applied whenever the specific engine is reset. It’s also possible that a set of engine classes share a common power domain and they are reset together. This happens on some platforms with render and compute engines. In this case (at least) one of them need to keeep the workaround programming: the approach taken in the driver is to tie those workarounds to the first compute/render engine that is registered. When executing with GuC submission, engine resets are outside of kernel driver control, hence the list of registers involved in written once, on engine initialization, and then passed to GuC, that saves/restores their values before/after the reset takes place. See ”…”�”}”(hjâ:h²hh³Nh´Nubj*)�”}”(hŒ.``drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c``”h]”hŒ*drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c”…”�”}”(hjê:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjâ:ubhŒ for reference.”…”�”}”(hjâ:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´K)hjÞ:ubhÚ)�”}”(hXøWorkarounds for registers specific to RCS and CCS should be implemented in rcs_engine_wa_init() and ccs_engine_wa_init(), respectively; those for registers belonging to BCS, VCS or VECS should be implemented in xcs_engine_wa_init(). Workarounds for registers not belonging to a specific engine's MMIO range but that are part of of the common RCS/CCS reset domain should be implemented in general_render_compute_wa_init(). The settings about the CCS load balancing should be added in ccs_engine_wa_mode().”h]”hXúWorkarounds for registers specific to RCS and CCS should be implemented in rcs_engine_wa_init() and ccs_engine_wa_init(), respectively; those for registers belonging to BCS, VCS or VECS should be implemented in xcs_engine_wa_init(). Workarounds for registers not belonging to a specific engine’s MMIO range but that are part of of the common RCS/CCS reset domain should be implemented in general_render_compute_wa_init(). The settings about the CCS load balancing should be added in ccs_engine_wa_mode().”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´K5hjÞ:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj±:ubjµ:)�”}”(hXGT workarounds: the list of these WAs is applied whenever these registers revert to their default values: on GPU reset, suspend/resume [1]_, etc. GT workarounds should be implemented in the \*_gt_workarounds_init() variants respective to the targeted platforms. ”h]”(hÚ)�”}”(hŒ‘GT workarounds: the list of these WAs is applied whenever these registers revert to their default values: on GPU reset, suspend/resume [1]_, etc.”h]”(hŒ‡GT workarounds: the list of these WAs is applied whenever these registers revert to their default values: on GPU reset, suspend/resume ”…”�”}”(hj;h²hh³Nh´NubhŒfootnote_reference”“”)�”}”(hŒ[1]_”h]”hŒ1”…”�”}”(hj&;h²hh³Nh´Nubah}”(h]”Œid1”ah ]”h"]”h$]”h&]”hÁŒid2”Œdocname”juh1j$;hj;Œresolved”KubhŒ, etc.”…”�”}”(hj;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´K=hj;ubhÚ)�”}”(hŒsGT workarounds should be implemented in the \*_gt_workarounds_init() variants respective to the targeted platforms.”h]”hŒsGT workarounds should be implemented in the *_gt_workarounds_init() variants respective to the targeted platforms.”…”�”}”(hjC;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´K@hj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj±:ubjµ:)�”}”(hXÖRegister whitelist: some workarounds need to be implemented in userspace, but need to touch privileged registers. The whitelist in the kernel instructs the hardware to allow the access to happen. From the kernel side, this is just a special case of a MMIO workaround (as we write the list of these to/be-whitelisted registers to some special HW registers). Register whitelisting should be done in the \*_whitelist_build() variants respective to the targeted platforms. ”h]”(hÚ)�”}”(hXdRegister whitelist: some workarounds need to be implemented in userspace, but need to touch privileged registers. The whitelist in the kernel instructs the hardware to allow the access to happen. From the kernel side, this is just a special case of a MMIO workaround (as we write the list of these to/be-whitelisted registers to some special HW registers).”h]”hXdRegister whitelist: some workarounds need to be implemented in userspace, but need to touch privileged registers. The whitelist in the kernel instructs the hardware to allow the access to happen. From the kernel side, this is just a special case of a MMIO workaround (as we write the list of these to/be-whitelisted registers to some special HW registers).”…”�”}”(hj\;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´KChjX;ubhÚ)�”}”(hŒoRegister whitelisting should be done in the \*_whitelist_build() variants respective to the targeted platforms.”h]”hŒoRegister whitelisting should be done in the *_whitelist_build() variants respective to the targeted platforms.”…”�”}”(hjk;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´KIhjX;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj±:ubjµ:)�”}”(hX`Workaround batchbuffers: buffers that get executed automatically by the hardware on every HW context restore. These buffers are created and programmed in the default context so the hardware always go through those programming sequences when switching contexts. The support for workaround batchbuffers is enabled these hardware mechanisms: #. INDIRECT_CTX: A batchbuffer and an offset are provided in the default context, pointing the hardware to jump to that location when that offset is reached in the context restore. Workaround batchbuffer in the driver currently uses this mechanism for all platforms. #. BB_PER_CTX_PTR: A batchbuffer is provided in the default context, pointing the hardware to a buffer to continue executing after the engine registers are restored in a context restore sequence. This is currently not used in the driver. ”h]”(hÚ)�”}”(hXRWorkaround batchbuffers: buffers that get executed automatically by the hardware on every HW context restore. These buffers are created and programmed in the default context so the hardware always go through those programming sequences when switching contexts. The support for workaround batchbuffers is enabled these hardware mechanisms:”h]”hXRWorkaround batchbuffers: buffers that get executed automatically by the hardware on every HW context restore. These buffers are created and programmed in the default context so the hardware always go through those programming sequences when switching contexts. The support for workaround batchbuffers is enabled these hardware mechanisms:”…”�”}”(hj„;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´KLhj€;ubhŒenumerated_list”“”)�”}”(hhh]”(jµ:)�”}”(hXINDIRECT_CTX: A batchbuffer and an offset are provided in the default context, pointing the hardware to jump to that location when that offset is reached in the context restore. Workaround batchbuffer in the driver currently uses this mechanism for all platforms. ”h]”hÚ)�”}”(hXINDIRECT_CTX: A batchbuffer and an offset are provided in the default context, pointing the hardware to jump to that location when that offset is reached in the context restore. Workaround batchbuffer in the driver currently uses this mechanism for all platforms.”h]”hXINDIRECT_CTX: A batchbuffer and an offset are provided in the default context, pointing the hardware to jump to that location when that offset is reached in the context restore. Workaround batchbuffer in the driver currently uses this mechanism for all platforms.”…”�”}”(hjœ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´KRhj˜;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj•;ubjµ:)�”}”(hŒëBB_PER_CTX_PTR: A batchbuffer is provided in the default context, pointing the hardware to a buffer to continue executing after the engine registers are restored in a context restore sequence. This is currently not used in the driver. ”h]”hÚ)�”}”(hŒêBB_PER_CTX_PTR: A batchbuffer is provided in the default context, pointing the hardware to a buffer to continue executing after the engine registers are restored in a context restore sequence. This is currently not used in the driver.”h]”hŒêBB_PER_CTX_PTR: A batchbuffer is provided in the default context, pointing the hardware to a buffer to continue executing after the engine registers are restored in a context restore sequence. This is currently not used in the driver.”…”�”}”(hjµ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´KWhj±;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj•;ubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j“;hj€;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj±:ubjµ:)�”}”(hŒÐOther: There are WAs that, due to their nature, cannot be applied from a central place. Those are peppered around the rest of the code, as needed. Workarounds related to the display IP are the main example. ”h]”hÚ)�”}”(hŒÏOther: There are WAs that, due to their nature, cannot be applied from a central place. Those are peppered around the rest of the code, as needed. Workarounds related to the display IP are the main example.”h]”hŒÏOther: There are WAs that, due to their nature, cannot be applied from a central place. Those are peppered around the rest of the code, as needed. Workarounds related to the display IP are the main example.”…”�”}”(hjß;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´K\hjÛ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj±:ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j¯:h³jÈ:h´Khj�:h²hubhŒfootnote”“”)�”}”(hŒÕTechnically, some registers are powercontext saved & restored, so they survive a suspend/resume. In practice, writing them again is not too costly and simplifies things, so it's the approach taken in the driver. ”h]”(hŒlabel”“”)�”}”(hŒ1”h]”hŒ1”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjþ;ubhÚ)�”}”(hŒÓTechnically, some registers are powercontext saved & restored, so they survive a suspend/resume. In practice, writing them again is not too costly and simplifies things, so it's the approach taken in the driver.”h]”hŒÕTechnically, some registers are powercontext saved & restored, so they survive a suspend/resume. In practice, writing them again is not too costly and simplifies things, so it’s the approach taken in the driver.”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:70: ./drivers/gpu/drm/i915/gt/intel_workarounds.c”h´K`hjþ;ubeh}”(h]”j5;ah ]”h"]”Œ1”ah$]”h&]”j0;aj6;juh1jü;h³j <h´K`hj�:h²hj7;Kubeh}”(h]”Œ workarounds”ah ]”h"]”Œ workarounds”ah$]”h&]”uh1hÄhjhh²hh³hÃh´KDubeh}”(h]”Œcore-driver-infrastructure”ah ]”h"]”Œcore driver infrastructure”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´KubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒGT Programming”h]”hŒGT Programming”…”�”}”(hj;<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj8<h²hh³hÃh´KJubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ$Multicast/Replicated (MCR) Registers”h]”hŒ$Multicast/Replicated (MCR) Registers”…”�”}”(hjL<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjI<h²hh³hÃh´KMubhÚ)�”}”(hXwSome GT registers are designed as "multicast" or "replicated" registers: multiple instances of the same register share a single MMIO offset. MCR registers are generally used when the hardware needs to potentially track independent values of a register per hardware unit (e.g., per-subslice, per-L3bank, etc.). The specific types of replication that exist vary per-platform.”h]”hXSome GT registers are designed as “multicastâ€� or “replicatedâ€� registers: multiple instances of the same register share a single MMIO offset. MCR registers are generally used when the hardware needs to potentially track independent values of a register per hardware unit (e.g., per-subslice, per-L3bank, etc.). The specific types of replication that exist vary per-platform.”…”�”}”(hjZ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:79: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´KhjI<h²hubhÚ)�”}”(hXMMIO accesses to MCR registers are controlled according to the settings programmed in the platform's MCR_SELECTOR register(s). MMIO writes to MCR registers can be done in either a (i.e., a single write updates all instances of the register to the same value) or unicast (a write updates only one specific instance). Reads of MCR registers always operate in a unicast manner regardless of how the multicast/unicast bit is set in MCR_SELECTOR. Selection of a specific MCR instance for unicast operations is referred to as "steering."”h]”hXMMIO accesses to MCR registers are controlled according to the settings programmed in the platform’s MCR_SELECTOR register(s). MMIO writes to MCR registers can be done in either a (i.e., a single write updates all instances of the register to the same value) or unicast (a write updates only one specific instance). Reads of MCR registers always operate in a unicast manner regardless of how the multicast/unicast bit is set in MCR_SELECTOR. Selection of a specific MCR instance for unicast operations is referred to as “steering.â€�”…”�”}”(hji<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:79: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´KhjI<h²hubhÚ)�”}”(hX,If MCR register operations are steered toward a hardware unit that is fused off or currently powered down due to power gating, the MMIO operation is "terminated" by the hardware. Terminated read operations will return a value of zero and terminated unicast write operations will be silently ignored.”h]”hX0If MCR register operations are steered toward a hardware unit that is fused off or currently powered down due to power gating, the MMIO operation is “terminatedâ€� by the hardware. Terminated read operations will return a value of zero and terminated unicast write operations will be silently ignored.”…”�”}”(hjx<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:79: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´KhjI<h²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒintel_gt_mcr_lock (C function)”Œc.intel_gt_mcr_lock”hNt”auh1j¶hjI<h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒBvoid intel_gt_mcr_lock (struct intel_gt *gt, unsigned long *flags)”h]”jÓ)�”}”(hŒAvoid intel_gt_mcr_lock(struct intel_gt *gt, unsigned long *flags)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj <h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjœ<h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M:ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjœ<h²hh³j®<h´M:ubj)�”}”(hŒintel_gt_mcr_lock”h]”jÜ)�”}”(hŒintel_gt_mcr_lock”h]”hŒintel_gt_mcr_lock”…”�”}”(hjÁ<h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj½<ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjœ<h²hh³j®<h´M:ubj8)�”}”(hŒ+(struct intel_gt *gt, unsigned long *flags)”h]”(j>)�”}”(hŒstruct intel_gt *gt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÝ<h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjÙ<ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÙ<ubh)�”}”(hhh]”jÜ)�”}”(hŒintel_gt”h]”hŒintel_gt”…”�”}”(hjû<h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjø<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jý<Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjÃ<sbŒc.intel_gt_mcr_lock”†”asbuh1hhjÙ<ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÙ<ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj)=h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÙ<ubjÜ)�”}”(hŒgt”h]”hŒgt”…”�”}”(hj6=h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÙ<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÕ<ubj>)�”}”(hŒunsigned long *flags”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjO=h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjK=ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjK=ubjn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjk=h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjK=ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjK=ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj‡=h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjK=ubjÜ)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj”=h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjK=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÕ<ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjœ<h²hh³j®<h´M:ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj˜<h²hh³j®<h´M:ubah}”(h]”j“<ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j®<h´M:hj•<h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒAcquire MCR steering lock”h]”hŒAcquire MCR steering lock”…”�”}”(hj¾=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M:hj»=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj•<h²hh³j®<h´M:ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójÖ=jôjÖ=jõ‰jö‰j÷‰uh1jÇh²hhjI<h³Nh´Nubjù)�”}”(hX**Parameters** ``struct intel_gt *gt`` GT structure ``unsigned long *flags`` storage to save IRQ flags to **Description** Performs locking to protect the steering for the duration of an MCR operation. On MTL and beyond, a hardware lock will also be taken to serialize access not only for the driver, but also for external hardware and firmware agents. **Context** Takes gt->mcr_lock. uncore->lock should *not* be held when this function is called, although it may be acquired after this function call.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjà=h]”hŒ Parameters”…”�”}”(hjâ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M>hjÚ=ubj)�”}”(hhh]”(j)�”}”(hŒ%``struct intel_gt *gt`` GT structure ”h]”(j$)�”}”(hŒ``struct intel_gt *gt``”h]”j*)�”}”(hjÿ=h]”hŒstruct intel_gt *gt”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjý=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M;hjù=ubj@)�”}”(hhh]”hÚ)�”}”(hŒ GT structure”h]”hŒ GT structure”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j>h´M;hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjù=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j>h´M;hjö=ubj)�”}”(hŒ6``unsigned long *flags`` storage to save IRQ flags to ”h]”(j$)�”}”(hŒ``unsigned long *flags``”h]”j*)�”}”(hj8>h]”hŒunsigned long *flags”…”�”}”(hj:>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj6>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M<hj2>ubj@)�”}”(hhh]”hÚ)�”}”(hŒstorage to save IRQ flags to”h]”hŒstorage to save IRQ flags to”…”�”}”(hjQ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jM>h´M<hjN>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj2>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jM>h´M<hjö=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚ=ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjs>h]”hŒ Description”…”�”}”(hju>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjq>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M>hjÚ=ubhÚ)�”}”(hŒæPerforms locking to protect the steering for the duration of an MCR operation. On MTL and beyond, a hardware lock will also be taken to serialize access not only for the driver, but also for external hardware and firmware agents.”h]”hŒæPerforms locking to protect the steering for the duration of an MCR operation. On MTL and beyond, a hardware lock will also be taken to serialize access not only for the driver, but also for external hardware and firmware agents.”…”�”}”(hj‰>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M=hjÚ=ubhÚ)�”}”(hŒ **Context**”h]”j)�”}”(hjš>h]”hŒContext”…”�”}”(hjœ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj˜>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MBhjÚ=ubhÚ)�”}”(hŒŠTakes gt->mcr_lock. uncore->lock should *not* be held when this function is called, although it may be acquired after this function call.”h]”(hŒ)Takes gt->mcr_lock. uncore->lock should ”…”�”}”(hj°>h²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hjº>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¸>hj°>ubhŒ\ be held when this function is called, although it may be acquired after this function call.”…”�”}”(hj°>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MChjÚ=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjI<h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ intel_gt_mcr_unlock (C function)”Œc.intel_gt_mcr_unlock”hNt”auh1j¶hjI<h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒCvoid intel_gt_mcr_unlock (struct intel_gt *gt, unsigned long flags)”h]”jÓ)�”}”(hŒBvoid intel_gt_mcr_unlock(struct intel_gt *gt, unsigned long flags)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjó>h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjï>h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M~ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjï>h²hh³j?h´M~ubj)�”}”(hŒintel_gt_mcr_unlock”h]”jÜ)�”}”(hŒintel_gt_mcr_unlock”h]”hŒintel_gt_mcr_unlock”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj?ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjï>h²hh³j?h´M~ubj8)�”}”(hŒ*(struct intel_gt *gt, unsigned long flags)”h]”(j>)�”}”(hŒstruct intel_gt *gt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj0?h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj,?ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj,?ubh)�”}”(hhh]”jÜ)�”}”(hŒintel_gt”h]”hŒintel_gt”…”�”}”(hjN?h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjK?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jP?Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj?sbŒc.intel_gt_mcr_unlock”†”asbuh1hhj,?ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj,?ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj|?h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj,?ubjÜ)�”}”(hŒgt”h]”hŒgt”…”�”}”(hj‰?h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj,?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj(?ubj>)�”}”(hŒunsigned long flags”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¢?h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjž?ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjž?ubjn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¾?h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjž?ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjž?ubjÜ)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjÚ?h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjž?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj(?ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjï>h²hh³j?h´M~ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjë>h²hh³j?h´M~ubah}”(h]”jæ>ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j?h´M~hjè>h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒRelease MCR steering lock”h]”hŒRelease MCR steering lock”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M~hj@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjè>h²hh³j?h´M~ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój@jôj@jõ‰jö‰j÷‰uh1jÇh²hhjI<h³Nh´Nubjù)�”}”(hŒÏ**Parameters** ``struct intel_gt *gt`` GT structure ``unsigned long flags`` IRQ flags to restore **Description** Releases the lock acquired by intel_gt_mcr_lock(). **Context** Releases gt->mcr_lock”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj&@h]”hŒ Parameters”…”�”}”(hj(@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M‚hj @ubj)�”}”(hhh]”(j)�”}”(hŒ%``struct intel_gt *gt`` GT structure ”h]”(j$)�”}”(hŒ``struct intel_gt *gt``”h]”j*)�”}”(hjE@h]”hŒstruct intel_gt *gt”…”�”}”(hjG@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjC@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mhj?@ubj@)�”}”(hhh]”hÚ)�”}”(hŒ GT structure”h]”hŒ GT structure”…”�”}”(hj^@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jZ@h´Mhj[@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj?@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jZ@h´Mhj<@ubj)�”}”(hŒ-``unsigned long flags`` IRQ flags to restore ”h]”(j$)�”}”(hŒ``unsigned long flags``”h]”j*)�”}”(hj~@h]”hŒunsigned long flags”…”�”}”(hj€@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj|@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M€hjx@ubj@)�”}”(hhh]”hÚ)�”}”(hŒIRQ flags to restore”h]”hŒIRQ flags to restore”…”�”}”(hj—@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j“@h´M€hj”@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjx@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j“@h´M€hj<@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj @ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj¹@h]”hŒ Description”…”�”}”(hj»@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M‚hj @ubhÚ)�”}”(hŒ2Releases the lock acquired by intel_gt_mcr_lock().”h]”hŒ2Releases the lock acquired by intel_gt_mcr_lock().”…”�”}”(hjÏ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M�hj @ubhÚ)�”}”(hŒ **Context**”h]”j)�”}”(hjà@h]”hŒContext”…”�”}”(hjâ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mƒhj @ubhÚ)�”}”(hŒReleases gt->mcr_lock”h]”hŒReleases gt->mcr_lock”…”�”}”(hjö@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M„hj @ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjI<h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ'intel_gt_mcr_lock_sanitize (C function)”Œc.intel_gt_mcr_lock_sanitize”hNt”auh1j¶hjI<h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ5void intel_gt_mcr_lock_sanitize (struct intel_gt *gt)”h]”jÓ)�”}”(hŒ4void intel_gt_mcr_lock_sanitize(struct intel_gt *gt)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj%Ah²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj!Ah²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M“ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4Ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj!Ah²hh³j3Ah´M“ubj)�”}”(hŒintel_gt_mcr_lock_sanitize”h]”jÜ)�”}”(hŒintel_gt_mcr_lock_sanitize”h]”hŒintel_gt_mcr_lock_sanitize”…”�”}”(hjFAh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjBAubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj!Ah²hh³j3Ah´M“ubj8)�”}”(hŒ(struct intel_gt *gt)”h]”j>)�”}”(hŒstruct intel_gt *gt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjbAh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj^Aubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj^Aubh)�”}”(hhh]”jÜ)�”}”(hŒintel_gt”h]”hŒintel_gt”…”�”}”(hj€Ah²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj}Aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j‚AŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjHAsbŒc.intel_gt_mcr_lock_sanitize”†”asbuh1hhj^Aubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj^Aubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj®Ah²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj^AubjÜ)�”}”(hŒgt”h]”hŒgt”…”�”}”(hj»Ah²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj^Aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjZAubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj!Ah²hh³j3Ah´M“ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjAh²hh³j3Ah´M“ubah}”(h]”jAah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j3Ah´M“hjAh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒSanitize MCR steering lock”h]”hŒSanitize MCR steering lock”…”�”}”(hjåAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M“hjâAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjAh²hh³j3Ah´M“ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójýAjôjýAjõ‰jö‰j÷‰uh1jÇh²hhjI<h³Nh´Nubjù)�”}”(hXE**Parameters** ``struct intel_gt *gt`` GT structure **Description** This will be used to sanitize the initial status of the hardware lock during driver load and resume since there won't be any concurrent access from other agents at those times, but it's possible that boot firmware may have left the lock in a bad state.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjBh]”hŒ Parameters”…”�”}”(hj Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M—hjBubj)�”}”(hhh]”j)�”}”(hŒ%``struct intel_gt *gt`` GT structure ”h]”(j$)�”}”(hŒ``struct intel_gt *gt``”h]”j*)�”}”(hj&Bh]”hŒstruct intel_gt *gt”…”�”}”(hj(Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj$Bubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M”hj Bubj@)�”}”(hhh]”hÚ)�”}”(hŒ GT structure”h]”hŒ GT structure”…”�”}”(hj?Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j;Bh´M”hj)�”}”(hŒstruct intel_gt *gt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjøBh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjôBubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjôBubh)�”}”(hhh]”jÜ)�”}”(hŒintel_gt”h]”hŒintel_gt”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jCŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jÅBŒc.intel_gt_mcr_read”†”asbuh1hhjôBubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjôBubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjBCh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjôBubjÜ)�”}”(hŒgt”h]”hŒgt”…”�”}”(hjOCh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjôBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjðBubj>)�”}”(hŒi915_mcr_reg_t reg”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒi915_mcr_reg_t”h]”hŒi915_mcr_reg_t”…”�”}”(hjkCh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjhCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jmCŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jÅBŒc.intel_gt_mcr_read”†”asbuh1hhjdCubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjdCubjÜ)�”}”(hŒreg”h]”hŒreg”…”�”}”(hj—Ch²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjdCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjðBubj>)�”}”(hŒ int group”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj°Ch²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj¬Cubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¬CubjÜ)�”}”(hŒgroup”h]”hŒgroup”…”�”}”(hjÌCh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¬Cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjðBubj>)�”}”(hŒ int instance”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjåCh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjáCubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjáCubjÜ)�”}”(hŒinstance”h]”hŒinstance”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjáCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjðBubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj¢Bh²hh³jÊBh´M©ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjžBh²hh³jÊBh´M©ubah}”(h]”j™Bah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÊBh´M©hj›Bh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ+read a specific instance of an MCR register”h]”hŒ+read a specific instance of an MCR register”…”�”}”(hj+Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M©hj(Dh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj›Bh²hh³jÊBh´M©ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójCDjôjCDjõ‰jö‰j÷‰uh1jÇh²hhjI<h³Nh´Nubjù)�”}”(hXJ**Parameters** ``struct intel_gt *gt`` GT structure ``i915_mcr_reg_t reg`` the MCR register to read ``int group`` the MCR group ``int instance`` the MCR instance **Context** Takes and releases gt->mcr_lock **Description** Returns the value read from an MCR register after steering toward a specific group/instance.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjMDh]”hŒ Parameters”…”�”}”(hjODh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKDubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M­hjGDubj)�”}”(hhh]”(j)�”}”(hŒ%``struct intel_gt *gt`` GT structure ”h]”(j$)�”}”(hŒ``struct intel_gt *gt``”h]”j*)�”}”(hjlDh]”hŒstruct intel_gt *gt”…”�”}”(hjnDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MªhjfDubj@)�”}”(hhh]”hÚ)�”}”(hŒ GT structure”h]”hŒ GT structure”…”�”}”(hj…Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j�Dh´Mªhj‚Dubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjfDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�Dh´MªhjcDubj)�”}”(hŒ0``i915_mcr_reg_t reg`` the MCR register to read ”h]”(j$)�”}”(hŒ``i915_mcr_reg_t reg``”h]”j*)�”}”(hj¥Dh]”hŒi915_mcr_reg_t reg”…”�”}”(hj§Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj£Dubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M«hjŸDubj@)�”}”(hhh]”hÚ)�”}”(hŒthe MCR register to read”h]”hŒthe MCR register to read”…”�”}”(hj¾Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jºDh´M«hj»Dubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjŸDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jºDh´M«hjcDubj)�”}”(hŒ``int group`` the MCR group ”h]”(j$)�”}”(hŒ ``int group``”h]”j*)�”}”(hjÞDh]”hŒ int group”…”�”}”(hjàDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÜDubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M¬hjØDubj@)�”}”(hhh]”hÚ)�”}”(hŒ the MCR group”h]”hŒ the MCR group”…”�”}”(hj÷Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jóDh´M¬hjôDubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjØDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jóDh´M¬hjcDubj)�”}”(hŒ"``int instance`` the MCR instance ”h]”(j$)�”}”(hŒ``int instance``”h]”j*)�”}”(hjEh]”hŒ int instance”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M­hjEubj@)�”}”(hhh]”hÚ)�”}”(hŒthe MCR instance”h]”hŒthe MCR instance”…”�”}”(hj0Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j,Eh´M­hj-Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,Eh´M­hjcDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjGDubhÚ)�”}”(hŒ **Context**”h]”j)�”}”(hjREh]”hŒContext”…”�”}”(hjTEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPEubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M¯hjGDubhÚ)�”}”(hŒTakes and releases gt->mcr_lock”h]”hŒTakes and releases gt->mcr_lock”…”�”}”(hjhEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M¯hjGDubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjyEh]”hŒ Description”…”�”}”(hj{Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjwEubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M±hjGDubhÚ)�”}”(hŒ\Returns the value read from an MCR register after steering toward a specific group/instance.”h]”hŒ\Returns the value read from an MCR register after steering toward a specific group/instance.”…”�”}”(hj�Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M°hjGDubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjI<h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ'intel_gt_mcr_unicast_write (C function)”Œc.intel_gt_mcr_unicast_write”hNt”auh1j¶hjI<h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒmvoid intel_gt_mcr_unicast_write (struct intel_gt *gt, i915_mcr_reg_t reg, u32 value, int group, int instance)”h]”jÓ)�”}”(hŒlvoid intel_gt_mcr_unicast_write(struct intel_gt *gt, i915_mcr_reg_t reg, u32 value, int group, int instance)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¾Eh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjºEh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M¼ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjºEh²hh³jÌEh´M¼ubj)�”}”(hŒintel_gt_mcr_unicast_write”h]”jÜ)�”}”(hŒintel_gt_mcr_unicast_write”h]”hŒintel_gt_mcr_unicast_write”…”�”}”(hjßEh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÛEubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjºEh²hh³jÌEh´M¼ubj8)�”}”(hŒM(struct intel_gt *gt, i915_mcr_reg_t reg, u32 value, int group, int instance)”h]”(j>)�”}”(hŒstruct intel_gt *gt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjûEh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj÷Eubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj÷Eubh)�”}”(hhh]”jÜ)�”}”(hŒintel_gt”h]”hŒintel_gt”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jFŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjáEsbŒc.intel_gt_mcr_unicast_write”†”asbuh1hhj÷Eubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj÷Eubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjGFh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj÷EubjÜ)�”}”(hŒgt”h]”hŒgt”…”�”}”(hjTFh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj÷Eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjóEubj>)�”}”(hŒi915_mcr_reg_t reg”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒi915_mcr_reg_t”h]”hŒi915_mcr_reg_t”…”�”}”(hjpFh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjmFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jrFŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j5FŒc.intel_gt_mcr_unicast_write”†”asbuh1hhjiFubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjiFubjÜ)�”}”(hŒreg”h]”hŒreg”…”�”}”(hjœFh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjiFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjóEubj>)�”}”(hŒ u32 value”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj¸Fh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjµFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jºFŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j5FŒc.intel_gt_mcr_unicast_write”†”asbuh1hhj±Fubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj±FubjÜ)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hjäFh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj±Fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjóEubj>)�”}”(hŒ int group”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjýFh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjùFubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjùFubjÜ)�”}”(hŒgroup”h]”hŒgroup”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjùFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjóEubj>)�”}”(hŒ int instance”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj2Gh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj.Gubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@Gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj.GubjÜ)�”}”(hŒinstance”h]”hŒinstance”…”�”}”(hjNGh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj.Gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjóEubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjºEh²hh³jÌEh´M¼ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj¶Eh²hh³jÌEh´M¼ubah}”(h]”j±Eah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÌEh´M¼hj³Eh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ,write a specific instance of an MCR register”h]”hŒ,write a specific instance of an MCR register”…”�”}”(hjxGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M¼hjuGh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj³Eh²hh³jÌEh´M¼ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój�Gjôj�Gjõ‰jö‰j÷‰uh1jÇh²hhjI<h³Nh´Nubjù)�”}”(hX{**Parameters** ``struct intel_gt *gt`` GT structure ``i915_mcr_reg_t reg`` the MCR register to write ``u32 value`` value to write ``int group`` the MCR group ``int instance`` the MCR instance **Description** Write an MCR register in unicast mode after steering toward a specific group/instance. **Context** Calls a function that takes and releases gt->mcr_lock”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjšGh]”hŒ Parameters”…”�”}”(hjœGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj˜Gubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÀhj”Gubj)�”}”(hhh]”(j)�”}”(hŒ%``struct intel_gt *gt`` GT structure ”h]”(j$)�”}”(hŒ``struct intel_gt *gt``”h]”j*)�”}”(hj¹Gh]”hŒstruct intel_gt *gt”…”�”}”(hj»Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj·Gubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M½hj³Gubj@)�”}”(hhh]”hÚ)�”}”(hŒ GT structure”h]”hŒ GT structure”…”�”}”(hjÒGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÎGh´M½hjÏGubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj³Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÎGh´M½hj°Gubj)�”}”(hŒ1``i915_mcr_reg_t reg`` the MCR register to write ”h]”(j$)�”}”(hŒ``i915_mcr_reg_t reg``”h]”j*)�”}”(hjòGh]”hŒi915_mcr_reg_t reg”…”�”}”(hjôGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjðGubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M¾hjìGubj@)�”}”(hhh]”hÚ)�”}”(hŒthe MCR register to write”h]”hŒthe MCR register to write”…”�”}”(hj Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jHh´M¾hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjìGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jHh´M¾hj°Gubj)�”}”(hŒ``u32 value`` value to write ”h]”(j$)�”}”(hŒ ``u32 value``”h]”j*)�”}”(hj+Hh]”hŒ u32 value”…”�”}”(hj-Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj)Hubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M¿hj%Hubj@)�”}”(hhh]”hÚ)�”}”(hŒvalue to write”h]”hŒvalue to write”…”�”}”(hjDHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j@Hh´M¿hjAHubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj%Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@Hh´M¿hj°Gubj)�”}”(hŒ``int group`` the MCR group ”h]”(j$)�”}”(hŒ ``int group``”h]”j*)�”}”(hjdHh]”hŒ int group”…”�”}”(hjfHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjbHubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÀhj^Hubj@)�”}”(hhh]”hÚ)�”}”(hŒ the MCR group”h]”hŒ the MCR group”…”�”}”(hj}Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jyHh´MÀhjzHubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj^Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jyHh´MÀhj°Gubj)�”}”(hŒ"``int instance`` the MCR instance ”h]”(j$)�”}”(hŒ``int instance``”h]”j*)�”}”(hj�Hh]”hŒ int instance”…”�”}”(hjŸHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj›Hubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÁhj—Hubj@)�”}”(hhh]”hÚ)�”}”(hŒthe MCR instance”h]”hŒthe MCR instance”…”�”}”(hj¶Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j²Hh´MÁhj³Hubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj—Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j²Hh´MÁhj°Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj”GubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjØHh]”hŒ Description”…”�”}”(hjÚHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖHubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÃhj”GubhÚ)�”}”(hŒVWrite an MCR register in unicast mode after steering toward a specific group/instance.”h]”hŒVWrite an MCR register in unicast mode after steering toward a specific group/instance.”…”�”}”(hjîHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÂhj”GubhÚ)�”}”(hŒ **Context**”h]”j)�”}”(hjÿHh]”hŒContext”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýHubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÅhj”GubhÚ)�”}”(hŒ5Calls a function that takes and releases gt->mcr_lock”h]”hŒ5Calls a function that takes and releases gt->mcr_lock”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÆhj”Gubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjI<h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ)intel_gt_mcr_multicast_write (C function)”Œc.intel_gt_mcr_multicast_write”hNt”auh1j¶hjI<h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒVvoid intel_gt_mcr_multicast_write (struct intel_gt *gt, i915_mcr_reg_t reg, u32 value)”h]”jÓ)�”}”(hŒUvoid intel_gt_mcr_multicast_write(struct intel_gt *gt, i915_mcr_reg_t reg, u32 value)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjDIh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj@Ih²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÏubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj@Ih²hh³jRIh´MÏubj)�”}”(hŒintel_gt_mcr_multicast_write”h]”jÜ)�”}”(hŒintel_gt_mcr_multicast_write”h]”hŒintel_gt_mcr_multicast_write”…”�”}”(hjeIh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjaIubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj@Ih²hh³jRIh´MÏubj8)�”}”(hŒ4(struct intel_gt *gt, i915_mcr_reg_t reg, u32 value)”h]”(j>)�”}”(hŒstruct intel_gt *gt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj�Ih²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj}Iubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj}Iubh)�”}”(hhh]”jÜ)�”}”(hŒintel_gt”h]”hŒintel_gt”…”�”}”(hjŸIh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjœIubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j¡IŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjgIsbŒc.intel_gt_mcr_multicast_write”†”asbuh1hhj}Iubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿Ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj}Iubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÍIh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj}IubjÜ)�”}”(hŒgt”h]”hŒgt”…”�”}”(hjÚIh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj}Iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjyIubj>)�”}”(hŒi915_mcr_reg_t reg”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒi915_mcr_reg_t”h]”hŒi915_mcr_reg_t”…”�”}”(hjöIh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjóIubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jøIŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j»IŒc.intel_gt_mcr_multicast_write”†”asbuh1hhjïIubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjïIubjÜ)�”}”(hŒreg”h]”hŒreg”…”�”}”(hj"Jh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjïIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjyIubj>)�”}”(hŒ u32 value”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj>Jh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj;Jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j@JŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j»IŒc.intel_gt_mcr_multicast_write”†”asbuh1hhj7Jubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\Jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj7JubjÜ)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hjjJh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj7Jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjyIubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj@Ih²hh³jRIh´MÏubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjmcr_lock”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¶Jh]”hŒ Parameters”…”�”}”(hj¸Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´Jubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”•h´MÓhj°Jubj)�”}”(hhh]”(j)�”}”(hŒ%``struct intel_gt *gt`` GT structure ”h]”(j$)�”}”(hŒ``struct intel_gt *gt``”h]”j*)�”}”(hjÕJh]”hŒstruct intel_gt *gt”…”�”}”(hj×Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÓJubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÐhjÏJubj@)�”}”(hhh]”hÚ)�”}”(hŒ GT structure”h]”hŒ GT structure”…”�”}”(hjîJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jêJh´MÐhjëJubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÏJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêJh´MÐhjÌJubj)�”}”(hŒ1``i915_mcr_reg_t reg`` the MCR register to write ”h]”(j$)�”}”(hŒ``i915_mcr_reg_t reg``”h]”j*)�”}”(hjKh]”hŒi915_mcr_reg_t reg”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÑhjKubj@)�”}”(hhh]”hÚ)�”}”(hŒthe MCR register to write”h]”hŒthe MCR register to write”…”�”}”(hj'Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j#Kh´MÑhj$Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j#Kh´MÑhjÌJubj)�”}”(hŒ``u32 value`` value to write ”h]”(j$)�”}”(hŒ ``u32 value``”h]”j*)�”}”(hjGKh]”hŒ u32 value”…”�”}”(hjIKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjEKubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÒhjAKubj@)�”}”(hhh]”hÚ)�”}”(hŒvalue to write”h]”hŒvalue to write”…”�”}”(hj`Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j\Kh´MÒhj]Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjAKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j\Kh´MÒhjÌJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj°JubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj‚Kh]”hŒ Description”…”�”}”(hj„Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€Kubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÔhj°JubhÚ)�”}”(hŒ@Write an MCR register in multicast mode to update all instances.”h]”hŒ@Write an MCR register in multicast mode to update all instances.”…”�”}”(hj˜Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÓhj°JubhÚ)�”}”(hŒ **Context**”h]”j)�”}”(hj©Kh]”hŒContext”…”�”}”(hj«Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§Kubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÕhj°JubhÚ)�”}”(hŒTakes and releases gt->mcr_lock”h]”hŒTakes and releases gt->mcr_lock”…”�”}”(hj¿Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÖhj°Jubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjI<h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ,intel_gt_mcr_multicast_write_fw (C function)”Œ!c.intel_gt_mcr_multicast_write_fw”hNt”auh1j¶hjI<h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒYvoid intel_gt_mcr_multicast_write_fw (struct intel_gt *gt, i915_mcr_reg_t reg, u32 value)”h]”jÓ)�”}”(hŒXvoid intel_gt_mcr_multicast_write_fw(struct intel_gt *gt, i915_mcr_reg_t reg, u32 value)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjîKh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjêKh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mìubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjêKh²hh³jüKh´Mìubj)�”}”(hŒintel_gt_mcr_multicast_write_fw”h]”jÜ)�”}”(hŒintel_gt_mcr_multicast_write_fw”h]”hŒintel_gt_mcr_multicast_write_fw”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj Lubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjêKh²hh³jüKh´Mìubj8)�”}”(hŒ4(struct intel_gt *gt, i915_mcr_reg_t reg, u32 value)”h]”(j>)�”}”(hŒstruct intel_gt *gt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj+Lh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj'Lubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj'Lubh)�”}”(hhh]”jÜ)�”}”(hŒintel_gt”h]”hŒintel_gt”…”�”}”(hjILh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjFLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jKLŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjLsbŒ!c.intel_gt_mcr_multicast_write_fw”†”asbuh1hhj'Lubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj'Lubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjwLh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj'LubjÜ)�”}”(hŒgt”h]”hŒgt”…”�”}”(hj„Lh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj'Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj#Lubj>)�”}”(hŒi915_mcr_reg_t reg”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒi915_mcr_reg_t”h]”hŒi915_mcr_reg_t”…”�”}”(hj Lh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�Lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j¢LŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jeLŒ!c.intel_gt_mcr_multicast_write_fw”†”asbuh1hhj™Lubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj™LubjÜ)�”}”(hŒreg”h]”hŒreg”…”�”}”(hjÌLh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj™Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj#Lubj>)�”}”(hŒ u32 value”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjèLh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjåLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jêLŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jeLŒ!c.intel_gt_mcr_multicast_write_fw”†”asbuh1hhjáLubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjáLubjÜ)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjáLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj#Lubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjêKh²hh³jüKh´Mìubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjæKh²hh³jüKh´Mìubah}”(h]”jáKah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jüKh´MìhjãKh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ1write a value to all instances of an MCR register”h]”hŒ1write a value to all instances of an MCR register”…”�”}”(hj>Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mìhj;Mh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjãKh²hh³jüKh´Mìubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójVMjôjVMjõ‰jö‰j÷‰uh1jÇh²hhjI<h³Nh´Nubjù)�”}”(hXÂ**Parameters** ``struct intel_gt *gt`` GT structure ``i915_mcr_reg_t reg`` the MCR register to write ``u32 value`` value to write **Description** Write an MCR register in multicast mode to update all instances. This function assumes the caller is already holding any necessary forcewake domains; use intel_gt_mcr_multicast_write() in cases where forcewake should be obtained automatically. **Context** The caller must hold gt->mcr_lock.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj`Mh]”hŒ Parameters”…”�”}”(hjbMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^Mubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MðhjZMubj)�”}”(hhh]”(j)�”}”(hŒ%``struct intel_gt *gt`` GT structure ”h]”(j$)�”}”(hŒ``struct intel_gt *gt``”h]”j*)�”}”(hjMh]”hŒstruct intel_gt *gt”…”�”}”(hj�Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj}Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MíhjyMubj@)�”}”(hhh]”hÚ)�”}”(hŒ GT structure”h]”hŒ GT structure”…”�”}”(hj˜Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j”Mh´Míhj•Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjyMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j”Mh´MíhjvMubj)�”}”(hŒ1``i915_mcr_reg_t reg`` the MCR register to write ”h]”(j$)�”}”(hŒ``i915_mcr_reg_t reg``”h]”j*)�”}”(hj¸Mh]”hŒi915_mcr_reg_t reg”…”�”}”(hjºMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¶Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mîhj²Mubj@)�”}”(hhh]”hÚ)�”}”(hŒthe MCR register to write”h]”hŒthe MCR register to write”…”�”}”(hjÑMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÍMh´MîhjÎMubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj²Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÍMh´MîhjvMubj)�”}”(hŒ``u32 value`` value to write ”h]”(j$)�”}”(hŒ ``u32 value``”h]”j*)�”}”(hjñMh]”hŒ u32 value”…”�”}”(hjóMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjïMubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MïhjëMubj@)�”}”(hhh]”hÚ)�”}”(hŒvalue to write”h]”hŒvalue to write”…”�”}”(hj Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jNh´MïhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjëMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jNh´MïhjvMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjZMubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj,Nh]”hŒ Description”…”�”}”(hj.Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MñhjZMubhÚ)�”}”(hŒôWrite an MCR register in multicast mode to update all instances. This function assumes the caller is already holding any necessary forcewake domains; use intel_gt_mcr_multicast_write() in cases where forcewake should be obtained automatically.”h]”hŒôWrite an MCR register in multicast mode to update all instances. This function assumes the caller is already holding any necessary forcewake domains; use intel_gt_mcr_multicast_write() in cases where forcewake should be obtained automatically.”…”�”}”(hjBNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MðhjZMubhÚ)�”}”(hŒ **Context**”h]”j)�”}”(hjSNh]”hŒContext”…”�”}”(hjUNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQNubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MõhjZMubhÚ)�”}”(hŒ"The caller must hold gt->mcr_lock.”h]”hŒ"The caller must hold gt->mcr_lock.”…”�”}”(hjiNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MöhjZMubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjI<h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ'intel_gt_mcr_multicast_rmw (C function)”Œc.intel_gt_mcr_multicast_rmw”hNt”auh1j¶hjI<h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ\u32 intel_gt_mcr_multicast_rmw (struct intel_gt *gt, i915_mcr_reg_t reg, u32 clear, u32 set)”h]”jÓ)�”}”(hŒ[u32 intel_gt_mcr_multicast_rmw(struct intel_gt *gt, i915_mcr_reg_t reg, u32 clear, u32 set)”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj›Nh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj˜Nubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j�NŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõŒintel_gt_mcr_multicast_rmw”sbŒc.intel_gt_mcr_multicast_rmw”†”asbuh1hhj”Nh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj”Nh²hh³j¼Nh´Mubj)�”}”(hŒintel_gt_mcr_multicast_rmw”h]”jÜ)�”}”(hj¹Nh]”hŒintel_gt_mcr_multicast_rmw”…”�”}”(hjÏNh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjËNubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj”Nh²hh³j¼Nh´Mubj8)�”}”(hŒ=(struct intel_gt *gt, i915_mcr_reg_t reg, u32 clear, u32 set)”h]”(j>)�”}”(hŒstruct intel_gt *gt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjêNh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjæNubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjæNubh)�”}”(hhh]”jÜ)�”}”(hŒintel_gt”h]”hŒintel_gt”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j OŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j·NŒc.intel_gt_mcr_multicast_rmw”†”asbuh1hhjæNubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&Oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjæNubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj4Oh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjæNubjÜ)�”}”(hŒgt”h]”hŒgt”…”�”}”(hjAOh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjæNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjâNubj>)�”}”(hŒi915_mcr_reg_t reg”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒi915_mcr_reg_t”h]”hŒi915_mcr_reg_t”…”�”}”(hj]Oh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjZOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j_OŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j·NŒc.intel_gt_mcr_multicast_rmw”†”asbuh1hhjVOubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{Oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjVOubjÜ)�”}”(hŒreg”h]”hŒreg”…”�”}”(hj‰Oh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjVOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjâNubj>)�”}”(hŒ u32 clear”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj¥Oh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¢Oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j§OŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j·NŒc.intel_gt_mcr_multicast_rmw”†”asbuh1hhjžOubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjžOubjÜ)�”}”(hŒclear”h]”hŒclear”…”�”}”(hjÑOh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjžOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjâNubj>)�”}”(hŒu32 set”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjíOh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjêOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jïOŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j·NŒc.intel_gt_mcr_multicast_rmw”†”asbuh1hhjæOubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjæOubjÜ)�”}”(hŒset”h]”hŒset”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjæOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjâNubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj”Nh²hh³j¼Nh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj�Nh²hh³j¼Nh´Mubah}”(h]”j‹Nah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j¼Nh´Mhj�Nh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ#Performs a multicast RMW operations”h]”hŒ#Performs a multicast RMW operations”…”�”}”(hjCPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mhj@Ph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj�Nh²hh³j¼Nh´Mubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój[Pjôj[Pjõ‰jö‰j÷‰uh1jÇh²hhjI<h³Nh´Nubjù)�”}”(hX**Parameters** ``struct intel_gt *gt`` GT structure ``i915_mcr_reg_t reg`` the MCR register to read and write ``u32 clear`` bits to clear during RMW ``u32 set`` bits to set during RMW **Description** Performs a read-modify-write on an MCR register in a multicast manner. This operation only makes sense on MCR registers where all instances are expected to have the same value. The read will target any non-terminated instance and the write will be applied to all instances. This function assumes the caller is already holding any necessary forcewake domains; use intel_gt_mcr_multicast_rmw() in cases where forcewake should be obtained automatically. Returns the old (unmodified) value read. **Context** Calls functions that take and release gt->mcr_lock”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjePh]”hŒ Parameters”…”�”}”(hjgPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjcPubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M hj_Pubj)�”}”(hhh]”(j)�”}”(hŒ%``struct intel_gt *gt`` GT structure ”h]”(j$)�”}”(hŒ``struct intel_gt *gt``”h]”j*)�”}”(hj„Ph]”hŒstruct intel_gt *gt”…”�”}”(hj†Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj‚Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mhj~Pubj@)�”}”(hhh]”hÚ)�”}”(hŒ GT structure”h]”hŒ GT structure”…”�”}”(hj�Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j™Ph´MhjšPubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj~Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j™Ph´Mhj{Pubj)�”}”(hŒ:``i915_mcr_reg_t reg`` the MCR register to read and write ”h]”(j$)�”}”(hŒ``i915_mcr_reg_t reg``”h]”j*)�”}”(hj½Ph]”hŒi915_mcr_reg_t reg”…”�”}”(hj¿Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj»Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M hj·Pubj@)�”}”(hhh]”hÚ)�”}”(hŒ"the MCR register to read and write”h]”hŒ"the MCR register to read and write”…”�”}”(hjÖPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÒPh´M hjÓPubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj·Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒPh´M hj{Pubj)�”}”(hŒ'``u32 clear`` bits to clear during RMW ”h]”(j$)�”}”(hŒ ``u32 clear``”h]”j*)�”}”(hjöPh]”hŒ u32 clear”…”�”}”(hjøPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjôPubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M hjðPubj@)�”}”(hhh]”hÚ)�”}”(hŒbits to clear during RMW”h]”hŒbits to clear during RMW”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j Qh´M hj Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjðPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Qh´M hj{Pubj)�”}”(hŒ#``u32 set`` bits to set during RMW ”h]”(j$)�”}”(hŒ ``u32 set``”h]”j*)�”}”(hj/Qh]”hŒu32 set”…”�”}”(hj1Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj-Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M hj)Qubj@)�”}”(hhh]”hÚ)�”}”(hŒbits to set during RMW”h]”hŒbits to set during RMW”…”�”}”(hjHQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jDQh´M hjEQubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj)Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jDQh´M hj{Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj_PubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjjQh]”hŒ Description”…”�”}”(hjlQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhQubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M hj_PubhÚ)�”}”(hXPerforms a read-modify-write on an MCR register in a multicast manner. This operation only makes sense on MCR registers where all instances are expected to have the same value. The read will target any non-terminated instance and the write will be applied to all instances.”h]”hXPerforms a read-modify-write on an MCR register in a multicast manner. This operation only makes sense on MCR registers where all instances are expected to have the same value. The read will target any non-terminated instance and the write will be applied to all instances.”…”�”}”(hj€Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M hj_PubhÚ)�”}”(hŒ°This function assumes the caller is already holding any necessary forcewake domains; use intel_gt_mcr_multicast_rmw() in cases where forcewake should be obtained automatically.”h]”hŒ°This function assumes the caller is already holding any necessary forcewake domains; use intel_gt_mcr_multicast_rmw() in cases where forcewake should be obtained automatically.”…”�”}”(hj�Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mhj_PubhÚ)�”}”(hŒ(Returns the old (unmodified) value read.”h]”hŒ(Returns the old (unmodified) value read.”…”�”}”(hjžQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mhj_PubhÚ)�”}”(hŒ **Context**”h]”j)�”}”(hj¯Qh]”hŒContext”…”�”}”(hj±Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­Qubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mhj_PubhÚ)�”}”(hŒ2Calls functions that take and release gt->mcr_lock”h]”hŒ2Calls functions that take and release gt->mcr_lock”…”�”}”(hjÅQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mhj_Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjI<h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ4intel_gt_mcr_get_nonterminated_steering (C function)”Œ)c.intel_gt_mcr_get_nonterminated_steering”hNt”auh1j¶hjI<h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒovoid intel_gt_mcr_get_nonterminated_steering (struct intel_gt *gt, i915_mcr_reg_t reg, u8 *group, u8 *instance)”h]”jÓ)�”}”(hŒnvoid intel_gt_mcr_get_nonterminated_steering(struct intel_gt *gt, i915_mcr_reg_t reg, u8 *group, u8 *instance)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjôQh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjðQh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MŠubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjðQh²hh³jRh´MŠubj)�”}”(hŒ'intel_gt_mcr_get_nonterminated_steering”h]”jÜ)�”}”(hŒ'intel_gt_mcr_get_nonterminated_steering”h]”hŒ'intel_gt_mcr_get_nonterminated_steering”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjRubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjðQh²hh³jRh´MŠubj8)�”}”(hŒB(struct intel_gt *gt, i915_mcr_reg_t reg, u8 *group, u8 *instance)”h]”(j>)�”}”(hŒstruct intel_gt *gt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj1Rh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj-Rubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>Rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj-Rubh)�”}”(hhh]”jÜ)�”}”(hŒintel_gt”h]”hŒintel_gt”…”�”}”(hjORh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjLRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jQRŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjRsbŒ)c.intel_gt_mcr_get_nonterminated_steering”†”asbuh1hhj-Rubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj-Rubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj}Rh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj-RubjÜ)�”}”(hŒgt”h]”hŒgt”…”�”}”(hjŠRh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj-Rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj)Rubj>)�”}”(hŒi915_mcr_reg_t reg”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒi915_mcr_reg_t”h]”hŒi915_mcr_reg_t”…”�”}”(hj¦Rh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj£Rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j¨RŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jkRŒ)c.intel_gt_mcr_get_nonterminated_steering”†”asbuh1hhjŸRubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŸRubjÜ)�”}”(hŒreg”h]”hŒreg”…”�”}”(hjÒRh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŸRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj)Rubj>)�”}”(hŒ u8 *group”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjîRh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjëRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jðRŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jkRŒ)c.intel_gt_mcr_get_nonterminated_steering”†”asbuh1hhjçRubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Sh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjçRubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjçRubjÜ)�”}”(hŒgroup”h]”hŒgroup”…”�”}”(hj'Sh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjçRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj)Rubj>)�”}”(hŒ u8 *instance”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjCSh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj@Subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jESŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jkRŒ)c.intel_gt_mcr_get_nonterminated_steering”†”asbuh1hhj)�”}”(hŒstruct intel_gt *gt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjdUh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj`Uubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj`Uubh)�”}”(hhh]”jÜ)�”}”(hŒintel_gt”h]”hŒintel_gt”…”�”}”(hj‚Uh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j„UŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j1UŒc.intel_gt_mcr_read_any_fw”†”asbuh1hhj`Uubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj`Uubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj®Uh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj`UubjÜ)�”}”(hŒgt”h]”hŒgt”…”�”}”(hj»Uh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj`Uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj\Uubj>)�”}”(hŒi915_mcr_reg_t reg”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒi915_mcr_reg_t”h]”hŒi915_mcr_reg_t”…”�”}”(hj×Uh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÔUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÙUŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j1UŒc.intel_gt_mcr_read_any_fw”†”asbuh1hhjÐUubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÐUubjÜ)�”}”(hŒreg”h]”hŒreg”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÐUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj\Uubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjUh²hh³j6Uh´M¨ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj Uh²hh³j6Uh´M¨ubah}”(h]”jUah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j6Uh´M¨hjUh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ%reads one instance of an MCR register”h]”hŒ%reads one instance of an MCR register”…”�”}”(hj-Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M¨hj*Vh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjUh²hh³j6Uh´M¨ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójEVjôjEVjõ‰jö‰j÷‰uh1jÇh²hhjI<h³Nh´Nubjù)�”}”(hX!**Parameters** ``struct intel_gt *gt`` GT structure ``i915_mcr_reg_t reg`` register to read **Description** Reads a GT MCR register. The read will be steered to a non-terminated instance (i.e., one that isn't fused off or powered down by power gating). This function assumes the caller is already holding any necessary forcewake domains; use intel_gt_mcr_read_any() in cases where forcewake should be obtained automatically. Returns the value from a non-terminated instance of **reg**. **Context** The caller must hold gt->mcr_lock.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjOVh]”hŒ Parameters”…”�”}”(hjQVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M¬hjIVubj)�”}”(hhh]”(j)�”}”(hŒ%``struct intel_gt *gt`` GT structure ”h]”(j$)�”}”(hŒ``struct intel_gt *gt``”h]”j*)�”}”(hjnVh]”hŒstruct intel_gt *gt”…”�”}”(hjpVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjlVubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M©hjhVubj@)�”}”(hhh]”hÚ)�”}”(hŒ GT structure”h]”hŒ GT structure”…”�”}”(hj‡Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jƒVh´M©hj„Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjhVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒVh´M©hjeVubj)�”}”(hŒ(``i915_mcr_reg_t reg`` register to read ”h]”(j$)�”}”(hŒ``i915_mcr_reg_t reg``”h]”j*)�”}”(hj§Vh]”hŒi915_mcr_reg_t reg”…”�”}”(hj©Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¥Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mªhj¡Vubj@)�”}”(hhh]”hÚ)�”}”(hŒregister to read”h]”hŒregister to read”…”�”}”(hjÀVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¼Vh´Mªhj½Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¡Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼Vh´MªhjeVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjIVubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjâVh]”hŒ Description”…”�”}”(hjäVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M¬hjIVubhÚ)�”}”(hX=Reads a GT MCR register. The read will be steered to a non-terminated instance (i.e., one that isn't fused off or powered down by power gating). This function assumes the caller is already holding any necessary forcewake domains; use intel_gt_mcr_read_any() in cases where forcewake should be obtained automatically.”h]”hX?Reads a GT MCR register. The read will be steered to a non-terminated instance (i.e., one that isn’t fused off or powered down by power gating). This function assumes the caller is already holding any necessary forcewake domains; use intel_gt_mcr_read_any() in cases where forcewake should be obtained automatically.”…”�”}”(hjøVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M«hjIVubhÚ)�”}”(hŒmcr_lock.”h]”hŒ"The caller must hold gt->mcr_lock.”…”�”}”(hj@Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M²hjIVubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjI<h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ"intel_gt_mcr_read_any (C function)”Œc.intel_gt_mcr_read_any”hNt”auh1j¶hjI<h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒCu32 intel_gt_mcr_read_any (struct intel_gt *gt, i915_mcr_reg_t reg)”h]”jÓ)�”}”(hŒBu32 intel_gt_mcr_read_any(struct intel_gt *gt, i915_mcr_reg_t reg)”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjrWh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjoWubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jtWŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõŒintel_gt_mcr_read_any”sbŒc.intel_gt_mcr_read_any”†”asbuh1hhjkWh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÊubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”Wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjkWh²hh³j“Wh´MÊubj)�”}”(hŒintel_gt_mcr_read_any”h]”jÜ)�”}”(hj�Wh]”hŒintel_gt_mcr_read_any”…”�”}”(hj¦Wh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¢Wubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjkWh²hh³j“Wh´MÊubj8)�”}”(hŒ)(struct intel_gt *gt, i915_mcr_reg_t reg)”h]”(j>)�”}”(hŒstruct intel_gt *gt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÁWh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj½Wubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj½Wubh)�”}”(hhh]”jÜ)�”}”(hŒintel_gt”h]”hŒintel_gt”…”�”}”(hjßWh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÜWubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jáWŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jŽWŒc.intel_gt_mcr_read_any”†”asbuh1hhj½Wubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj½Wubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj Xh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj½WubjÜ)�”}”(hŒgt”h]”hŒgt”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj½Wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¹Wubj>)�”}”(hŒi915_mcr_reg_t reg”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒi915_mcr_reg_t”h]”hŒi915_mcr_reg_t”…”�”}”(hj4Xh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj1Xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j6XŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jŽWŒc.intel_gt_mcr_read_any”†”asbuh1hhj-Xubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj-XubjÜ)�”}”(hŒreg”h]”hŒreg”…”�”}”(hj`Xh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj-Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¹Wubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjkWh²hh³j“Wh´MÊubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjgWh²hh³j“Wh´MÊubah}”(h]”jbWah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j“Wh´MÊhjdWh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ%reads one instance of an MCR register”h]”hŒ%reads one instance of an MCR register”…”�”}”(hjŠXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÊhj‡Xh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjdWh²hh³j“Wh´MÊubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój¢Xjôj¢Xjõ‰jö‰j÷‰uh1jÇh²hhjI<h³Nh´Nubjù)�”}”(hX‰**Parameters** ``struct intel_gt *gt`` GT structure ``i915_mcr_reg_t reg`` register to read **Description** Reads a GT MCR register. The read will be steered to a non-terminated instance (i.e., one that isn't fused off or powered down by power gating). Returns the value from a non-terminated instance of **reg**. **Context** Calls a function that takes and releases gt->mcr_lock.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¬Xh]”hŒ Parameters”…”�”}”(hj®Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªXubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÎhj¦Xubj)�”}”(hhh]”(j)�”}”(hŒ%``struct intel_gt *gt`` GT structure ”h]”(j$)�”}”(hŒ``struct intel_gt *gt``”h]”j*)�”}”(hjËXh]”hŒstruct intel_gt *gt”…”�”}”(hjÍXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÉXubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MËhjÅXubj@)�”}”(hhh]”hÚ)�”}”(hŒ GT structure”h]”hŒ GT structure”…”�”}”(hjäXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jàXh´MËhjáXubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÅXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jàXh´MËhjÂXubj)�”}”(hŒ(``i915_mcr_reg_t reg`` register to read ”h]”(j$)�”}”(hŒ``i915_mcr_reg_t reg``”h]”j*)�”}”(hjYh]”hŒi915_mcr_reg_t reg”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÌhjþXubj@)�”}”(hhh]”hÚ)�”}”(hŒregister to read”h]”hŒregister to read”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jYh´MÌhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjþXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jYh´MÌhjÂXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦XubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj?Yh]”hŒ Description”…”�”}”(hjAYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=Yubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÎhj¦XubhÚ)�”}”(hŒ‘Reads a GT MCR register. The read will be steered to a non-terminated instance (i.e., one that isn't fused off or powered down by power gating).”h]”hŒ“Reads a GT MCR register. The read will be steered to a non-terminated instance (i.e., one that isn’t fused off or powered down by power gating).”…”�”}”(hjUYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÍhj¦XubhÚ)�”}”(hŒmcr_lock.”h]”hŒ6Calls a function that takes and releases gt->mcr_lock.”…”�”}”(hj�Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MÑhj¦Xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjI<h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ)intel_gt_mcr_get_ss_steering (C function)”Œc.intel_gt_mcr_get_ss_steering”hNt”auh1j¶hjI<h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒvvoid intel_gt_mcr_get_ss_steering (struct intel_gt *gt, unsigned int dss, unsigned int *group, unsigned int *instance)”h]”jÓ)�”}”(hŒuvoid intel_gt_mcr_get_ss_steering(struct intel_gt *gt, unsigned int dss, unsigned int *group, unsigned int *instance)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÌYh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÈYh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛYh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÈYh²hh³jÚYh´Mubj)�”}”(hŒintel_gt_mcr_get_ss_steering”h]”jÜ)�”}”(hŒintel_gt_mcr_get_ss_steering”h]”hŒintel_gt_mcr_get_ss_steering”…”�”}”(hjíYh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjéYubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÈYh²hh³jÚYh´Mubj8)�”}”(hŒT(struct intel_gt *gt, unsigned int dss, unsigned int *group, unsigned int *instance)”h]”(j>)�”}”(hŒstruct intel_gt *gt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj Zh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjZubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjZubh)�”}”(hhh]”jÜ)�”}”(hŒintel_gt”h]”hŒintel_gt”…”�”}”(hj'Zh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj$Zubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j)ZŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjïYsbŒc.intel_gt_mcr_get_ss_steering”†”asbuh1hhjZubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjZubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjUZh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjZubjÜ)�”}”(hŒgt”h]”hŒgt”…”�”}”(hjbZh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjZubj>)�”}”(hŒunsigned int dss”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj{Zh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjwZubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰Zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjwZubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hj—Zh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjwZubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjwZubjÜ)�”}”(hŒdss”h]”hŒdss”…”�”}”(hj³Zh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjwZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjZubj>)�”}”(hŒunsigned int *group”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÌZh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÈZubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÈZubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hjèZh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÈZubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÈZubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÈZubjÜ)�”}”(hŒgroup”h]”hŒgroup”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÈZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjZubj>)�”}”(hŒunsigned int *instance”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj*[h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj&[ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj&[ubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hjF[h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj&[ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj&[ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjb[h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj&[ubjÜ)�”}”(hŒinstance”h]”hŒinstance”…”�”}”(hjo[h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj&[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjZubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÈYh²hh³jÚYh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÄYh²hh³jÚYh´Mubah}”(h]”j¿Yah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÚYh´MhjÁYh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ,returns the group/instance steering for a SS”h]”hŒ,returns the group/instance steering for a SS”…”�”}”(hj™[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mhj–[h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÁYh²hh³jÚYh´Mubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój±[jôj±[jõ‰jö‰j÷‰uh1jÇh²hhjI<h³Nh´Nubjù)�”}”(hX„**Parameters** ``struct intel_gt *gt`` GT structure ``unsigned int dss`` DSS ID to obtain steering for ``unsigned int *group`` pointer to storage for steering group ID ``unsigned int *instance`` pointer to storage for steering instance ID **Description** Returns the steering IDs (via the **group** and **instance** parameters) that correspond to a specific subslice/DSS ID.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj»[h]”hŒ Parameters”…”�”}”(hj½[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mhjµ[ubj)�”}”(hhh]”(j)�”}”(hŒ%``struct intel_gt *gt`` GT structure ”h]”(j$)�”}”(hŒ``struct intel_gt *gt``”h]”j*)�”}”(hjÚ[h]”hŒstruct intel_gt *gt”…”�”}”(hjÜ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjØ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MhjÔ[ubj@)�”}”(hhh]”hÚ)�”}”(hŒ GT structure”h]”hŒ GT structure”…”�”}”(hjó[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jï[h´Mhjð[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÔ[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jï[h´MhjÑ[ubj)�”}”(hŒ3``unsigned int dss`` DSS ID to obtain steering for ”h]”(j$)�”}”(hŒ``unsigned int dss``”h]”j*)�”}”(hj\h]”hŒunsigned int dss”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mhj \ubj@)�”}”(hhh]”hÚ)�”}”(hŒDSS ID to obtain steering for”h]”hŒDSS ID to obtain steering for”…”�”}”(hj,\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j(\h´Mhj)\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj \ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(\h´MhjÑ[ubj)�”}”(hŒA``unsigned int *group`` pointer to storage for steering group ID ”h]”(j$)�”}”(hŒ``unsigned int *group``”h]”j*)�”}”(hjL\h]”hŒunsigned int *group”…”�”}”(hjN\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjJ\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MhjF\ubj@)�”}”(hhh]”hÚ)�”}”(hŒ(pointer to storage for steering group ID”h]”hŒ(pointer to storage for steering group ID”…”�”}”(hje\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ja\h´Mhjb\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjF\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³ja\h´MhjÑ[ubj)�”}”(hŒG``unsigned int *instance`` pointer to storage for steering instance ID ”h]”(j$)�”}”(hŒ``unsigned int *instance``”h]”j*)�”}”(hj…\h]”hŒunsigned int *instance”…”�”}”(hj‡\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjƒ\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mhj\ubj@)�”}”(hhh]”hÚ)�”}”(hŒ+pointer to storage for steering instance ID”h]”hŒ+pointer to storage for steering instance ID”…”�”}”(hjž\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jš\h´Mhj›\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jš\h´MhjÑ[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjµ[ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjÀ\h]”hŒ Description”…”�”}”(hjÂ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mhjµ[ubhÚ)�”}”(hŒwReturns the steering IDs (via the **group** and **instance** parameters) that correspond to a specific subslice/DSS ID.”h]”(hŒ"Returns the steering IDs (via the ”…”�”}”(hjÖ\h²hh³Nh´Nubj)�”}”(hŒ **group**”h]”hŒgroup”…”�”}”(hjÞ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖ\ubhŒ and ”…”�”}”(hjÖ\h²hh³Nh´Nubj)�”}”(hŒ **instance**”h]”hŒinstance”…”�”}”(hjð\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖ\ubhŒ; parameters) that correspond to a specific subslice/DSS ID.”…”�”}”(hjÖ\h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´Mhjµ[ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjI<h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ&intel_gt_mcr_wait_for_reg (C function)”Œc.intel_gt_mcr_wait_for_reg”hNt”auh1j¶hjI<h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ˜int intel_gt_mcr_wait_for_reg (struct intel_gt *gt, i915_mcr_reg_t reg, u32 mask, u32 value, unsigned int fast_timeout_us, unsigned int slow_timeout_ms)”h]”jÓ)�”}”(hŒ—int intel_gt_mcr_wait_for_reg(struct intel_gt *gt, i915_mcr_reg_t reg, u32 mask, u32 value, unsigned int fast_timeout_us, unsigned int slow_timeout_ms)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj)]h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj%]h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M/ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj%]h²hh³j7]h´M/ubj)�”}”(hŒintel_gt_mcr_wait_for_reg”h]”jÜ)�”}”(hŒintel_gt_mcr_wait_for_reg”h]”hŒintel_gt_mcr_wait_for_reg”…”�”}”(hjJ]h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjF]ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj%]h²hh³j7]h´M/ubj8)�”}”(hŒz(struct intel_gt *gt, i915_mcr_reg_t reg, u32 mask, u32 value, unsigned int fast_timeout_us, unsigned int slow_timeout_ms)”h]”(j>)�”}”(hŒstruct intel_gt *gt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjf]h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjb]ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjb]ubh)�”}”(hhh]”jÜ)�”}”(hŒintel_gt”h]”hŒintel_gt”…”�”}”(hj„]h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j†]Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjL]sbŒc.intel_gt_mcr_wait_for_reg”†”asbuh1hhjb]ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjb]ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj²]h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjb]ubjÜ)�”}”(hŒgt”h]”hŒgt”…”�”}”(hj¿]h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjb]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj^]ubj>)�”}”(hŒi915_mcr_reg_t reg”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒi915_mcr_reg_t”h]”hŒi915_mcr_reg_t”…”�”}”(hjÛ]h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjØ]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÝ]Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j ]Œc.intel_gt_mcr_wait_for_reg”†”asbuh1hhjÔ]ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÔ]ubjÜ)�”}”(hŒreg”h]”hŒreg”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÔ]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj^]ubj>)�”}”(hŒu32 mask”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj#^h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj ^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j%^Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j ]Œc.intel_gt_mcr_wait_for_reg”†”asbuh1hhj^ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj^ubjÜ)�”}”(hŒmask”h]”hŒmask”…”�”}”(hjO^h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj^]ubj>)�”}”(hŒ u32 value”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjk^h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjh^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jm^Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j ]Œc.intel_gt_mcr_wait_for_reg”†”asbuh1hhjd^ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjd^ubjÜ)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hj—^h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjd^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj^]ubj>)�”}”(hŒunsigned int fast_timeout_us”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj°^h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj¬^ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¬^ubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hjÌ^h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj¬^ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¬^ubjÜ)�”}”(hŒfast_timeout_us”h]”hŒfast_timeout_us”…”�”}”(hjè^h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¬^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj^]ubj>)�”}”(hŒunsigned int slow_timeout_ms”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjý^ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjý^ubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjý^ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjý^ubjÜ)�”}”(hŒslow_timeout_ms”h]”hŒslow_timeout_ms”…”�”}”(hj9_h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjý^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj^]ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj%]h²hh³j7]h´M/ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj!]h²hh³j7]h´M/ubah}”(h]”j]ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j7]h´M/hj]h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ.wait until MCR register matches expected state”h]”hŒ.wait until MCR register matches expected state”…”�”}”(hjc_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M/hj`_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj]h²hh³j7]h´M/ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój{_jôj{_jõ‰jö‰j÷‰uh1jÇh²hhjI<h³Nh´Nubjù)�”}”(hX **Parameters** ``struct intel_gt *gt`` GT structure ``i915_mcr_reg_t reg`` the register to read ``u32 mask`` mask to apply to register value ``u32 value`` value to wait for ``unsigned int fast_timeout_us`` fast timeout in microsecond for atomic/tight wait ``unsigned int slow_timeout_ms`` slow timeout in millisecond **Description** This routine waits until the target register **reg** contains the expected **value** after applying the **mask**, i.e. it waits until :: (intel_gt_mcr_read_any_fw(gt, reg) & mask) == value Otherwise, the wait will timeout after **slow_timeout_ms** milliseconds. For atomic context **slow_timeout_ms** must be zero and **fast_timeout_us** must be not larger than 20,0000 microseconds. This function is basically an MCR-friendly version of __intel_wait_for_register_fw(). Generally this function will only be used on GAM registers which are a bit special --- although they're MCR registers, reads (e.g., waiting for status updates) are always directed to the primary instance. Note that this routine assumes the caller holds forcewake asserted, it is not suitable for very long waits. **Context** Calls a function that takes and releases gt->mcr_lock **Return** 0 if the register matches the desired condition, or -ETIMEDOUT.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj…_h]”hŒ Parameters”…”�”}”(hj‡_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M3hj_ubj)�”}”(hhh]”(j)�”}”(hŒ%``struct intel_gt *gt`` GT structure ”h]”(j$)�”}”(hŒ``struct intel_gt *gt``”h]”j*)�”}”(hj¤_h]”hŒstruct intel_gt *gt”…”�”}”(hj¦_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¢_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M0hjž_ubj@)�”}”(hhh]”hÚ)�”}”(hŒ GT structure”h]”hŒ GT structure”…”�”}”(hj½_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¹_h´M0hjº_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjž_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¹_h´M0hj›_ubj)�”}”(hŒ,``i915_mcr_reg_t reg`` the register to read ”h]”(j$)�”}”(hŒ``i915_mcr_reg_t reg``”h]”j*)�”}”(hjÝ_h]”hŒi915_mcr_reg_t reg”…”�”}”(hjß_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÛ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M1hj×_ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe register to read”h]”hŒthe register to read”…”�”}”(hjö_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jò_h´M1hjó_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj×_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jò_h´M1hj›_ubj)�”}”(hŒ-``u32 mask`` mask to apply to register value ”h]”(j$)�”}”(hŒ ``u32 mask``”h]”j*)�”}”(hj`h]”hŒu32 mask”…”�”}”(hj`h²•hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M2hj`ubj@)�”}”(hhh]”hÚ)�”}”(hŒmask to apply to register value”h]”hŒmask to apply to register value”…”�”}”(hj/`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j+`h´M2hj,`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+`h´M2hj›_ubj)�”}”(hŒ ``u32 value`` value to wait for ”h]”(j$)�”}”(hŒ ``u32 value``”h]”j*)�”}”(hjO`h]”hŒ u32 value”…”�”}”(hjQ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjM`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M3hjI`ubj@)�”}”(hhh]”hÚ)�”}”(hŒvalue to wait for”h]”hŒvalue to wait for”…”�”}”(hjh`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jd`h´M3hje`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjI`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jd`h´M3hj›_ubj)�”}”(hŒS``unsigned int fast_timeout_us`` fast timeout in microsecond for atomic/tight wait ”h]”(j$)�”}”(hŒ ``unsigned int fast_timeout_us``”h]”j*)�”}”(hjˆ`h]”hŒunsigned int fast_timeout_us”…”�”}”(hjŠ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj†`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M4hj‚`ubj@)�”}”(hhh]”hÚ)�”}”(hŒ1fast timeout in microsecond for atomic/tight wait”h]”hŒ1fast timeout in microsecond for atomic/tight wait”…”�”}”(hj¡`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j�`h´M4hjž`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj‚`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�`h´M4hj›_ubj)�”}”(hŒ=``unsigned int slow_timeout_ms`` slow timeout in millisecond ”h]”(j$)�”}”(hŒ ``unsigned int slow_timeout_ms``”h]”j*)�”}”(hjÁ`h]”hŒunsigned int slow_timeout_ms”…”�”}”(hjÃ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¿`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M5hj»`ubj@)�”}”(hhh]”hÚ)�”}”(hŒslow timeout in millisecond”h]”hŒslow timeout in millisecond”…”�”}”(hjÚ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÖ`h´M5hj×`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj»`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÖ`h´M5hj›_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj_ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjü`h]”hŒ Description”…”�”}”(hjþ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjú`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M7hj_ubhÚ)�”}”(hŒˆThis routine waits until the target register **reg** contains the expected **value** after applying the **mask**, i.e. it waits until ::”h]”(hŒ-This routine waits until the target register ”…”�”}”(hjah²hh³Nh´Nubj)�”}”(hŒ**reg**”h]”hŒreg”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjaubhŒ contains the expected ”…”�”}”(hjah²hh³Nh´Nubj)�”}”(hŒ **value**”h]”hŒvalue”…”�”}”(hj,ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjaubhŒ after applying the ”…”�”}”(hjah²hh³Nh´Nubj)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hj>ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjaubhŒ, i.e. it waits until”…”�”}”(hjah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M6hj_ubjA#)�”}”(hŒ3(intel_gt_mcr_read_any_fw(gt, reg) & mask) == value”h]”hŒ3(intel_gt_mcr_read_any_fw(gt, reg) & mask) == value”…”�”}”hjWasbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M9hj_ubhÚ)�”}”(hŒÂOtherwise, the wait will timeout after **slow_timeout_ms** milliseconds. For atomic context **slow_timeout_ms** must be zero and **fast_timeout_us** must be not larger than 20,0000 microseconds.”h]”(hŒ'Otherwise, the wait will timeout after ”…”�”}”(hjfah²hh³Nh´Nubj)�”}”(hŒ**slow_timeout_ms**”h]”hŒslow_timeout_ms”…”�”}”(hjnah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfaubhŒ" milliseconds. For atomic context ”…”�”}”(hjfah²hh³Nh´Nubj)�”}”(hŒ**slow_timeout_ms**”h]”hŒslow_timeout_ms”…”�”}”(hj€ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfaubhŒ must be zero and ”…”�”}”(hjfah²hh³Nh´Nubj)�”}”(hŒ**fast_timeout_us**”h]”hŒfast_timeout_us”…”�”}”(hj’ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfaubhŒ. must be not larger than 20,0000 microseconds.”…”�”}”(hjfah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M;hj_ubhÚ)�”}”(hX#This function is basically an MCR-friendly version of __intel_wait_for_register_fw(). Generally this function will only be used on GAM registers which are a bit special --- although they're MCR registers, reads (e.g., waiting for status updates) are always directed to the primary instance.”h]”hX%This function is basically an MCR-friendly version of __intel_wait_for_register_fw(). Generally this function will only be used on GAM registers which are a bit special --- although they’re MCR registers, reads (e.g., waiting for status updates) are always directed to the primary instance.”…”�”}”(hj«ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´M?hj_ubhÚ)�”}”(hŒkNote that this routine assumes the caller holds forcewake asserted, it is not suitable for very long waits.”h]”hŒkNote that this routine assumes the caller holds forcewake asserted, it is not suitable for very long waits.”…”�”}”(hjºah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MEhj_ubhÚ)�”}”(hŒ **Context**”h]”j)�”}”(hjËah]”hŒContext”…”�”}”(hjÍah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MHhj_ubhÚ)�”}”(hŒ5Calls a function that takes and releases gt->mcr_lock”h]”hŒ5Calls a function that takes and releases gt->mcr_lock”…”�”}”(hjáah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MIhj_ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjòah]”hŒReturn”…”�”}”(hjôah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjðaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MKhj_ubhÚ)�”}”(hŒ?0 if the register matches the desired condition, or -ETIMEDOUT.”h]”hŒ?0 if the register matches the desired condition, or -ETIMEDOUT.”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:82: ./drivers/gpu/drm/i915/gt/intel_gt_mcr.c”h´MJhj_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjI<h²hh³Nh´Nubeh}”(h]”Œ"multicast-replicated-mcr-registers”ah ]”h"]”Œ$multicast/replicated (mcr) registers”ah$]”h&]”uh1hÄhj8<h²hh³hÃh´KMubeh}”(h]”Œgt-programming”ah ]”h"]”Œgt programming”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´KJubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ(Memory Management and Command Submission”h]”hŒ(Memory Management and Command Submission”…”�”}”(hj1bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj.bh²hh³hÃh´KVubhÚ)�”}”(hŒUThis sections covers all things related to the GEM implementation in the i915 driver.”h]”hŒUThis sections covers all things related to the GEM implementation in the i915 driver.”…”�”}”(hj?bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KXhj.bh²hubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒIntel GPU Basics”h]”hŒIntel GPU Basics”…”�”}”(hjPbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjMbh²hh³hÃh´K\ubhÚ)�”}”(hŒBAn Intel GPU has multiple engines. There are several engine types:”h]”hŒBAn Intel GPU has multiple engines. There are several engine types:”…”�”}”(hj^bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K^hjMbh²hubj°:)�”}”(hhh]”(jµ:)�”}”(hŒQRender Command Streamer (RCS). An engine for rendering 3D and performing compute.”h]”hÚ)�”}”(hŒQRender Command Streamer (RCS). An engine for rendering 3D and performing compute.”h]”hŒQRender Command Streamer (RCS). An engine for rendering 3D and performing compute.”…”�”}”(hjsbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K`hjobubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjlbh²hh³hÃh´Nubjµ:)�”}”(hŒ]Blitting Command Streamer (BCS). An engine for performing blitting and/or copying operations.”h]”hÚ)�”}”(hŒ]Blitting Command Streamer (BCS). An engine for performing blitting and/or copying operations.”h]”hŒ]Blitting Command Streamer (BCS). An engine for performing blitting and/or copying operations.”…”�”}”(hj‹bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Kbhj‡bubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjlbh²hh³hÃh´Nubjµ:)�”}”(hŒ~Video Command Streamer. An engine used for video encoding and decoding. Also sometimes called 'BSD' in hardware documentation.”h]”hÚ)�”}”(hŒ~Video Command Streamer. An engine used for video encoding and decoding. Also sometimes called 'BSD' in hardware documentation.”h]”hŒ‚Video Command Streamer. An engine used for video encoding and decoding. Also sometimes called ‘BSD’ in hardware documentation.”…”�”}”(hj£bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KdhjŸbubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjlbh²hh³hÃh´Nubjµ:)�”}”(hŒ„Video Enhancement Command Streamer (VECS). An engine for video enhancement. Also sometimes called 'VEBOX' in hardware documentation.”h]”hÚ)�”}”(hŒ„Video Enhancement Command Streamer (VECS). An engine for video enhancement. Also sometimes called 'VEBOX' in hardware documentation.”h]”hŒˆVideo Enhancement Command Streamer (VECS). An engine for video enhancement. Also sometimes called ‘VEBOX’ in hardware documentation.”…”�”}”(hj»bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Kfhj·bubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjlbh²hh³hÃh´Nubjµ:)�”}”(hŒtCompute Command Streamer (CCS). An engine that has access to the media and GPGPU pipelines, but not the 3D pipeline.”h]”hÚ)�”}”(hŒtCompute Command Streamer (CCS). An engine that has access to the media and GPGPU pipelines, but not the 3D pipeline.”h]”hŒtCompute Command Streamer (CCS). An engine that has access to the media and GPGPU pipelines, but not the 3D pipeline.”…”�”}”(hjÓbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KhhjÏbubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjlbh²hh³hÃh´Nubjµ:)�”}”(hŒóGraphics Security Controller (GSCCS). A dedicated engine for internal communication with GSC controller on security related tasks like High-bandwidth Digital Content Protection (HDCP), Protected Xe Path (PXP), and HuC firmware authentication. ”h]”hÚ)�”}”(hŒòGraphics Security Controller (GSCCS). A dedicated engine for internal communication with GSC controller on security related tasks like High-bandwidth Digital Content Protection (HDCP), Protected Xe Path (PXP), and HuC firmware authentication.”h]”hŒòGraphics Security Controller (GSCCS). A dedicated engine for internal communication with GSC controller on security related tasks like High-bandwidth Digital Content Protection (HDCP), Protected Xe Path (PXP), and HuC firmware authentication.”…”�”}”(hjëbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Kjhjçbubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjlbh²hh³hÃh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³hÃh´K`hjMbh²hubhÚ)�”}”(hXõThe Intel GPU family is a family of integrated GPU's using Unified Memory Access. For having the GPU "do work", user space will feed the GPU batch buffers via one of the ioctls `DRM_IOCTL_I915_GEM_EXECBUFFER2` or `DRM_IOCTL_I915_GEM_EXECBUFFER2_WR`. Most such batchbuffers will instruct the GPU to perform work (for example rendering) and that work needs memory from which to read and memory to which to write. All memory is encapsulated within GEM buffer objects (usually created with the ioctl `DRM_IOCTL_I915_GEM_CREATE`). An ioctl providing a batchbuffer for the GPU to create will also list all GEM buffer objects that the batchbuffer reads and/or writes. For implementation details of memory management see `GEM BO Management Implementation Details`_.”h]”(hŒ·The Intel GPU family is a family of integrated GPU’s using Unified Memory Access. For having the GPU “do workâ€�, user space will feed the GPU batch buffers via one of the ioctls ”…”�”}”(hjch²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ `DRM_IOCTL_I915_GEM_EXECBUFFER2`”h]”hŒDRM_IOCTL_I915_GEM_EXECBUFFER2”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjcubhŒ or ”…”�”}”(hjch²hh³Nh´Nubjc)�”}”(hŒ#`DRM_IOCTL_I915_GEM_EXECBUFFER2_WR`”h]”hŒ!DRM_IOCTL_I915_GEM_EXECBUFFER2_WR”…”�”}”(hj!ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjcubhŒø. Most such batchbuffers will instruct the GPU to perform work (for example rendering) and that work needs memory from which to read and memory to which to write. All memory is encapsulated within GEM buffer objects (usually created with the ioctl ”…”�”}”(hjch²hh³Nh´Nubjc)�”}”(hŒ`DRM_IOCTL_I915_GEM_CREATE`”h]”hŒDRM_IOCTL_I915_GEM_CREATE”…”�”}”(hj3ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjcubhŒ¾). An ioctl providing a batchbuffer for the GPU to create will also list all GEM buffer objects that the batchbuffer reads and/or writes. For implementation details of memory management see ”…”�”}”(hjch²hh³Nh´NubjÂ5)�”}”(hŒ+`GEM BO Management Implementation Details`_”h]”hŒ(GEM BO Management Implementation Details”…”�”}”(hjEch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ(GEM BO Management Implementation Details”hÁŒ(gem-bo-management-implementation-details”uh1jÁ5hjcj7;KubhŒ.”…”�”}”(hjch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KohjMbh²hubhÚ)�”}”(hXÓThe i915 driver allows user space to create a context via the ioctl `DRM_IOCTL_I915_GEM_CONTEXT_CREATE` which is identified by a 32-bit integer. Such a context should be viewed by user-space as -loosely- analogous to the idea of a CPU process of an operating system. The i915 driver guarantees that commands issued to a fixed context are to be executed so that writes of a previously issued command are seen by reads of following commands. Actions issued between different contexts (even if from the same file descriptor) are NOT given that guarantee and the only way to synchronize across contexts (even from the same file descriptor) is through the use of fences. At least as far back as Gen4, also have that a context carries with it a GPU HW context; the HW context is essentially (most of at least) the state of a GPU. In addition to the ordering guarantees, the kernel will restore GPU state via HW context when commands are issued to a context, this saves user space the need to restore (most of at least) the GPU state at the start of each batchbuffer. The non-deprecated ioctls to submit batchbuffer work can pass that ID (in the lower bits of drm_i915_gem_execbuffer2::rsvd1) to identify what context to use with the command.”h]”(hŒDThe i915 driver allows user space to create a context via the ioctl ”…”�”}”(hj`ch²hh³Nh´Nubjc)�”}”(hŒ#`DRM_IOCTL_I915_GEM_CONTEXT_CREATE`”h]”hŒ!DRM_IOCTL_I915_GEM_CONTEXT_CREATE”…”�”}”(hjhch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chj`cubhXl which is identified by a 32-bit integer. Such a context should be viewed by user-space as -loosely- analogous to the idea of a CPU process of an operating system. The i915 driver guarantees that commands issued to a fixed context are to be executed so that writes of a previously issued command are seen by reads of following commands. Actions issued between different contexts (even if from the same file descriptor) are NOT given that guarantee and the only way to synchronize across contexts (even from the same file descriptor) is through the use of fences. At least as far back as Gen4, also have that a context carries with it a GPU HW context; the HW context is essentially (most of at least) the state of a GPU. In addition to the ordering guarantees, the kernel will restore GPU state via HW context when commands are issued to a context, this saves user space the need to restore (most of at least) the GPU state at the start of each batchbuffer. The non-deprecated ioctls to submit batchbuffer work can pass that ID (in the lower bits of drm_i915_gem_execbuffer2::rsvd1) to identify what context to use with the command.”…”�”}”(hj`ch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K{hjMbh²hubhÚ)�”}”(hXThe GPU has its own memory management and address space. The kernel driver maintains the memory translation table for the GPU. For older GPUs (i.e. those before Gen8), there is a single global such translation table, a global Graphics Translation Table (GTT). For newer generation GPUs each context has its own translation table, called Per-Process Graphics Translation Table (PPGTT). Of important note, is that although PPGTT is named per-process it is actually per context. When user space submits a batchbuffer, the kernel walks the list of GEM buffer objects used by the batchbuffer and guarantees that not only is the memory of each such GEM buffer object resident but it is also present in the (PP)GTT. If the GEM buffer object is not yet placed in the (PP)GTT, then it is given an address. Two consequences of this are: the kernel needs to edit the batchbuffer submitted to write the correct value of the GPU address when a GEM BO is assigned a GPU address and the kernel might evict a different GEM BO from the (PP)GTT to make address room for another GEM BO. Consequently, the ioctls submitting a batchbuffer for execution also include a list of all locations within buffers that refer to GPU-addresses so that the kernel can edit the buffer correctly. This process is dubbed relocation.”h]”hXThe GPU has its own memory management and address space. The kernel driver maintains the memory translation table for the GPU. For older GPUs (i.e. those before Gen8), there is a single global such translation table, a global Graphics Translation Table (GTT). For newer generation GPUs each context has its own translation table, called Per-Process Graphics Translation Table (PPGTT). Of important note, is that although PPGTT is named per-process it is actually per context. When user space submits a batchbuffer, the kernel walks the list of GEM buffer objects used by the batchbuffer and guarantees that not only is the memory of each such GEM buffer object resident but it is also present in the (PP)GTT. If the GEM buffer object is not yet placed in the (PP)GTT, then it is given an address. Two consequences of this are: the kernel needs to edit the batchbuffer submitted to write the correct value of the GPU address when a GEM BO is assigned a GPU address and the kernel might evict a different GEM BO from the (PP)GTT to make address room for another GEM BO. Consequently, the ioctls submitting a batchbuffer for execution also include a list of all locations within buffers that refer to GPU-addresses so that the kernel can edit the buffer correctly. This process is dubbed relocation.”…”�”}”(hj€ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KŽhjMbh²hubeh}”(h]”Œintel-gpu-basics”ah ]”h"]”Œintel gpu basics”ah$]”h&]”uh1hÄhj.bh²hh³hÃh´K\ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒLocking Guidelines”h]”hŒLocking Guidelines”…”�”}”(hj™ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj–ch²hh³hÃh´K£ubhŒnote”“”)�”}”(hŒ‘This is a description of how the locking should be after refactoring is done. Does not necessarily reflect what the locking looks like while WIP.”h]”hÚ)�”}”(hŒ‘This is a description of how the locking should be after refactoring is done. Does not necessarily reflect what the locking looks like while WIP.”h]”hŒ‘This is a description of how the locking should be after refactoring is done. Does not necessarily reflect what the locking looks like while WIP.”…”�”}”(hj­ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¦hj©cubah}”(h]”h ]”h"]”h$]”h&]”uh1j§chj–ch²hh³hÃh´Nubj”;)�”}”(hhh]”(jµ:)�”}”(hŒqAll locking rules and interface contracts with cross-driver interfaces (dma-buf, dma_fence) need to be followed. ”h]”hÚ)�”}”(hŒpAll locking rules and interface contracts with cross-driver interfaces (dma-buf, dma_fence) need to be followed.”h]”hŒpAll locking rules and interface contracts with cross-driver interfaces (dma-buf, dma_fence) need to be followed.”…”�”}”(hjÈch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KªhjÄcubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjÁch²hh³hÃh´Nubjµ:)�”}”(hŒ�dma_resv will be the outermost lock (when needed) and ww_acquire_ctx is to be hoisted at highest level and passed down within i915_gem_ctx in the call chain ”h]”hÚ)�”}”(hŒœdma_resv will be the outermost lock (when needed) and ww_acquire_ctx is to be hoisted at highest level and passed down within i915_gem_ctx in the call chain”h]”hŒœdma_resv will be the outermost lock (when needed) and ww_acquire_ctx is to be hoisted at highest level and passed down within i915_gem_ctx in the call chain”…”�”}”(hjàch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K­hjÜcubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjÁch²hh³hÃh´Nubjµ:)�”}”(hŒkWhile holding lru/memory manager (buddy, drm_mm, whatever) locks system memory allocations are not allowed ”h]”hÚ)�”}”(hŒjWhile holding lru/memory manager (buddy, drm_mm, whatever) locks system memory allocations are not allowed”h]”hŒjWhile holding lru/memory manager (buddy, drm_mm, whatever) locks system memory allocations are not allowed”…”�”}”(hjøch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K±hjôcubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjÁch²hh³hÃh´Nubjµ:)�”}”(hŒÅDo not nest different lru/memory manager locks within each other. Take them in turn to update memory allocations, relying on the object’s dma_resv ww_mutex to serialize against other operations. ”h]”hÚ)�”}”(hŒÄDo not nest different lru/memory manager locks within each other. Take them in turn to update memory allocations, relying on the object’s dma_resv ww_mutex to serialize against other operations.”h]”hŒÄDo not nest different lru/memory manager locks within each other. Take them in turn to update memory allocations, relying on the object’s dma_resv ww_mutex to serialize against other operations.”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K´hj dubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjÁch²hh³hÃh´Nubjµ:)�”}”(hŒ\The suggestion for lru/memory managers locks is that they are small enough to be spinlocks. ”h]”hÚ)�”}”(hŒ[The suggestion for lru/memory managers locks is that they are small enough to be spinlocks.”h]”hŒ[The suggestion for lru/memory managers locks is that they are small enough to be spinlocks.”…”�”}”(hj(dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K¸hj$dubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjÁch²hh³hÃh´Nubjµ:)�”}”(hŒ]All features need to come with exhaustive kernel selftests and/or IGT tests when appropriate ”h]”hÚ)�”}”(hŒ\All features need to come with exhaustive kernel selftests and/or IGT tests when appropriate”h]”hŒ\All features need to come with exhaustive kernel selftests and/or IGT tests when appropriate”…”�”}”(hj@dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´K»hj)�”}”(hŒstruct i915_address_space *vm”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjkeh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjgeubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjgeubh)�”}”(hhh]”jÜ)�”}”(hŒi915_address_space”h]”hŒi915_address_space”…”�”}”(hj‰eh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj†eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j‹eŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjQesbŒc.i915_gem_evict_something”†”asbuh1hhjgeubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjgeubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj·eh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjgeubjÜ)�”}”(hŒvm”h]”hŒvm”…”�”}”(hjÄeh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjgeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjceubj>)�”}”(hŒstruct i915_gem_ww_ctx *ww”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÝeh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjÙeubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÙeubh)�”}”(hhh]”jÜ)�”}”(hŒi915_gem_ww_ctx”h]”hŒi915_gem_ww_ctx”…”�”}”(hjûeh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjøeubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jýeŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j¥eŒc.i915_gem_evict_something”†”asbuh1hhjÙeubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÙeubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj'fh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÙeubjÜ)�”}”(hŒww”h]”hŒww”…”�”}”(hj4fh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÙeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjceubj>)�”}”(hŒ u64 min_size”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjPfh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjMfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jRfŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j¥eŒc.i915_gem_evict_something”†”asbuh1hhjIfubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjIfubjÜ)�”}”(hŒmin_size”h]”hŒmin_size”…”�”}”(hj|fh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjIfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjceubj>)�”}”(hŒ u64 alignment”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj˜fh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj•fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jšfŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j¥eŒc.i915_gem_evict_something”†”asbuh1hhj‘fubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj‘fubjÜ)�”}”(hŒ alignment”h]”hŒ alignment”…”�”}”(hjÄfh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj‘fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjceubj>)�”}”(hŒunsigned long color”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÝfh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÙfubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÙfubjn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjùfh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÙfubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÙfubjÜ)�”}”(hŒcolor”h]”hŒcolor”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÙfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjceubj>)�”}”(hŒ u64 start”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj1gh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj.gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j3gŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j¥eŒc.i915_gem_evict_something”†”asbuh1hhj*gubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj*gubjÜ)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj]gh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj*gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjceubj>)�”}”(hŒu64 end”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjygh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjvgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j{gŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j¥eŒc.i915_gem_evict_something”†”asbuh1hhjrgubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjrgubjÜ)�”}”(hŒend”h]”hŒend”…”�”}”(hj¥gh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjrgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjceubj>)�”}”(hŒunsigned flags”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¾gh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjºgubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjºgubjÜ)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjÚgh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjºgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjceubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj*eh²hh³jpages_pin_count does not protect against eviction. To clarify: This is for freeing up virtual address space, not for freeing memory in e.g. the shrinker.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj&hh]”hŒ Parameters”…”�”}”(hj(hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$hubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´K€hj hubj)�”}”(hhh]”(j)�”}”(hŒ>``struct i915_address_space *vm`` address space to evict from ”h]”(j$)�”}”(hŒ!``struct i915_address_space *vm``”h]”j*)�”}”(hjEhh]”hŒstruct i915_address_space *vm”…”�”}”(hjGhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjChubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´K}hj?hubj@)�”}”(hhh]”hÚ)�”}”(hŒaddress space to evict from”h]”hŒaddress space to evict from”…”�”}”(hj^hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jZhh´K}hj[hubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj?hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jZhh´K}hjih´K�hj?iubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj#iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j>ih´K�hjpages_pin_count does not protect against eviction.”h]”hŒ×Since this function is only used to free up virtual address space it only ignores pinned vmas, and not object where the backing storage itself is pinned. Hence obj->pages_pin_count does not protect against eviction.”…”�”}”(hjCjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´K‹hj hubhÚ)�”}”(hŒfTo clarify: This is for freeing up virtual address space, not for freeing memory in e.g. the shrinker.”h]”hŒfTo clarify: This is for freeing up virtual address space, not for freeing memory in e.g. the shrinker.”…”�”}”(hjRjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´K�hj hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjödh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ$i915_gem_evict_for_node (C function)”Œc.i915_gem_evict_for_node”hNt”auh1j¶hjödh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ‡int i915_gem_evict_for_node (struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, struct drm_mm_node *target, unsigned int flags)”h]”jÓ)�”}”(hŒ†int i915_gem_evict_for_node(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, struct drm_mm_node *target, unsigned int flags)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj�jh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj}jh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´M=ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj}jh²hh³j�jh´M=ubj)�”}”(hŒi915_gem_evict_for_node”h]”jÜ)�”}”(hŒi915_gem_evict_for_node”h]”hŒi915_gem_evict_for_node”…”�”}”(hj¢jh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjžjubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj}jh²hh³j�jh´M=ubj8)�”}”(hŒk(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, struct drm_mm_node *target, unsigned int flags)”h]”(j>)�”}”(hŒstruct i915_address_space *vm”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj¾jh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjºjubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjºjubh)�”}”(hhh]”jÜ)�”}”(hŒi915_address_space”h]”hŒi915_address_space”…”�”}”(hjÜjh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÙjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÞjŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj¤jsbŒc.i915_gem_evict_for_node”†”asbuh1hhjºjubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjºjubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj kh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjºjubjÜ)�”}”(hŒvm”h]”hŒvm”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjºjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¶jubj>)�”}”(hŒstruct i915_gem_ww_ctx *ww”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj0kh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj,kubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj,kubh)�”}”(hhh]”jÜ)�”}”(hŒi915_gem_ww_ctx”h]”hŒi915_gem_ww_ctx”…”�”}”(hjNkh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjKkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jPkŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jøjŒc.i915_gem_evict_for_node”†”asbuh1hhj,kubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj,kubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjzkh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj,kubjÜ)�”}”(hŒww”h]”hŒww”…”�”}”(hj‡kh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj,kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¶jubj>)�”}”(hŒstruct drm_mm_node *target”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj kh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjœkubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjœkubh)�”}”(hhh]”jÜ)�”}”(hŒ drm_mm_node”h]”hŒ drm_mm_node”…”�”}”(hj¾kh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj»kubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÀkŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jøjŒc.i915_gem_evict_for_node”†”asbuh1hhjœkubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjœkubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjêkh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjœkubjÜ)�”}”(hŒtarget”h]”hŒtarget”…”�”}”(hj÷kh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjœkubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¶jubj>)�”}”(hŒunsigned int flags”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj lubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj lubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hj,lh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj lubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj lubjÜ)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjHlh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¶jubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj}jh²hh³j�jh´M=ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjyjh²hh³j�jh´M=ubah}”(h]”jtjah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j�jh´M=hjvjh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ-Evict vmas to make room for binding a new one”h]”hŒ-Evict vmas to make room for binding a new one”…”�”}”(hjrlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´M=hjolh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjvjh²hh³j�jh´M=ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójŠljôjŠljõ‰jö‰j÷‰uh1jÇh²hhjödh³Nh´Nubjù)�”}”(hXà**Parameters** ``struct i915_address_space *vm`` address space to evict from ``struct i915_gem_ww_ctx *ww`` An optional struct i915_gem_ww_ctx. ``struct drm_mm_node *target`` range (and color) to evict for ``unsigned int flags`` additional flags to control the eviction algorithm **Description** This function will try to evict vmas that overlap the target node. To clarify: This is for freeing up virtual address space, not for freeing memory in e.g. the shrinker.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj”lh]”hŒ Parameters”…”�”}”(hj–lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’lubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´MAhjŽlubj)�”}”(hhh]”(j)�”}”(hŒ>``struct i915_address_space *vm`` address space to evict from ”h]”(j$)�”}”(hŒ!``struct i915_address_space *vm``”h]”j*)�”}”(hj³lh]”hŒstruct i915_address_space *vm”…”�”}”(hjµlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj±lubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´M>hj­lubj@)�”}”(hhh]”hÚ)�”}”(hŒaddress space to evict from”h]”hŒaddress space to evict from”…”�”}”(hjÌlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÈlh´M>hjÉlubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj­lubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÈlh´M>hjªlubj)�”}”(hŒC``struct i915_gem_ww_ctx *ww`` An optional struct i915_gem_ww_ctx. ”h]”(j$)�”}”(hŒ``struct i915_gem_ww_ctx *ww``”h]”j*)�”}”(hjìlh]”hŒstruct i915_gem_ww_ctx *ww”…”�”}”(hjîlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjêlubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´M?hjælubj@)�”}”(hhh]”hÚ)�”}”(hŒ#An optional struct i915_gem_ww_ctx.”h]”hŒ#An optional struct i915_gem_ww_ctx.”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jmh´M?hjmubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjælubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jmh´M?hjªlubj)�”}”(hŒ>``struct drm_mm_node *target`` range (and color) to evict for ”h]”(j$)�”}”(hŒ``struct drm_mm_node *target``”h]”j*)�”}”(hj%mh]”hŒstruct drm_mm_node *target”…”�”}”(hj'mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj#mubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´M@hjmubj@)�”}”(hhh]”hÚ)�”}”(hŒrange (and color) to evict for”h]”hŒrange (and color) to evict for”…”�”}”(hj>mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j:mh´M@hj;mubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:mh´M@hjªlubj)�”}”(hŒJ``unsigned int flags`` additional flags to control the eviction algorithm ”h]”(j$)�”}”(hŒ``unsigned int flags``”h]”j*)�”}”(hj^mh]”hŒunsigned int flags”…”�”}”(hj`mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj\mubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´MAhjXmubj@)�”}”(hhh]”hÚ)�”}”(hŒ2additional flags to control the eviction algorithm”h]”hŒ2additional flags to control the eviction algorithm”…”�”}”(hjwmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jsmh´MAhjtmubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjXmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jsmh´MAhjªlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽlubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj™mh]”hŒ Description”…”�”}”(hj›mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—mubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´MChjŽlubhÚ)�”}”(hŒBThis function will try to evict vmas that overlap the target node.”h]”hŒBThis function will try to evict vmas that overlap the target node.”…”�”}”(hj¯mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´MBhjŽlubhÚ)�”}”(hŒfTo clarify: This is for freeing up virtual address space, not for freeing memory in e.g. the shrinker.”h]”hŒfTo clarify: This is for freeing up virtual address space, not for freeing memory in e.g. the shrinker.”…”�”}”(hj¾mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´MDhjŽlubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjödh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_gem_evict_vm (C function)”Œc.i915_gem_evict_vm”hNt”auh1j¶hjödh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒwint i915_gem_evict_vm (struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, struct drm_i915_gem_object **busy_bo)”h]”jÓ)�”}”(hŒvint i915_gem_evict_vm(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, struct drm_i915_gem_object **busy_bo)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjímh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjémh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´M¸ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjümh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjémh²hh³jûmh´M¸ubj)�”}”(hŒi915_gem_evict_vm”h]”jÜ)�”}”(hŒi915_gem_evict_vm”h]”hŒi915_gem_evict_vm”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj nubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjémh²hh³jûmh´M¸ubj8)�”}”(hŒa(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, struct drm_i915_gem_object **busy_bo)”h]”(j>)�”}”(hŒstruct i915_address_space *vm”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj*nh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj&nubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj&nubh)�”}”(hhh]”jÜ)�”}”(hŒi915_address_space”h]”hŒi915_address_space”…”�”}”(hjHnh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjEnubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jJnŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjnsbŒc.i915_gem_evict_vm”†”asbuh1hhj&nubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj&nubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjvnh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj&nubjÜ)�”}”(hŒvm”h]”hŒvm”…”�”}”(hjƒnh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj&nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj"nubj>)�”}”(hŒstruct i915_gem_ww_ctx *ww”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjœnh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj˜nubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj˜nubh)�”}”(hhh]”jÜ)�”}”(hŒi915_gem_ww_ctx”h]”hŒi915_gem_ww_ctx”…”�”}”(hjºnh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj·nubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j¼nŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jdnŒc.i915_gem_evict_vm”†”asbuh1hhj˜nubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj˜nubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjænh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj˜nubjÜ)�”}”(hŒww”h]”hŒww”…”�”}”(hjónh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj˜nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj"nubj>)�”}”(hŒ$struct drm_i915_gem_object **busy_bo”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj oh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjoubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjoubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_gem_object”h]”hŒdrm_i915_gem_object”…”�”}”(hj*oh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj'oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j,oŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jdnŒc.i915_gem_evict_vm”†”asbuh1hhjoubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjoubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjVoh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjoubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjcoh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjoubjÜ)�”}”(hŒbusy_bo”h]”hŒbusy_bo”…”�”}”(hjpoh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj"nubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjémh²hh³jûmh´M¸ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjåmh²hh³jûmh´M¸ubah}”(h]”jàmah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jûmh´M¸hjâmh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒEvict all idle vmas from a vm”h]”hŒEvict all idle vmas from a vm”…”�”}”(hjšoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´M¸hj—oh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjâmh²hh³jûmh´M¸ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój²ojôj²ojõ‰jö‰j÷‰uh1jÇh²hhjödh³Nh´Nubjù)�”}”(hXm**Parameters** ``struct i915_address_space *vm`` Address space to cleanse ``struct i915_gem_ww_ctx *ww`` An optional struct i915_gem_ww_ctx. If not NULL, i915_gem_evict_vm will be able to evict vma's locked by the ww as well. ``struct drm_i915_gem_object **busy_bo`` Optional pointer to struct drm_i915_gem_object. If not NULL, then in the event i915_gem_evict_vm() is unable to trylock an object for eviction, then **busy_bo** will point to it. -EBUSY is also returned. The caller must drop the vm->mutex, before trying again to acquire the contended lock. The caller also owns a reference to the object. **Description** This function evicts all vmas from a vm. This is used by the execbuf code as a last-ditch effort to defragment the address space. To clarify: This is for freeing up virtual address space, not for freeing memory in e.g. the shrinker.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¼oh]”hŒ Parameters”…”�”}”(hj¾oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºoubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´M¼hj¶oubj)�”}”(hhh]”(j)�”}”(hŒ;``struct i915_address_space *vm`` Address space to cleanse ”h]”(j$)�”}”(hŒ!``struct i915_address_space *vm``”h]”j*)�”}”(hjÛoh]”hŒstruct i915_address_space *vm”…”�”}”(hjÝoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÙoubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´M¹hjÕoubj@)�”}”(hhh]”hÚ)�”}”(hŒAddress space to cleanse”h]”hŒAddress space to cleanse”…”�”}”(hjôoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jðoh´M¹hjñoubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÕoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jðoh´M¹hjÒoubj)�”}”(hŒ˜``struct i915_gem_ww_ctx *ww`` An optional struct i915_gem_ww_ctx. If not NULL, i915_gem_evict_vm will be able to evict vma's locked by the ww as well. ”h]”(j$)�”}”(hŒ``struct i915_gem_ww_ctx *ww``”h]”j*)�”}”(hjph]”hŒstruct i915_gem_ww_ctx *ww”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´M»hjpubj@)�”}”(hhh]”hÚ)�”}”(hŒxAn optional struct i915_gem_ww_ctx. If not NULL, i915_gem_evict_vm will be able to evict vma's locked by the ww as well.”h]”hŒzAn optional struct i915_gem_ww_ctx. If not NULL, i915_gem_evict_vm will be able to evict vma’s locked by the ww as well.”…”�”}”(hj-ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´Mºhj*pubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)ph´M»hjÒoubj)�”}”(hX|``struct drm_i915_gem_object **busy_bo`` Optional pointer to struct drm_i915_gem_object. If not NULL, then in the event i915_gem_evict_vm() is unable to trylock an object for eviction, then **busy_bo** will point to it. -EBUSY is also returned. The caller must drop the vm->mutex, before trying again to acquire the contended lock. The caller also owns a reference to the object. ”h]”(j$)�”}”(hŒ(``struct drm_i915_gem_object **busy_bo``”h]”j*)�”}”(hjNph]”hŒ$struct drm_i915_gem_object **busy_bo”…”�”}”(hjPph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjLpubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´MÀhjHpubj@)�”}”(hhh]”hÚ)�”}”(hXROptional pointer to struct drm_i915_gem_object. If not NULL, then in the event i915_gem_evict_vm() is unable to trylock an object for eviction, then **busy_bo** will point to it. -EBUSY is also returned. The caller must drop the vm->mutex, before trying again to acquire the contended lock. The caller also owns a reference to the object.”h]”(hŒ•Optional pointer to struct drm_i915_gem_object. If not NULL, then in the event i915_gem_evict_vm() is unable to trylock an object for eviction, then ”…”�”}”(hjgph²hh³Nh´Nubj)�”}”(hŒ **busy_bo**”h]”hŒbusy_bo”…”�”}”(hjoph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjgpubhŒ² will point to it. -EBUSY is also returned. The caller must drop the vm->mutex, before trying again to acquire the contended lock. The caller also owns a reference to the object.”…”�”}”(hjgph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´M¼hjdpubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjHpubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jcph´MÀhjÒoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶oubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjœph]”hŒ Description”…”�”}”(hjžph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjšpubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´MÂhj¶oubhÚ)�”}”(hŒ(This function evicts all vmas from a vm.”h•]”hŒ(This function evicts all vmas from a vm.”…”�”}”(hj²ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´MÁhj¶oubhÚ)�”}”(hŒXThis is used by the execbuf code as a last-ditch effort to defragment the address space.”h]”hŒXThis is used by the execbuf code as a last-ditch effort to defragment the address space.”…”�”}”(hjÁph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´MÃhj¶oubhÚ)�”}”(hŒfTo clarify: This is for freeing up virtual address space, not for freeing memory in e.g. the shrinker.”h]”hŒfTo clarify: This is for freeing up virtual address space, not for freeing memory in e.g. the shrinker.”…”�”}”(hjÐph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:216: ./drivers/gpu/drm/i915/i915_gem_evict.c”h´MÆhj¶oubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjödh²hh³Nh´Nubeh}”(h]”Œbuffer-object-eviction”ah ]”h"]”Œbuffer object eviction”ah$]”h&]”uh1hÄhj.bh²hh³hÃh´KÐubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒBuffer Object Memory Shrinking”h]”hŒBuffer Object Memory Shrinking”…”�”}”(hjñph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjîph²hh³hÃh´KÜubhÚ)�”}”(hXThis section documents the interface function for shrinking memory usage of buffer object caches. Shrinking is used to make main memory available. Note that this is mostly orthogonal to evicting buffer objects, which has the goal to make space in gpu virtual address spaces.”h]”hXThis section documents the interface function for shrinking memory usage of buffer object caches. Shrinking is used to make main memory available. Note that this is mostly orthogonal to evicting buffer objects, which has the goal to make space in gpu virtual address spaces.”…”�”}”(hjÿph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´KÞhjîph²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_gem_shrink (C function)”Œc.i915_gem_shrink”hNt”auh1j¶hjîph²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒŸunsigned long i915_gem_shrink (struct i915_gem_ww_ctx *ww, struct drm_i915_private *i915, unsigned long target, unsigned long *nr_scanned, unsigned int shrink)”h]”jÓ)�”}”(hŒžunsigned long i915_gem_shrink(struct i915_gem_ww_ctx *ww, struct drm_i915_private *i915, unsigned long target, unsigned long *nr_scanned, unsigned int shrink)”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj&qh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj"qh²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´KNubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5qh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj"qh²hh³j4qh´KNubjn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjCqh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj"qh²hh³j4qh´KNubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj"qh²hh³j4qh´KNubj)�”}”(hŒi915_gem_shrink”h]”jÜ)�”}”(hŒi915_gem_shrink”h]”hŒi915_gem_shrink”…”�”}”(hjcqh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj_qubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj"qh²hh³j4qh´KNubj8)�”}”(hŒ�(struct i915_gem_ww_ctx *ww, struct drm_i915_private *i915, unsigned long target, unsigned long *nr_scanned, unsigned int shrink)”h]”(j>)�”}”(hŒstruct i915_gem_ww_ctx *ww”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj{qubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj{qubh)�”}”(hhh]”jÜ)�”}”(hŒi915_gem_ww_ctx”h]”hŒi915_gem_ww_ctx”…”�”}”(hj�qh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjšqubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jŸqŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjeqsbŒc.i915_gem_shrink”†”asbuh1hhj{qubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½qh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj{qubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjËqh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj{qubjÜ)�”}”(hŒww”h]”hŒww”…”�”}”(hjØqh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj{qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjwqubj>)�”}”(hŒstruct drm_i915_private *i915”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjñqh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjíqubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjíqubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jrŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j¹qŒc.i915_gem_shrink”†”asbuh1hhjíqubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjíqubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj;rh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjíqubjÜ)�”}”(hŒi915”h]”hŒi915”…”�”}”(hjHrh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjíqubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjwqubj>)�”}”(hŒunsigned long target”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjarh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj]rubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjorh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj]rubjn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj}rh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj]rubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj]rubjÜ)�”}”(hŒtarget”h]”hŒtarget”…”�”}”(hj™rh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj]rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjwqubj>)�”}”(hŒunsigned long *nr_scanned”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj²rh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj®rubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj®rubjn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÎrh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj®rubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj®rubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjêrh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj®rubjÜ)�”}”(hŒ nr_scanned”h]”hŒ nr_scanned”…”�”}”(hj÷rh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj®rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjwqubj>)�”}”(hŒunsigned int shrink”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj subj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj subjn)�”}”(hŒint”h]”hŒint”…”�”}”(hj,sh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj subj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:sh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj subjÜ)�”}”(hŒshrink”h]”hŒshrink”…”�”}”(hjHsh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjwqubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj"qh²hh³j4qh´KNubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjqh²hh³j4qh´KNubah}”(h]”jqah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j4qh´KNhjqh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒShrink buffer object caches”h]”hŒShrink buffer object caches”…”�”}”(hjrsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´KNhjosh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjqh²hh³j4qh´KNubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójŠsjôjŠsjõ‰jö‰j÷‰uh1jÇh²hhjîph³Nh´Nubjù)�”}”(hX **Parameters** ``struct i915_gem_ww_ctx *ww`` i915 gem ww acquire ctx, or NULL ``struct drm_i915_private *i915`` i915 device ``unsigned long target`` amount of memory to make available, in pages ``unsigned long *nr_scanned`` optional output for number of pages scanned (incremental) ``unsigned int shrink`` control flags for selecting cache types **Description** This function is the main interface to the shrinker. It will try to release up to **target** pages of main memory backing storage from buffer objects. Selection of the specific caches can be done with **flags**. This is e.g. useful when purgeable objects should be removed from caches preferentially. Note that it's not guaranteed that released amount is actually available as free system memory - the pages might still be in-used to due to other reasons (like cpu mmaps) or the mm core has reused them before we could grab them. Therefore code that needs to explicitly shrink buffer objects caches (e.g. to avoid deadlocks in memory reclaim) must fall back to i915_gem_shrink_all(). Also note that any kind of pinning (both per-vma address space pins and backing storage pins at the buffer object level) result in the shrinker code having to skip the object. **Return** The number of pages of backing storage actually released.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj”sh]”hŒ Parameters”…”�”}”(hj–sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’subah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´KRhjŽsubj)�”}”(hhh]”(j)�”}”(hŒ@``struct i915_gem_ww_ctx *ww`` i915 gem ww acquire ctx, or NULL ”h]”(j$)�”}”(hŒ``struct i915_gem_ww_ctx *ww``”h]”j*)�”}”(hj³sh]”hŒstruct i915_gem_ww_ctx *ww”…”�”}”(hjµsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj±subah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´KOhj­subj@)�”}”(hhh]”hÚ)�”}”(hŒ i915 gem ww acquire ctx, or NULL”h]”hŒ i915 gem ww acquire ctx, or NULL”…”�”}”(hjÌsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÈsh´KOhjÉsubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj­subeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÈsh´KOhjªsubj)�”}”(hŒ.``struct drm_i915_private *i915`` i915 device ”h]”(j$)�”}”(hŒ!``struct drm_i915_private *i915``”h]”j*)�”}”(hjìsh]”hŒstruct drm_i915_private *i915”…”�”}”(hjîsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjêsubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´KPhjæsubj@)�”}”(hhh]”hÚ)�”}”(hŒ i915 device”h]”hŒ i915 device”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jth´KPhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjæsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jth´KPhjªsubj)�”}”(hŒF``unsigned long target`` amount of memory to make available, in pages ”h]”(j$)�”}”(hŒ``unsigned long target``”h]”j*)�”}”(hj%th]”hŒunsigned long target”…”�”}”(hj'th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj#tubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´KQhjtubj@)�”}”(hhh]”hÚ)�”}”(hŒ,amount of memory to make available, in pages”h]”hŒ,amount of memory to make available, in pages”…”�”}”(hj>th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j:th´KQhj;tubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:th´KQhjªsubj)�”}”(hŒX``unsigned long *nr_scanned`` optional output for number of pages scanned (incremental) ”h]”(j$)�”}”(hŒ``unsigned long *nr_scanned``”h]”j*)�”}”(hj^th]”hŒunsigned long *nr_scanned”…”�”}”(hj`th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj\tubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´KRhjXtubj@)�”}”(hhh]”hÚ)�”}”(hŒ9optional output for number of pages scanned (incremental)”h]”hŒ9optional output for number of pages scanned (incremental)”…”�”}”(hjwth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jsth´KRhjttubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjXtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jsth´KRhjªsubj)�”}”(hŒ@``unsigned int shrink`` control flags for selecting cache types ”h]”(j$)�”}”(hŒ``unsigned int shrink``”h]”j*)�”}”(hj—th]”hŒunsigned int shrink”…”�”}”(hj™th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj•tubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´KShj‘tubj@)�”}”(hhh]”hÚ)�”}”(hŒ'control flags for selecting cache types”h]”hŒ'control flags for selecting cache types”…”�”}”(hj°th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¬th´KShj­tubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj‘tubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¬th´KShjªsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽsubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjÒth]”hŒ Description”…”�”}”(hjÔth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÐtubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´KUhjŽsubhÚ)�”}”(hX,This function is the main interface to the shrinker. It will try to release up to **target** pages of main memory backing storage from buffer objects. Selection of the specific caches can be done with **flags**. This is e.g. useful when purgeable objects should be removed from caches preferentially.”h]”(hŒRThis function is the main interface to the shrinker. It will try to release up to ”…”�”}”(hjèth²hh³Nh´Nubj)�”}”(hŒ **target**”h]”hŒtarget”…”�”}”(hjðth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjètubhŒm pages of main memory backing storage from buffer objects. Selection of the specific caches can be done with ”…”�”}”(hjèth²hh³Nh´Nubj)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjètubhŒZ. This is e.g. useful when purgeable objects should be removed from caches preferentially.”…”�”}”(hjèth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´KThjŽsubhÚ)�”}”(hX~Note that it's not guaranteed that released amount is actually available as free system memory - the pages might still be in-used to due to other reasons (like cpu mmaps) or the mm core has reused them before we could grab them. Therefore code that needs to explicitly shrink buffer objects caches (e.g. to avoid deadlocks in memory reclaim) must fall back to i915_gem_shrink_all().”h]”hX€Note that it’s not guaranteed that released amount is actually available as free system memory - the pages might still be in-used to due to other reasons (like cpu mmaps) or the mm core has reused them before we could grab them. Therefore code that needs to explicitly shrink buffer objects caches (e.g. to avoid deadlocks in memory reclaim) must fall back to i915_gem_shrink_all().”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´KYhjŽsubhÚ)�”}”(hŒ¯Also note that any kind of pinning (both per-vma address space pins and backing storage pins at the buffer object level) result in the shrinker code having to skip the object.”h]”hŒ¯Also note that any kind of pinning (both per-vma address space pins and backing storage pins at the buffer object level) result in the shrinker code having to skip the object.”…”�”}”(hj*uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´K_hjŽsubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj;uh]”hŒReturn”…”�”}”(hj=uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9uubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´KchjŽsubhÚ)�”}”(hŒ9The number of pages of backing storage actually released.”h]”hŒ9The number of pages of backing storage actually released.”…”�”}”(hjQuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´KdhjŽsubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjîph²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ i915_gem_shrink_all (C function)”Œc.i915_gem_shrink_all”hNt”auh1j¶hjîph²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒAunsigned long i915_gem_shrink_all (struct drm_i915_private *i915)”h]”jÓ)�”}”(hŒ@unsigned long i915_gem_shrink_all(struct drm_i915_private *i915)”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj€uh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj|uh²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´Mubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj|uh²hh³jŽuh´Mubjn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj�uh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj|uh²hh³jŽuh´Mubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj|uh²hh³jŽuh´Mubj)�”}”(hŒi915_gem_shrink_all”h]”jÜ)�”}”(hŒi915_gem_shrink_all”h]”hŒi915_gem_shrink_all”…”�”}”(hj½uh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¹uubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj|uh²hh³jŽuh´Mubj8)�”}”(hŒ(struct drm_i915_private *i915)”h]”j>)�”}”(hŒstruct drm_i915_private *i915”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÙuh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjÕuubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÕuubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hj÷uh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjôuubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jùuŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj¿usbŒc.i915_gem_shrink_all”†”asbuh1hhjÕuubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÕuubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj%vh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÕuubjÜ)�”}”(hŒi915”h]”hŒi915”…”�”}”(hj2vh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÕuubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÑuubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj|uh²hh³jŽuh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjxuh²hh³jŽuh´Mubah}”(h]”jsuah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jŽuh´Mhjuuh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ&Shrink buffer object caches completely”h]”hŒ&Shrink buffer object caches completely”…”�”}”(hj\vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MhjYvh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjuuh²hh³jŽuh´Mubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójtvjôjtvjõ‰jö‰j÷‰uh1jÇh²hhjîph³Nh´Nubjù)�”}”(hXö**Parameters** ``struct drm_i915_private *i915`` i915 device **Description** This is a simple wrapper around i915_gem_shrink() to aggressively shrink all caches completely. It also first waits for and retires all outstanding requests to also be able to release backing storage for active objects. This should only be used in code to intentionally quiescent the gpu or as a last-ditch effort when memory seems to have run out. **Return** The number of pages of backing storage actually released.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj~vh]”hŒ Parameters”…”�”}”(hj€vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|vubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M hjxvubj)�”}”(hhh]”j)�”}”(hŒ.``struct drm_i915_private *i915`` i915 device ”h]”(j$)�”}”(hŒ!``struct drm_i915_private *i915``”h]”j*)�”}”(hj�vh]”hŒstruct drm_i915_private *i915”…”�”}”(hjŸvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj›vubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´Mhj—vubj@)�”}”(hhh]”hÚ)�”}”(hŒ i915 device”h]”hŒ i915 device”…”�”}”(hj¶vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j²vh´Mhj³vubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj—vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j²vh´Mhj”vubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjxvubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjØvh]”hŒ Description”…”�”}”(hjÚvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖvubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M hjxvubhÚ)�”}”(hŒÛThis is a simple wrapper around i915_gem_shrink() to aggressively shrink all caches completely. It also first waits for and retires all outstanding requests to also be able to release backing storage for active objects.”h]”hŒÛThis is a simple wrapper around i915_gem_shrink() to aggressively shrink all caches completely. It also first waits for and retires all outstanding requests to also be able to release backing storage for active objects.”…”�”}”(hjîvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MhjxvubhÚ)�”}”(hŒ€This should only be used in code to intentionally quiescent the gpu or as a last-ditch effort when memory seems to have run out.”h]”hŒ€This should only be used in code to intentionally quiescent the gpu or as a last-ditch effort when memory seems to have run out.”…”�”}”(hjývh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M hjxvubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjwh]”hŒReturn”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj wubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MhjxvubhÚ)�”}”(hŒ9The number of pages of backing storage actually released.”h]”hŒ9The number of pages of backing storage actually released.”…”�”}”(hj$wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´Mhjxvubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjîph²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ.i915_gem_object_make_unshrinkable (C function)”Œ#c.i915_gem_object_make_unshrinkable”hNt”auh1j¶hjîph²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒHvoid i915_gem_object_make_unshrinkable (struct drm_i915_gem_object *obj)”h]”jÓ)�”}”(hŒGvoid i915_gem_object_make_unshrinkable(struct drm_i915_gem_object *obj)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjSwh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjOwh²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MÜubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjOwh²hh³jawh´MÜubj)�”}”(hŒ!i915_gem_object_make_unshrinkable”h]”jÜ)�”}”(hŒ!i915_gem_object_make_unshrinkable”h]”hŒ!i915_gem_object_make_unshrinkable”…”�”}”(hjtwh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjpwubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjOwh²hh³jawh´MÜubj8)�”}”(hŒ!(struct drm_i915_gem_object *obj)”h]”j>)�”}”(hŒstruct drm_i915_gem_object *obj”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj�wh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjŒwubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŒwubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_gem_object”h]”hŒdrm_i915_gem_object”…”�”}”(hj®wh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj«wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j°wŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjvwsbŒ#c.i915_gem_object_make_unshrinkable”†”asbuh1hhjŒwubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŒwubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÜwh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjŒwubjÜ)�”}”(hŒobj”h]”hŒobj”…”�”}”(hjéwh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŒwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjˆwubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjOwh²hh³jawh´MÜubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjKwh²hh³jawh´MÜubah}”(h]”jFwah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jawh´MÜhjHwh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒÅHide the object from the shrinker. By default all object types that support shrinking(see IS_SHRINKABLE), will also make the object visible to the shrinker after allocating the system memory pages.”h]”hŒÅHide the object from the shrinker. By default all object types that support shrinking(see IS_SHRINKABLE), will also make the object visible to the shrinker after allocating the system memory pages.”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MÜhjxh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjHwh²hh³jawh´MÜubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój+xjôj+xjõ‰jö‰j÷‰uh1jÇh²hhjîph³Nh´Nubjù)�”}”(hŒá**Parameters** ``struct drm_i915_gem_object *obj`` The GEM object. **Description** This is typically used for special kernel internal objects that can't be easily processed by the shrinker, like if they are perma-pinned.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj5xh]”hŒ Parameters”…”�”}”(hj7xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3xubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´Màhj/xubj)�”}”(hhh]”j)�”}”(hŒ4``struct drm_i915_gem_object *obj`` The GEM object. ”h]”(j$)�”}”(hŒ#``struct drm_i915_gem_object *obj``”h]”j*)�”}”(hjTxh]”hŒstruct drm_i915_gem_object *obj”…”�”}”(hjVxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjRxubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MàhjNxubj@)�”}”(hhh]”hÚ)�”}”(hŒThe GEM object.”h]”hŒThe GEM object.”…”�”}”(hjmxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jixh´Màhjjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjNxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jixh´MàhjKxubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/xubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj�xh]”hŒ Description”…”�”}”(hj‘xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�xubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´Mâhj/xubhÚ)�”}”(hŒ‰This is typically used for special kernel internal objects that can't be easily processed by the shrinker, like if they are perma-pinned.”h]”hŒ‹This is typically used for special kernel internal objects that can’t be easily processed by the shrinker, like if they are perma-pinned.”…”�”}”(hj¥xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´Máhj/xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjîph²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ.__i915_gem_object_make_shrinkable (C function)”Œ#c.__i915_gem_object_make_shrinkable”hNt”auh1j¶hjîph²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒHvoid __i915_gem_object_make_shrinkable (struct drm_i915_gem_object *obj)”h]”jÓ)�”}”(hŒGvoid __i915_gem_object_make_shrinkable(struct drm_i915_gem_object *obj)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÔxh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÐxh²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´Mubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÐxh²hh³jâxh´Mubj)�”}”(hŒ!__i915_gem_object_make_shrinkable”h]”jÜ)�”}”(hŒ!__i915_gem_object_make_shrinkable”h]”hŒ!__i915_gem_object_make_shrinkable”…”�”}”(hjõxh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjñxubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÐxh²hh³jâxh´Mubj8)�”}”(hŒ!(struct drm_i915_gem_object *obj)”h]”j>)�”}”(hŒstruct drm_i915_gem_object *obj”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj yubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj yubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_gem_object”h]”hŒdrm_i915_gem_object”…”�”}”(hj/yh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj,yubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j1yŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj÷xsbŒ#c.__i915_gem_object_make_shrinkable”†”asbuh1hhj yubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj yubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj]yh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj yubjÜ)�”}”(hŒobj”h]”hŒobj”…”�”}”(hjjyh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj yubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÐxh²hh³jâxh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÌxh²hh³jâxh´Mubah}”(h]”jÇxah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jâxh´MhjÉxh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒzMove the object to the tail of the shrinkable list. Objects on this list might be swapped out. Used with WILLNEED objects.”h]”hŒzMove the object to the tail of the shrinkable list. Objects on this list might be swapped out. Used with WILLNEED objects.”…”�”}”(hj”yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´Mhj‘yh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÉxh²hh³jâxh´Mubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój¬yjôj¬yjõ‰jö‰j÷‰uh1jÇh²hhjîph³Nh´Nubjù)�”}”(hŒü**Parameters** ``struct drm_i915_gem_object *obj`` The GEM object. **Description** DO NOT USE. This is intended to be called on very special objects that don't yet have mm.pages, but are guaranteed to have potentially reclaimable pages underneath.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¶yh]”hŒ Parameters”…”�”}”(hj¸yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´yubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´Mhj°yubj)�”}”(hhh]”j)�”}”(hŒ4``struct drm_i915_gem_object *obj`` The GEM object. ”h]”(j$)�”}”(hŒ#``struct drm_i915_gem_object *obj``”h]”j*)�”}”(hjÕyh]”hŒstruct drm_i915_gem_object *obj”…”�”}”(hj×yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÓyubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MhjÏyubj@)�”}”(hhh]”hÚ)�”}”(hŒThe GEM object.”h]”hŒThe GEM object.”…”�”}”(hjîyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jêyh´Mhjëyubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÏyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêyh´MhjÌyubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°yubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjzh]”hŒ Description”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´Mhj°yubhÚ)�”}”(hŒ¤DO NOT USE. This is intended to be called on very special objects that don't yet have mm.pages, but are guaranteed to have potentially reclaimable pages underneath.”h]”hŒ¦DO NOT USE. This is intended to be called on very special objects that don’t yet have mm.pages, but are guaranteed to have potentially reclaimable pages underneath.”…”�”}”(hj&zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´Mhj°yubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjîph²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ-__i915_gem_object_make_purgeable (C function)”Œ"c.__i915_gem_object_make_purgeable”hNt”auh1j¶hjîph²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒGvoid __i915_gem_object_make_purgeable (struct drm_i915_gem_object *obj)”h]”jÓ)�”}”(hŒFvoid __i915_gem_object_make_purgeable(struct drm_i915_gem_object *obj)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjUzh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjQzh²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M'ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjQzh²hh³jczh´M'ubj)�”}”(hŒ __i915_gem_object_make_purgeable”h]”jÜ)�”}”(hŒ __i915_gem_object_make_purgeable”h]”hŒ __i915_gem_object_make_purgeable”…”�”}”(hjvzh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjrzubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjQzh²hh³jczh´M'ubj8)�”}”(hŒ!(struct drm_i915_gem_object *obj)”h]”j>)�”}”(hŒstruct drm_i915_gem_object *obj”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj’zh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjŽzubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŽzubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_gem_object”h]”hŒdrm_i915_gem_object”…”�”}”(hj°zh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj­zubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j²zŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjxzsbŒ"c.__i915_gem_object_make_purgeable”†”asbuh1hhjŽzubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŽzubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÞzh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjŽzubjÜ)�”}”(hŒobj”h]”hŒobj”…”�”}”(hjëzh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŽzubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjŠzubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjQzh²hh³jczh´M'ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjMzh²hh³jczh´M'ubah}”(h]”jHzah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jczh´M'hjJzh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒyMove the object to the tail of the purgeable list. Objects on this list might be swapped out. Used with DONTNEED objects.”h]”hŒyMove the object to the tail of the purgeable list. Objects on this list might be swapped out. Used with DONTNEED objects.”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M'hj{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjJzh²hh³jczh´M'ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój-{jôj-{jõ‰jö‰j÷‰uh1jÇh²hhjîph³Nh´Nubjù)�”}”(hŒü**Parameters** ``struct drm_i915_gem_object *obj`` The GEM object. **Description** DO NOT USE. This is intended to be called on very special objects that don't yet have mm.pages, but are guaranteed to have potentially reclaimable pages underneath.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj7{h]”hŒ Parameters”…”�”}”(hj9{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M+hj1{ubj)�”}”(hhh]”j)�”}”(hŒ4``struct drm_i915_gem_object *obj`` The GEM object. ”h]”(j$)�”}”(hŒ#``struct drm_i915_gem_object *obj``”h]”j*)�”}”(hjV{h]”hŒstruct drm_i915_gem_object *obj”…”�”}”(hjX{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjT{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M*hjP{ubj@)�”}”(hhh]”hÚ)�”}”(hŒThe GEM object.”h]”hŒThe GEM object.”…”�”}”(hjo{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jk{h´M*hjl{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjP{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jk{h´M*hjM{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1{ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj‘{h]”hŒ Description”…”�”}”(hj“{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M,hj1{ubhÚ)�”}”(hŒ¤DO NOT USE. This is intended to be called on very special objects that don't yet have mm.pages, but are guaranteed to have potentially reclaimable pages underneath.”h]”hŒ¦DO NOT USE. This is intended to be called on very special objects that don’t yet have mm.pages, but are guaranteed to have potentially reclaimable pages underneath.”…”�”}”(hj§{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M+hj1{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjîph²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ,i915_gem_object_make_shrinkable (C function)”Œ!c.i915_gem_object_make_shrinkable”hNt”auh1j¶hjîph²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒFvoid i915_gem_object_make_shrinkable (struct drm_i915_gem_object *obj)”h]”jÓ)�”}”(hŒEvoid i915_gem_object_make_shrinkable(struct drm_i915_gem_object *obj)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÖ{h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÒ{h²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M7ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÒ{h²hh³jä{h´M7ubj)�”}”(hŒi915_gem_object_make_shrinkable”h]”jÜ)�”}”(hŒi915_gem_object_make_shrinkable”h]”hŒi915_gem_object_make_shrinkable”…”�”}”(hj÷{h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjó{ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÒ{h²hh³jä{h´M7ubj8)�”}”(hŒ!(struct drm_i915_gem_object *obj)”h]”j>)�”}”(hŒstruct drm_i915_gem_object *obj”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj|ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj |h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj|ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_gem_object”h]”hŒdrm_i915_gem_object”…”�”}”(hj1|h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj.|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j3|Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjù{sbŒ!c.i915_gem_object_make_shrinkable”†”asbuh1hhj|ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj|ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj_|h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj|ubjÜ)�”}”(hŒobj”h]”hŒobj”…”�”}”(hjl|h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj |ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÒ{h²hh³jä{h´M7ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÎ{h²hh³jä{h´M7ubah}”(h]”jÉ{ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jä{h´M7hjË{h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒzMove the object to the tail of the shrinkable list. Objects on this list might be swapped out. Used with WILLNEED objects.”h]”hŒzMove the object to the tail of the shrinkable list. Objects on this list might be swapped out. Used with WILLNEED objects.”…”�”}”(hj–|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M7hj“|h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjË{h²hh³jä{h´M7ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój®|jôj®|jõ‰jö‰j÷‰uh1jÇh²hhjîph³Nh´Nubjù)�”}”(hŒÝ**Parameters** ``struct drm_i915_gem_object *obj`` The GEM object. **Description** MUST only be called on objects which have backing pages. MUST be balanced with previous call to i915_gem_object_make_unshrinkable().”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¸|h]”hŒ Parameters”…”�”}”(hjº|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶|ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M;hj²|ubj)�”}”(hhh]”j)�”}”(hŒ4``struct drm_i915_gem_object *obj`` The GEM object. ”h]”(j$)�”}”(hŒ#``struct drm_i915_gem_object *obj``”h]”j*)�”}”(hj×|h]”hŒstruct drm_i915_gem_object *obj”…”�”}”(hjÙ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÕ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M:hjÑ|ubj@)�”}”(hhh]”hÚ)�”}”(hŒThe GEM object.”h]”hŒThe GEM object.”…”�”}”(hjð|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jì|h´M:hjí|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÑ|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jì|h´M:hjÎ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj²|ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj}h]”hŒ Description”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M<hj²|ubhÚ)�”}”(hŒ8MUST only be called on objects which have backing pages.”h]”hŒ8MUST only be called on objects which have backing pages.”…”�”}”(hj(}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M;hj²|ubhÚ)�”}”(hŒKMUST be balanced with previous call to i915_gem_object_make_unshrinkable().”h]”hŒKMUST be balanced with previous call to i915_gem_object_make_unshrinkable().”…”�”}”(hj7}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´M=hj²|ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjîph²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ+i915_gem_object_make_purgeable (C function)”Œ c.i915_gem_object_make_purgeable”hNt”auh1j¶hjîph²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒEvoid i915_gem_object_make_purgeable (struct drm_i915_gem_object *obj)”h]”jÓ)�”}”(hŒDvoid i915_gem_object_make_purgeable(struct drm_i915_gem_object *obj)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjf}h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjb}h²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MGubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hju}h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjb}h²hh³jt}h´MGubj)�”}”(hŒi915_gem_object_make_purgeable”h]”jÜ)�”}”(hŒi915_gem_object_make_purgeable”h]”hŒi915_gem_object_make_purgeable”…”�”}”(hj‡}h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjƒ}ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjb}h²hh³jt}h´MGubj8)�”}”(hŒ!(struct drm_i915_gem_object *obj)”h]”j>)�”}”(hŒstruct drm_i915_gem_object *obj”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj£}h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjŸ}ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°}h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŸ}ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_gem_object”h]”hŒdrm_i915_gem_object”…”�”}”(hjÁ}h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¾}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÃ}Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj‰}sbŒ c.i915_gem_object_make_purgeable”†”asbuh1hhjŸ}ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá}h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŸ}ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjï}h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjŸ}ubjÜ)�”}”(hŒobj”h]”hŒobj”…”�”}”(hjü}h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŸ}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj›}ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjb}h²hh³jt}h´MGubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj^}h²hh³jt}h´MGubah}”(h]”jY}ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jt}h´MGhj[}h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒÊMove the object to the tail of the purgeable list. Used with DONTNEED objects. Unlike with shrinkable objects, the shrinker will attempt to discard the backing pages, instead of trying to swap them out.”h]”hŒÊMove the object to the tail of the purgeable list. Used with DONTNEED objects. Unlike with shrinkable objects, the shrinker will attempt to discard the backing pages, instead of trying to swap them out.”…”�”}”(hj&~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MGhj#~h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj[}h²hh³jt}h´MGubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój>~jôj>~jõ‰jö‰j÷‰uh1jÇh²hhjîph³Nh´Nubjù)�”}”(hŒÝ**Parameters** ``struct drm_i915_gem_object *obj`` The GEM object. **Description** MUST only be called on objects which have backing pages. MUST be balanced with previous call to i915_gem_object_make_unshrinkable().”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjH~h]”hŒ Parameters”…”�”}”(hjJ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjF~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MKhjB~ubj)�”}”(hhh]”j)�”}”(hŒ4``struct drm_i915_gem_object *obj`` The GEM object. ”h]”(j$)�”}”(hŒ#``struct drm_i915_gem_object *obj``”h]”j*)�”}”(hjg~h]”hŒstruct drm_i915_gem_object *obj”…”�”}”(hji~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hje~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MKhja~ubj@)�”}”(hhh]”hÚ)�”}”(hŒThe GEM object.”h]”hŒThe GEM object.”…”�”}”(hj€~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j|~h´MKhj}~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hja~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j|~h´MKhj^~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjB~ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj¢~h]”hŒ Description”…”�”}”(hj¤~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MMhjB~ubhÚ)�”}”(hŒ8MUST only be called on objects which have backing pages.”h]”hŒ8MUST only be called on objects which have backing pages.”…”�”}”(hj¸~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MLhjB~ubhÚ)�”}”(hŒKMUST be balanced with previous call to i915_gem_object_make_unshrinkable().”h]”hŒKMUST be balanced with previous call to i915_gem_object_make_unshrinkable().”…”�”}”(hjÇ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:227: ./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c”h´MNhjB~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjîph²hh³Nh´Nubeh}”(h]”Œbuffer-object-memory-shrinking”ah ]”h"]”Œbuffer object memory shrinking”ah$]”h&]”uh1hÄhj.bh²hh³hÃh´KÜubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒBatchbuffer Parsing”h]”hŒBatchbuffer Parsing”…”�”}”(hjè~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjå~h²hh³hÃh´KçubhÚ)�”}”(hXÆMotivation: Certain OpenGL features (e.g. transform feedback, performance monitoring) require userspace code to submit batches containing commands such as MI_LOAD_REGISTER_IMM to access various registers. Unfortunately, some generations of the hardware will noop these commands in "unsecure" batches (which includes all userspace batches submitted via i915) even though the commands may be safe and represent the intended programming model of the device.”h]”hXÊMotivation: Certain OpenGL features (e.g. transform feedback, performance monitoring) require userspace code to submit batches containing commands such as MI_LOAD_REGISTER_IMM to access various registers. Unfortunately, some generations of the hardware will noop these commands in “unsecureâ€� batches (which includes all userspace batches submitted via i915) even though the commands may be safe and represent the intended programming model of the device.”…”�”}”(hjö~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:233: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´K,hjå~h²hubhÚ)�”}”(hX6The software command parser is similar in operation to the command parsing done in hardware for unsecure batches. However, the software parser allows some operations that would be noop'd by hardware, if the parser determines the operation is safe, and submits the batch as "secure" to prevent hardware parsing.”h]”hX<The software command parser is similar in operation to the command parsing done in hardware for unsecure batches. However, the software parser allows some operations that would be noop’d by hardware, if the parser determines the operation is safe, and submits the batch as “secureâ€� to prevent hardware parsing.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:233: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´K5hjå~h²hubhÚ)�”}”(hŒ�Threats: At a high level, the hardware (and software) checks attempt to prevent granting userspace undue privileges. There are three categories of privilege.”h]”hŒ�Threats: At a high level, the hardware (and software) checks attempt to prevent granting userspace undue privileges. There are three categories of privilege.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:233: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´K;hjå~h²hubhÚ)�”}”(hŒŽFirst, commands which are explicitly defined as privileged or which should only be used by the kernel driver. The parser rejects such commands”h]”hŒŽFirst, commands which are explicitly defined as privileged or which should only be used by the kernel driver. The parser rejects such commands”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:233: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´K?hjå~h²hubhÚ)�”}”(hŒÔSecond, commands which access registers. To support correct/enhanced userspace functionality, particularly certain OpenGL extensions, the parser provides a whitelist of registers which userspace may safely access”h]”hŒÔSecond, commands which access registers. To support correct/enhanced userspace functionality, particularly certain OpenGL extensions, the parser provides a whitelist of registers which userspace may safely access”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:233: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´KBhjå~h²hubhÚ)�”}”(hŒsThird, commands which access privileged memory (i.e. GGTT, HWS page, etc). The parser always rejects such commands.”h]”hŒsThird, commands which access privileged memory (i.e. GGTT, HWS page, etc). The parser always rejects such commands.”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:233: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´KFhjå~h²hubhÚ)�”}”(hŒ–The majority of the problematic commands fall in the MI_* range, with only a few specific commands on each engine (e.g. PIPE_CONTROL and MI_FLUSH_DW).”h]”hŒ–The majority of the problematic commands fall in the MI_* range, with only a few specific commands on each engine (e.g. PIPE_CONTROL and MI_FLUSH_DW).”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:233: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´KIhjå~h²hubhÚ)�”}”(hŒ�Implementation: Each engine maintains tables of commands and registers which the parser uses in scanning batch buffers submitted to that engine.”h]”hŒ�Implementation: Each engine maintains tables of commands and registers which the parser uses in scanning batch buffers submitted to that engine.”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:233: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´KLhjå~h²hubhÚ)�”}”(hX¦Since the set of commands that the parser must check for is significantly smaller than the number of commands supported, the parser tables contain only those commands required by the parser. This generally works because command opcode ranges have standard command length encodings. So for commands that the parser does not need to check, it can easily skip them. This is implemented via a per-engine length decoding vfunc.”h]”hX¦Since the set of commands that the parser must check for is significantly smaller than the number of commands supported, the parser tables contain only those commands required by the parser. This generally works because command opcode ranges have standard command length encodings. So for commands that the parser does not need to check, it can easily skip them. This is implemented via a per-engine length decoding vfunc.”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:233: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´KPhjå~h²hubhÚ)�”}”(hXUnfortunately, there are a number of commands that do not follow the standard length encoding for their opcode range, primarily amongst the MI_* commands. To handle this, the parser provides a way to define explicit "skip" entries in the per-engine command tables.”h]”hX Unfortunately, there are a number of commands that do not follow the standard length encoding for their opcode range, primarily amongst the MI_* commands. To handle this, the parser provides a way to define explicit “skipâ€� entries in the per-engine command tables.”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:233: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´KWhjå~h²hubhÚ)�”}”(hŒíOther command table entries map fairly directly to high level categories mentioned above: rejected, register whitelist. The parser implements a number of checks, including the privileged memory checks, via a general bitmasking mechanism.”h]”hŒíOther command table entries map fairly directly to high level categories mentioned above: rejected, register whitelist. The parser implements a number of checks, including the privileged memory checks, via a general bitmasking mechanism.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:233: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´K\hjå~h²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ)intel_engine_init_cmd_parser (C function)”Œc.intel_engine_init_cmd_parser”hNt”auh1j¶hjå~h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒAint intel_engine_init_cmd_parser (struct intel_engine_cs *engine)”h]”jÓ)�”}”(hŒ@int intel_engine_init_cmd_parser(struct intel_engine_cs *engine)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj°h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M´ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj°h²hh³jÂh´M´ubj)�”}”(hŒintel_engine_init_cmd_parser”h]”jÜ)�”}”(hŒintel_engine_init_cmd_parser”h]”hŒintel_engine_init_cmd_parser”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÑubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj°h²hh³jÂh´M´ubj8)�”}”(hŒ (struct intel_engine_cs *engine)”h]”j>)�”}”(hŒstruct intel_engine_cs *engine”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjíubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjíubh)�”}”(hhh]”jÜ)�”}”(hŒintel_engine_cs”h]”hŒintel_engine_cs”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj €ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j€Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj×sbŒc.intel_engine_init_cmd_parser”†”asbuh1hhjíubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/€h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjíubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj=€h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjíubjÜ)�”}”(hŒengine”h]”hŒengine”…”�”}”(hjJ€h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjéubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj°h²hh³jÂh´M´ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj¬h²hh³jÂh´M´ubah}”(h]”j§ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÂh´M´hj©h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ+set cmd parser related fields for an engine”h]”hŒ+set cmd parser related fields for an engine”…”�”}”(hjt€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M´hjq€h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj©h²hh³jÂh´M´ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójŒ€jôjŒ€jõ‰jö‰j÷‰uh1jÇh²hhjå~h³Nh´Nubjù)�”}”(hX**Parameters** ``struct intel_engine_cs *engine`` the engine to initialize **Description** Optionally initializes fields related to batch buffer command parsing in the struct intel_engine_cs based on whether the platform requires software command parsing.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj–€h]”hŒ Parameters”…”�”}”(hj˜€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M¸hj�€ubj)�”}”(hhh]”j)�”}”(hŒ<``struct intel_engine_cs *engine`` the engine to initialize ”h]”(j$)�”}”(hŒ"``struct intel_engine_cs *engine``”h]”j*)�”}”(hjµ€h]”hŒstruct intel_engine_cs *engine”…”�”}”(hj·€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj³€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´Mµhj¯€ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe engine to initialize”h]”hŒthe engine to initialize”…”�”}”(hj΀h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÊ€h´MµhjË€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¯€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÊ€h´Mµhj¬€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�€ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjð€h]”hŒ Description”…”�”}”(hjò€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjî€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M·hj�€ubhÚ)�”}”(hŒ¤Optionally initializes fields related to batch buffer command parsing in the struct intel_engine_cs based on whether the platform requires software command parsing.”h]”hŒ¤Optionally initializes fields related to batch buffer command parsing in the struct intel_engine_cs based on whether the platform requires software command parsing.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M¶hj�€ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjå~h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ,intel_engine_cleanup_cmd_parser (C function)”Œ!c.intel_engine_cleanup_cmd_parser”hNt”auh1j¶hjå~h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒEvoid intel_engine_cleanup_cmd_parser (struct intel_engine_cs *engine)”h]”jÓ)�”}”(hŒDvoid intel_engine_cleanup_cmd_parser(struct intel_engine_cs *engine)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj5�h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj1�h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M&ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj1�h²hh³jC�h´M&ubj)�”}”(hŒintel_engine_cleanup_cmd_parser”h]”jÜ)�”}”(hŒintel_engine_cleanup_cmd_parser”h]”hŒintel_engine_cleanup_cmd_parser”…”�”}”(hjV�h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjR�ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj1�h²hh³jC�h´M&ubj8)�”}”(hŒ (struct intel_engine_cs *engine)”h]”j>)�”}”(hŒstruct intel_engine_cs *engine”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjr�h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjn�ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjn�ubh)�”}”(hhh]”jÜ)�”}”(hŒintel_engine_cs”h]”hŒintel_engine_cs”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj��ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j’�Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjX�sbŒ!c.intel_engine_cleanup_cmd_parser”†”asbuh1hhjn�ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjn�ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¾�h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjn�ubjÜ)�”}”(hŒengine”h]”hŒengine”…”�”}”(hjË�h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjn�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjj�ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj1�h²hh³jC�h´M&ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj-�h²hh³jC�h´M&ubah}”(h]”j(�ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jC�h´M&hj*�h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ"clean up cmd parser related fields”h]”hŒ"clean up cmd parser related fields”…”�”}”(hjõ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M&hjò�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj*�h²hh³jC�h´M&ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój ‚jôj ‚jõ‰jö‰j÷‰uh1jÇh²hhjå~h³Nh´Nubjù)�”}”(hŒÈ**Parameters** ``struct intel_engine_cs *engine`` the engine to clean up **Description** Releases any resources related to command parsing that may have been initialized for the specified engine.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj‚h]”hŒ Parameters”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M*hj‚ubj)�”}”(hhh]”j)�”}”(hŒ:``struct intel_engine_cs *engine`` the engine to clean up ”h]”(j$)�”}”(hŒ"``struct intel_engine_cs *engine``”h]”j*)�”}”(hj6‚h]”hŒstruct intel_engine_cs *engine”…”�”}”(hj8‚h²hh³•Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj4‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M'hj0‚ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe engine to clean up”h]”hŒthe engine to clean up”…”�”}”(hjO‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jK‚h´M'hjL‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj0‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jK‚h´M'hj-‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjq‚h]”hŒ Description”…”�”}”(hjs‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M)hj‚ubhÚ)�”}”(hŒjReleases any resources related to command parsing that may have been initialized for the specified engine.”h]”hŒjReleases any resources related to command parsing that may have been initialized for the specified engine.”…”�”}”(hj‡‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M(hj‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjå~h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ$intel_engine_cmd_parser (C function)”Œc.intel_engine_cmd_parser”hNt”auh1j¶hjå~h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ¶int intel_engine_cmd_parser (struct intel_engine_cs *engine, struct i915_vma *batch, unsigned long batch_offset, unsigned long batch_length, struct i915_vma *shadow, bool trampoline)”h]”jÓ)�”}”(hŒµint intel_engine_cmd_parser(struct intel_engine_cs *engine, struct i915_vma *batch, unsigned long batch_offset, unsigned long batch_length, struct i915_vma *shadow, bool trampoline)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj¶‚h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj²‚h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M‘ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj²‚h²hh³jÄ‚h´M‘ubj)�”}”(hŒintel_engine_cmd_parser”h]”jÜ)�”}”(hŒintel_engine_cmd_parser”h]”hŒintel_engine_cmd_parser”…”�”}”(hjׂh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÓ‚ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj²‚h²hh³jÄ‚h´M‘ubj8)�”}”(hŒš(struct intel_engine_cs *engine, struct i915_vma *batch, unsigned long batch_offset, unsigned long batch_length, struct i915_vma *shadow, bool trampoline)”h]”(j>)�”}”(hŒstruct intel_engine_cs *engine”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjó‚h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjï‚ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjï‚ubh)�”}”(hhh]”jÜ)�”}”(hŒintel_engine_cs”h]”hŒintel_engine_cs”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jƒŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjÙ‚sbŒc.intel_engine_cmd_parser”†”asbuh1hhjï‚ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1ƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjï‚ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj?ƒh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjï‚ubjÜ)�”}”(hŒengine”h]”hŒengine”…”�”}”(hjLƒh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjï‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjë‚ubj>)�”}”(hŒstruct i915_vma *batch”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjeƒh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjaƒubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjaƒubh)�”}”(hhh]”jÜ)�”}”(hŒi915_vma”h]”hŒi915_vma”…”�”}”(hjƒƒh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj€ƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j…ƒŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j-ƒŒc.intel_engine_cmd_parser”†”asbuh1hhjaƒubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡ƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjaƒubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¯ƒh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjaƒubjÜ)�”}”(hŒbatch”h]”hŒbatch”…”�”}”(hj¼ƒh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjaƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjë‚ubj>)�”}”(hŒunsigned long batch_offset”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÕƒh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjуubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjуubjn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjñƒh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjуubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjуubjÜ)�”}”(hŒ batch_offset”h]”hŒ batch_offset”…”�”}”(hj „h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjуubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjë‚ubj>)�”}”(hŒunsigned long batch_length”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj&„h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj"„ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj"„ubjn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjB„h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj"„ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj"„ubjÜ)�”}”(hŒ batch_length”h]”hŒ batch_length”…”�”}”(hj^„h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj"„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjë‚ubj>)�”}”(hŒstruct i915_vma *shadow”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjw„h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjs„ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjs„ubh)�”}”(hhh]”jÜ)�”}”(hŒi915_vma”h]”hŒi915_vma”…”�”}”(hj•„h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj’„ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j—„Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j-ƒŒc.intel_engine_cmd_parser”†”asbuh1hhjs„ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjs„ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÁ„h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjs„ubjÜ)�”}”(hŒshadow”h]”hŒshadow”…”�”}”(hj΄h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjs„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjë‚ubj>)�”}”(hŒbool trampoline”h]”(jn)�”}”(hjqh]”hŒbool”…”�”}”(hjç„h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjã„ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjã„ubjÜ)�”}”(hŒ trampoline”h]”hŒ trampoline”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjã„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjë‚ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj²‚h²hh³jÄ‚h´M‘ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj®‚h²hh³jÄ‚h´M‘ubah}”(h]”j©‚ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÄ‚h´M‘hj«‚h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ-parse a batch buffer for privilege violations”h]”hŒ-parse a batch buffer for privilege violations”…”�”}”(hj,…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M‘hj)…h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj«‚h²hh³jÄ‚h´M‘ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójD…jôjD…jõ‰jö‰j÷‰uh1jÇh²hhjå~h³Nh´Nubjù)�”}”(hXÒ**Parameters** ``struct intel_engine_cs *engine`` the engine on which the batch is to execute ``struct i915_vma *batch`` the batch buffer in question ``unsigned long batch_offset`` byte offset in the batch at which execution starts ``unsigned long batch_length`` length of the commands in batch_obj ``struct i915_vma *shadow`` validated copy of the batch buffer in question ``bool trampoline`` true if we need to trampoline into privileged execution **Description** Parses the specified batch buffer looking for privilege violations as described in the overview. **Return** non-zero if the parser finds violations or otherwise fails; -EACCES if the batch appears legal but should use hardware parsing”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjN…h]”hŒ Parameters”…”�”}”(hjP…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjL…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M•hjH…ubj)�”}”(hhh]”(j)�”}”(hŒO``struct intel_engine_cs *engine`` the engine on which the batch is to execute ”h]”(j$)�”}”(hŒ"``struct intel_engine_cs *engine``”h]”j*)�”}”(hjm…h]”hŒstruct intel_engine_cs *engine”…”�”}”(hjo…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjk…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M’hjg…ubj@)�”}”(hhh]”hÚ)�”}”(hŒ+the engine on which the batch is to execute”h]”hŒ+the engine on which the batch is to execute”…”�”}”(hj†…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j‚…h´M’hjƒ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjg…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚…h´M’hjd…ubj)�”}”(hŒ8``struct i915_vma *batch`` the batch buffer in question ”h]”(j$)�”}”(hŒ``struct i915_vma *batch``”h]”j*)�”}”(hj¦…h]”hŒstruct i915_vma *batch”…”�”}”(hj¨…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¤…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M“hj …ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe batch buffer in question”h]”hŒthe batch buffer in question”…”�”}”(hj¿…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j»…h´M“hj¼…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj …ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j»…h´M“hjd…ubj)�”}”(hŒR``unsigned long batch_offset`` byte offset in the batch at which execution starts ”h]”(j$)�”}”(hŒ``unsigned long batch_offset``”h]”j*)�”}”(hjß…h]”hŒunsigned long batch_offset”…”�”}”(hjá…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÝ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M”hjÙ…ubj@)�”}”(hhh]”hÚ)�”}”(hŒ2byte offset in the batch at which execution starts”h]”hŒ2byte offset in the batch at which execution starts”…”�”}”(hjø…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jô…h´M”hjõ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÙ…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jô…h´M”hjd…ubj)�”}”(hŒC``unsigned long batch_length`` length of the commands in batch_obj ”h]”(j$)�”}”(hŒ``unsigned long batch_length``”h]”j*)�”}”(hj†h]”hŒunsigned long batch_length”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M•hj†ubj@)�”}”(hhh]”hÚ)�”}”(hŒ#length of the commands in batch_obj”h]”hŒ#length of the commands in batch_obj”…”�”}”(hj1†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j-†h´M•hj.†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j-†h´M•hjd…ubj)�”}”(hŒK``struct i915_vma *shadow`` validated copy of the batch buffer in question ”h]”(j$)�”}”(hŒ``struct i915_vma *shadow``”h]”j*)�”}”(hjQ†h]”hŒstruct i915_vma *shadow”…”�”}”(hjS†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjO†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M–hjK†ubj@)�”}”(hhh]”hÚ)�”}”(hŒ.validated copy of the batch buffer in question”h]”hŒ.validated copy of the batch buffer in question”…”�”}”(hjj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jf†h´M–hjg†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjK†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jf†h´M–hjd…ubj)�”}”(hŒL``bool trampoline`` true if we need to trampoline into privileged execution ”h]”(j$)�”}”(hŒ``bool trampoline``”h]”j*)�”}”(hjІh]”hŒbool trampoline”…”�”}”(hjŒ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjˆ†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M—hj„†ubj@)�”}”(hhh]”hÚ)�”}”(hŒ7true if we need to trampoline into privileged execution”h]”hŒ7true if we need to trampoline into privileged execution”…”�”}”(hj£†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jŸ†h´M—hj †ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj„†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸ†h´M—hjd…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjH…ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjņh]”hŒ Description”…”�”}”(hjdžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M™hjH…ubhÚ)�”}”(hŒ`Parses the specified batch buffer looking for privilege violations as described in the overview.”h]”hŒ`Parses the specified batch buffer looking for privilege violations as described in the overview.”…”�”}”(hjÛ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M˜hjH…ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjì†h]”hŒReturn”…”�”}”(hjî†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjê†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M›hjH…ubhÚ)�”}”(hŒ~non-zero if the parser finds violations or otherwise fails; -EACCES if the batch appears legal but should use hardware parsing”h]”hŒ~non-zero if the parser finds violations or otherwise fails; -EACCES if the batch appears legal but should use hardware parsing”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´MœhjH…ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjå~h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ(i915_cmd_parser_get_version (C function)”Œc.i915_cmd_parser_get_version”hNt”auh1j¶hjå~h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒCint i915_cmd_parser_get_version (struct drm_i915_private *dev_priv)”h]”jÓ)�”}”(hŒBint i915_cmd_parser_get_version(struct drm_i915_private *dev_priv)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj1‡h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj-‡h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M-ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@‡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj-‡h²hh³j?‡h´M-ubj)�”}”(hŒi915_cmd_parser_get_version”h]”jÜ)�”}”(hŒi915_cmd_parser_get_version”h]”hŒi915_cmd_parser_get_version”…”�”}”(hjR‡h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjN‡ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj-‡h²hh³j?‡h´M-ubj8)�”}”(hŒ#(struct drm_i915_private *dev_priv)”h]”j>)�”}”(hŒ!struct drm_i915_private *dev_priv”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjn‡h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjj‡ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{‡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjj‡ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hjŒ‡h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj‰‡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jއŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjT‡sbŒc.i915_cmd_parser_get_version”†”asbuh1hhjj‡ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬‡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjj‡ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjº‡h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjj‡ubjÜ)�”}”(hŒdev_priv”h]”hŒdev_priv”…”�”}”(hjLJh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjj‡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjf‡ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj-‡h²hh³j?‡h´M-ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj)‡h²hh³j?‡h´M-ubah}”(h]”j$‡ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j?‡h´M-hj&‡h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ!get the cmd parser version number”h]”hŒ!get the cmd parser version number”…”�”}”(hjñ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M-hjî‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj&‡h²hh³j?‡h´M-ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój ˆjôj ˆjõ‰jö‰j÷‰uh1jÇh²hhjå~h³Nh´Nubjù)�”}”(hX1**Parameters** ``struct drm_i915_private *dev_priv`` i915 device private **Description** The cmd parser maintains a simple increasing integer version number suitable for passing to userspace clients to determine what operations are permitted. **Return** the current version number of the cmd parser”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjˆh]”hŒ Parameters”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M1hj ˆubj)�”}”(hhh]”j)�”}”(hŒ:``struct drm_i915_private *dev_priv`` i915 device private ”h]”(j$)�”}”(hŒ%``struct drm_i915_private *dev_priv``”h]”j*)�”}”(hj2ˆh]”hŒ!struct drm_i915_private *dev_priv”…”�”}”(hj4ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj0ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M.hj,ˆubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 device private”h]”hŒi915 device private”…”�”}”(hjKˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jGˆh´M.hjHˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj,ˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jGˆh´M.hj)ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ˆubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjmˆh]”hŒ Description”…”�”}”(hjoˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M0hj ˆubhÚ)�”}”(hŒ™The cmd parser maintains a simple increasing integer version number suitable for passing to userspace clients to determine what operations are permitted.”h]”hŒ™The cmd parser maintains a simple increasing integer version number suitable for passing to userspace clients to determine what operations are permitted.”…”�”}”(hjƒˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M/hj ˆubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj”ˆh]”hŒReturn”…”�”}”(hj–ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M2hj ˆubhÚ)�”}”(hŒ,the current version number of the cmd parser”h]”hŒ,the current version number of the cmd parser”…”�”}”(hjªˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:236: ./drivers/gpu/drm/i915/i915_cmd_parser.c”h´M3hj ˆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjå~h²hh³Nh´Nubeh}”(h]”Œbatchbuffer-parsing”ah ]”h"]”Œbatchbuffer parsing”ah$]”h&]”uh1hÄhj.bh²hh³hÃh´KçubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒUser Batchbuffer Execution”h]”hŒUser Batchbuffer Execution”…”�”}”(hjˈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjȈh²hh³hÃh´Kðubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_gem_engines (C struct)”Œc.i915_gem_engines”hNt”auh1j¶hjȈh²hh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒi915_gem_engines”h]”jÓ)�”}”(hŒstruct i915_gem_engines”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjóˆh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjïˆh²hh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjïˆh²hh³j‰h´Kubj)�”}”(hŒi915_gem_engines”h]”jÜ)�”}”(hjíˆh]”hŒi915_gem_engines”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj‰ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjïˆh²hh³j‰h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjëˆh²hh³j‰h´Kubah}”(h]”jåˆah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j‰h´Khjèˆh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒA set of engines”h]”hŒA set of engines”…”�”}”(hj5‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K!hj2‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjèˆh²hh³j‰h´Kubeh}”(h]”h ]”(jóŒstruct”eh"]”h$]”h&]”jòjójójM‰jôjM‰jõ‰jö‰j÷‰uh1jÇh²hhjȈh³jçˆh´Nubjù)�”}”(hXP**Definition**:: struct i915_gem_engines { union { struct list_head link; struct rcu_head rcu; }; struct i915_sw_fence fence; struct i915_gem_context *ctx; unsigned int num_engines; struct intel_context *engines[]; }; **Members** ``{unnamed_union}`` anonymous ``link`` Link in i915_gem_context::stale::engines ``rcu`` RCU to use when freeing ``fence`` Fence used for delayed destruction of engines ``ctx`` i915_gem_context backpointer ``num_engines`` Number of engines in this set ``engines`` Array of engines”h]”(hÚ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjY‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjU‰ubhŒ:”…”�”}”(hjU‰h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K%hjQ‰ubjA#)�”}”(hŒðstruct i915_gem_engines { union { struct list_head link; struct rcu_head rcu; }; struct i915_sw_fence fence; struct i915_gem_context *ctx; unsigned int num_engines; struct intel_context *engines[]; };”h]”hŒðstruct i915_gem_engines { union { struct list_head link; struct rcu_head rcu; }; struct i915_sw_fence fence; struct i915_gem_context *ctx; unsigned int num_engines; struct intel_context *engines[]; };”…”�”}”hjr‰sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K'hjQ‰ubhÚ)�”}”(hŒ **Members**”h]”j)�”}”(hjƒ‰h]”hŒMembers”…”�”}”(hj…‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K2hjQ‰ubj)�”}”(hhh]”(j)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j$)�”}”(hŒ``{unnamed_union}``”h]”j*)�”}”(hj¢‰h]”hŒ{unnamed_union}”…”�”}”(hj¤‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Khjœ‰ubj@)�”}”(hhh]”hÚ)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hj»‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j·‰h´Khj¸‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjœ‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·‰h´Khj™‰ubj)�”}”(hŒ2``link`` Link in i915_gem_context::stale::engines ”h]”(j$)�”}”(hŒ``link``”h]”j*)�”}”(hjÛ‰h]”hŒlink”…”�”}”(hj݉h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÙ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K&hjÕ‰ubj@)�”}”(hhh]”hÚ)�”}”(hŒ(Link in i915_gem_context::stale::engines”h]”hŒ(Link in i915_gem_context::stale::engines”…”�”}”(hjô‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jð‰h´K&hjñ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÕ‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jð‰h´K&hj™‰ubj)�”}”(hŒ ``rcu`` RCU to use when freeing ”h]”(j$)�”}”(hŒ``rcu``”h]”j*)�”}”(hjŠh]”hŒrcu”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K)hjŠubj@)�”}”(hhh]”hÚ)�”}”(hŒRCU to use when freeing”h]”hŒRCU to use when freeing”…”�”}”(hj-Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j)Šh´K)hj*Šubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)Šh´K)hj™‰ubj)�”}”(hŒ8``fence`` Fence used for delayed destruction of engines ”h]”(j$)�”}”(hŒ ``fence``”h]”j*)�”}”(hjMŠh]”hŒfence”…”�”}”(hjOŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjKŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K-hjGŠubj@)�”}”(hhh]”hÚ)�”}”(hŒ-Fence used for delayed destruction of engines”h]”hŒ-Fence used for delayed destruction of engines”…”�”}”(hjfŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jbŠh´K-hjcŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjGŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jbŠh´K-hj™‰ubj)�”}”(hŒ%``ctx`` i915_gem_context backpointer ”h]”(j$)�”}”(hŒ``ctx``”h]”j*)�”}”(hj†Šh]”hŒctx”…”�”}”(hjˆŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj„Šubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K0hj€Šubj@)�”}”(hhh]”hÚ)�”}”(hŒi915_gem_context backpointer”h]”hŒi915_gem_context backpointer”…”�”}”(hjŸŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j›Šh´K0hjœŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj€Šubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›Šh´K0hj™‰ubj)�”}”(hŒ.``num_engines`` Number of engines in this set ”h]”(j$)�”}”(hŒ``num_engines``”h]”j*)�”}”(hj¿Šh]”hŒ num_engines”…”�”}”(hjÁŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj½Šubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K3hj¹Šubj@)�”}”(hhh]”hÚ)�”}”(hŒNumber of engines in this set”h]”hŒNumber of engines in this set”…”�”}”(hjØŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÔŠh´K3hjÕŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¹Šubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔŠh´K3hj™‰ubj)�”}”(hŒ``engines`` Array of engines”h]”(j$)�”}”(hŒ ``engines``”h]”j*)�”}”(hjøŠh]”hŒengines”…”�”}”(hjúŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjöŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K5hjòŠubj@)�”}”(hhh]”hÚ)�”}”(hŒArray of engines”h]”hŒArray of engines”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K6hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjòŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ‹h´K5hj™‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ‰ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjȈh²hh³jçˆh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ i915_gem_engines_iter (C struct)”Œc.i915_gem_engines_iter”hNt”auh1j¶hjȈh²hh³jçˆh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒi915_gem_engines_iter”h]”jÓ)�”}”(hŒstruct i915_gem_engines_iter”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjR‹h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjN‹h²hh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Khj°‹ubjA#)�”}”(hŒcstruct i915_gem_engines_iter { unsigned int idx; const struct i915_gem_engines *engines; };”h]”hŒcstruct i915_gem_engines_iter { unsigned int idx; const struct i915_gem_engines *engines; };”…”�”}”hjÑ‹sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K@hj°‹ubhÚ)�”}”(hŒ **Members**”h]”j)�”}”(hjâ‹h]”hŒMembers”…”�”}”(hjä‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjà‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KEhj°‹ubj)�”}”(hhh]”(j)�”}”(hŒ-``idx`` Index into i915_gem_engines::engines ”h]”(j$)�”}”(hŒ``idx``”h]”j*)�”}”(hjŒh]”hŒidx”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÿ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K>hjû‹ubj@)�”}”(hhh]”hÚ)�”}”(hŒ$Index into i915_gem_engines::engines”h]”hŒ$Index into i915_gem_engines::engines”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jŒh´K>hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjû‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŒh´K>hjø‹ubj)�”}”(hŒ%``engines`` Engine set being iterated”h]”(j$)�”}”(hŒ ``engines``”h]”j*)�”}”(hj:Œh]”hŒengines”…”�”}”(hj<Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj8Œubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K@hj4Œubj@)�”}”(hhh]”hÚ)�”}”(hŒEngine set being iterated”h]”hŒEngine set being iterated”…”�”}”(hjSŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KAhjPŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj4Œubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jOŒh´K@hjø‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj°‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjȈh²hh³jçˆh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_gem_engine_type (C enum)”Œc.i915_gem_engine_type”hNt”auh1j¶hjȈh²hh³jçˆh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒi915_gem_engine_type”h]”jÓ)�”}”(hŒenum i915_gem_engine_type”h]”(jD)�”}”(hjµh]”hŒenum”…”�”}”(hj”Œh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj�Œh²hh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KGubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢Œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj�Œh²hh³j¡Œh´KGubj)�”}”(hŒi915_gem_engine_type”h]”jÜ)�”}”(hjŽŒh]”hŒi915_gem_engine_type”…”�”}”(hj´Œh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj°Œubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj�Œh²hh³j¡Œh´KGubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjŒŒh²hh³j¡Œh´KGubah}”(h]”j‡Œah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j¡Œh´KGhj‰Œh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ.Describes the type of an i915_gem_proto_engine”h]”hŒ.Describes the type of an i915_gem_proto_engine”…”�”}”(hjÖŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KEhjÓŒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj‰Œh²hh³j¡Œh´KGubeh}”(h]”h ]”(jóŒenum”eh"]”h$]”h&]”jòjójójîŒjôjîŒjõ‰jö‰j÷‰uh1jÇh²hhjȈh³jçˆh´Nubjù)�”}”(hŒü**Constants** ``I915_GEM_ENGINE_TYPE_INVALID`` An invalid engine ``I915_GEM_ENGINE_TYPE_PHYSICAL`` A single physical engine ``I915_GEM_ENGINE_TYPE_BALANCED`` A load-balanced engine set ``I915_GEM_ENGINE_TYPE_PARALLEL`` A parallel engine set”h]”(hÚ)�”}”(hŒ **Constants**”h]”j)�”}”(hjøŒh]”hŒ Constants”…”�”}”(hjúŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöŒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KIhjòŒubj)�”}”(hhh]”(j)�”}”(hŒ3``I915_GEM_ENGINE_TYPE_INVALID`` An invalid engine ”h]”(j$)�”}”(hŒ ``I915_GEM_ENGINE_TYPE_INVALID``”h]”j*)�”}”(hj�h]”hŒI915_GEM_ENGINE_TYPE_INVALID”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KLhj�ubj@)�”}”(hhh]”hÚ)�”}”(hŒAn invalid engine”h]”hŒAn invalid engine”…”�”}”(hj0�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j,�h´KLhj-�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,�h´KLhj�ubj)�”}”(hŒ;``I915_GEM_ENGINE_TYPE_PHYSICAL`` A single physical engine ”h]”(j$)�”}”(hŒ!``I915_GEM_ENGINE_TYPE_PHYSICAL``”h]”j*)�”}”(hjP�h]”hŒI915_GEM_ENGINE_TYPE_PHYSICAL”…”�”}”(hjR�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjN�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KOhjJ�ubj@)�”}”(hhh]”hÚ)�”}”(hŒA single physical engine”h]”hŒA single physical engine”…”�”}”(hji�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³je�h´KOhjf�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjJ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³je�h´KOhj�ubj)�”}”(hŒ=``I915_GEM_ENGINE_TYPE_BALANCED`` A load-balanced engine set ”h]”(j$)�”}”(hŒ!``I915_GEM_ENGINE_TYPE_BALANCED``”h]”j*)�”}”(hj‰�h]”hŒI915_GEM_ENGINE_TYPE_BALANCED”…”�”}”(hj‹�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj‡�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KRhjƒ�ubj@)�”}”(hhh]”hÚ)�”}”(hŒA load-balanced engine set”h]”hŒA load-balanced engine set”…”�”}”(hj¢�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jž�h´KRhjŸ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjƒ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jž�h´KRhj�ubj)�”}”(hŒ7``I915_GEM_ENGINE_TYPE_PARALLEL`` A parallel engine set”h]”(j$)�”}”(hŒ!``I915_GEM_ENGINE_TYPE_PARALLEL``”h]”j*)�”}”(hjÂ�h]”hŒI915_GEM_ENGINE_TYPE_PARALLEL”…”�”}”(hjÄ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÀ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KThj¼�ubj@)�”}”(hhh]”hÚ)�”}”(hŒA parallel engine set”h]”hŒA parallel engine set”…”�”}”(hjÛ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KUhjØ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¼�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j×�h´KThj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjòŒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjȈh²hh³jçˆh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ i915_gem_proto_engine (C struct)”Œc.i915_gem_proto_engine”hNt”auh1j¶hjȈh²hh³jçˆh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒi915_gem_proto_engine”h]”jÓ)�”}”(hŒstruct i915_gem_proto_engine”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjŽh²hh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KZubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŽh²hh³j)Žh´KZubj)�”}”(hŒi915_gem_proto_engine”h]”jÜ)�”}”(hjŽh]”hŒi915_gem_proto_engine”…”�”}”(hj<Žh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj8Žubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjŽh²hh³j)Žh´KZubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjŽh²hh³j)Žh´KZubah}”(h]”jŽah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j)Žh´KZhjŽh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒprototype engine”h]”hŒprototype engine”…”�”}”(hj^Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KVhj[Žh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjŽh²hh³j)Žh´KZubeh}”(h]”h ]”(jóŒstruct”eh"]”h$]”h&]”jòjójójvŽjôjvŽjõ‰jö‰j÷‰uh1jÇh²hhjȈh³jçˆh´Nubjù)�”}”(hX"**Definition**:: struct i915_gem_proto_engine { enum i915_gem_engine_type type; struct intel_engine_cs *engine; unsigned int num_siblings; unsigned int width; struct intel_engine_cs **siblings; struct intel_sseu sseu; }; **Members** ``type`` Type of this engine ``engine`` Engine, for physical ``num_siblings`` Number of balanced or parallel siblings ``width`` Width of each sibling ``siblings`` Balanced siblings or num_siblings * width for parallel ``sseu`` Client-set SSEU parameters”h]”(hÚ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj‚Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj~ŽubhŒ:”…”�”}”(hj~Žh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KZhjzŽubjA#)�”}”(hŒãstruct i915_gem_proto_engine { enum i915_gem_engine_type type; struct intel_engine_cs *engine; unsigned int num_siblings; unsigned int width; struct intel_engine_cs **siblings; struct intel_sseu sseu; };”h]”hŒãstruct i915_gem_proto_engine { enum i915_gem_engine_type type; struct intel_engine_cs *engine; unsigned int num_siblings; unsigned int width; struct intel_engine_cs **siblings; struct intel_sseu sseu; };”…”�”}”hj›Žsbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K\hjzŽubhÚ)�”}”(hŒ **Members**”h]”j)�”}”(hj¬Žh]”hŒMembers”…”�”}”(hj®Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªŽubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KehjzŽubj)�”}”(hhh]”(j)�”}”(hŒ``type`` Type of this engine ”h]”(j$)�”}”(hŒ``type``”h]”j*)�”}”(hjËŽh]”hŒtype”…”�”}”(hjÍŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÉŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KmhjÅŽubj@)�”}”(hhh]”hÚ)�”}”(hŒType of this engine”h]”hŒType of this engine”…”�”}”(hjäŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jàŽh´KmhjáŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÅŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jàŽh´KmhjÂŽubj)�”}”(hŒ ``engine`` Engine, for physical ”h]”(j$)�”}”(hŒ ``engine``”h]”j*)�”}”(hj�h]”hŒengine”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KphjþŽubj@)�”}”(hhh]”hÚ)�”}”(hŒEngine, for physical”h]”hŒEngine, for physical”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j�h´Kphj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjþŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�h´KphjÂŽubj)�”}”(hŒ9``num_siblings`` Number of balanced or parallel siblings ”h]”(j$)�”}”(hŒ``num_siblings``”h]”j*)�”}”(hj=�h]”hŒ num_siblings”…”�”}”(hj?�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj;�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kshj7�ubj@)�”}”(hhh]”hÚ)�”}”(hŒ'Number of balanced or parallel siblings”h]”hŒ'Number of balanced or parallel siblings”…”�”}”(hjV�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jR�h´KshjS�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj7�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jR�h´KshjÂŽubj)�”}”(hŒ ``width`` Width of each sibling ”h]”(j$)�”}”(hŒ ``width``”h]”j*)�”}”(hjv�h]”hŒwidth”…”�”}”(hjx�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjt�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kvhjp�ubj@)�”}”(hhh]”hÚ)�”}”(hŒWidth of each sibling”h]”hŒWidth of each sibling”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j‹�h´KvhjŒ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjp�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‹�h´KvhjÂŽubj)�”}”(hŒD``siblings`` Balanced siblings or num_siblings * width for parallel ”h]”(j$)�”}”(hŒ ``siblings``”h]”j*)�”}”(hj¯�h]”hŒsiblings”…”�”}”(hj±�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj­�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kyhj©�ubj@)�”}”(hhh]”hÚ)�”}”(hŒ6Balanced siblings or num_siblings * width for parallel”h]”hŒ6Balanced siblings or num_siblings * width for parallel”…”�”}”(hjÈ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÄ�h´KyhjÅ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj©�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÄ�h´KyhjÂŽubj)�”}”(hŒ#``sseu`` Client-set SSEU parameters”h]”(j$)�”}”(hŒ``sseu``”h]”j*)�”}”(hjè�h]”hŒsseu”…”�”}”(hjê�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjæ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K{hjâ�ubj@)�”}”(hhh]”hÚ)�”}”(hŒClient-set SSEU parameters”h]”hŒClient-set SSEU parameters”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K|hjþ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjâ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jý�h´K{hjÂŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjzŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjȈh²hh³jçˆh´NubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj+�h]”hŒ Description”…”�”}”(hj-�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KhjȈh²hubhÚ)�”}”(hŒUThis struct describes an engine that a context may contain. Engines have four types:”h]”hŒUThis struct describes an engine that a context may contain. Engines have four types:”…”�”}”(hjA�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KWhjȈh²hubjgd)�”}”(hX - I915_GEM_ENGINE_TYPE_INVALID: Invalid engines can be created but they show up as a NULL in i915_gem_engines::engines[i] and any attempt to use them by the user results in -EINVAL. They are also useful during proto-context construction because the client may create invalid engines and then set them up later as virtual engines. - I915_GEM_ENGINE_TYPE_PHYSICAL: A single physical engine, described by i915_gem_proto_engine::engine. - I915_GEM_ENGINE_TYPE_BALANCED: A load-balanced engine set, described i915_gem_proto_engine::num_siblings and i915_gem_proto_engine::siblings. - I915_GEM_ENGINE_TYPE_PARALLEL: A parallel submission engine set, described i915_gem_proto_engine::width, i915_gem_proto_engine::num_siblings, and i915_gem_proto_engine::siblings. ”h]”j°:)�”}”(hhh]”(jµ:)�”}”(hXII915_GEM_ENGINE_TYPE_INVALID: Invalid engines can be created but they show up as a NULL in i915_gem_engines::engines[i] and any attempt to use them by the user results in -EINVAL. They are also useful during proto-context construction because the client may create invalid engines and then set them up later as virtual engines. ”h]”hÚ)�”}”(hXHI915_GEM_ENGINE_TYPE_INVALID: Invalid engines can be created but they show up as a NULL in i915_gem_engines::engines[i] and any attempt to use them by the user results in -EINVAL. They are also useful during proto-context construction because the client may create invalid engines and then set them up later as virtual engines.”h]”hXHI915_GEM_ENGINE_TYPE_INVALID: Invalid engines can be created but they show up as a NULL in i915_gem_engines::engines[i] and any attempt to use them by the user results in -EINVAL. They are also useful during proto-context construction because the client may create invalid engines and then set them up later as virtual engines.”…”�”}”(hj[�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KZhjW�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjT�ubjµ:)�”}”(hŒeI915_GEM_ENGINE_TYPE_PHYSICAL: A single physical engine, described by i915_gem_proto_engine::engine. ”h]”hÚ)�”}”(hŒdI915_GEM_ENGINE_TYPE_PHYSICAL: A single physical engine, described by i915_gem_proto_engine::engine.”h]”hŒdI915_GEM_ENGINE_TYPE_PHYSICAL: A single physical engine, described by i915_gem_proto_engine::engine.”…”�”}”(hjt�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K`hjp�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjT�ubjµ:)�”}”(hŒŽI915_GEM_ENGINE_TYPE_BALANCED: A load-balanced engine set, described i915_gem_proto_engine::num_siblings and i915_gem_proto_engine::siblings. ”h]”hÚ)�”}”(hŒ�I915_GEM_ENGINE_TYPE_BALANCED: A load-balanced engine set, described i915_gem_proto_engine::num_siblings and i915_gem_proto_engine::siblings.”h]”hŒ�I915_GEM_ENGINE_TYPE_BALANCED: A load-balanced engine set, described i915_gem_proto_engine::num_siblings and i915_gem_proto_engine::siblings.”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kchj‰�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjT�ubjµ:)�”}”(hŒ¶I915_GEM_ENGINE_TYPE_PARALLEL: A parallel submission engine set, described i915_gem_proto_engine::width, i915_gem_proto_engine::num_siblings, and i915_gem_proto_engine::siblings. ”h]”hÚ)�”}”(hŒ²I915_GEM_ENGINE_TYPE_PARALLEL: A parallel submission engine set, described i915_gem_proto_engine::width, i915_gem_proto_engine::num_siblings, and i915_gem_proto_engine::siblings.”h]”hŒ²I915_GEM_ENGINE_TYPE_PARALLEL: A parallel submission engine set, described i915_gem_proto_engine::width, i915_gem_proto_engine::num_siblings, and i915_gem_proto_engine::siblings.”…”�”}”(hj¦�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kfhj¢�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjT�ubeh}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³ji�h´KZhjP�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³ji�h´KZhjȈh²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ!i915_gem_proto_context (C struct)”Œc.i915_gem_proto_context”hNt”auh1j¶hjȈh²hh³jçˆh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒi915_gem_proto_context”h]”jÓ)�”}”(hŒstruct i915_gem_proto_context”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjà�h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjÜ�h²hh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kmubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÜ�h²hh³jí�h´Kmubj)�”}”(hŒi915_gem_proto_context”h]”jÜ)�”}”(hjÚ�h]”hŒi915_gem_proto_context”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjü�ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÜ�h²hh³jí�h´Kmubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjØ�h²hh³jí�h´Kmubah}”(h]”jÓ�ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jí�h´KmhjÕ�h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒprototype context”h]”hŒprototype context”…”�”}”(hj"‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K€hj‘h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÕ�h²hh³jí�h´Kmubeh}”(h]”h ]”(jóŒstruct”eh"]”h$]”h&]”jòjójój:‘jôj:‘jõ‰jö‰j÷‰uh1jÇh²hhjȈh³jçˆh´Nubjù)�”}”(hXo**Definition**:: struct i915_gem_proto_context { struct drm_i915_file_private *fpriv; struct i915_address_space *vm; unsigned long user_flags; struct i915_sched_attr sched; int num_user_engines; struct i915_gem_proto_engine *user_engines; struct intel_sseu legacy_rcs_sseu; bool single_timeline; bool uses_protected_content; intel_wakeref_t pxp_wakeref; }; **Members** ``fpriv`` Client which creates the context ``vm`` See :c:type:`i915_gem_context.vm ` ``user_flags`` See :c:type:`i915_gem_context.user_flags ` ``sched`` See :c:type:`i915_gem_context.sched ` ``num_user_engines`` Number of user-specified engines or -1 ``user_engines`` User-specified engines ``legacy_rcs_sseu`` Client-set SSEU parameters for the legacy RCS ``single_timeline`` See See :c:type:`i915_gem_context.syncobj ` ``uses_protected_content`` See :c:type:`i915_gem_context.uses_protected_content ` ``pxp_wakeref`` See :c:type:`i915_gem_context.pxp_wakeref `”h]”(hÚ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjF‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjB‘ubhŒ:”…”�”}”(hjB‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K„hj>‘ubjA#)�”}”(hX{struct i915_gem_proto_context { struct drm_i915_file_private *fpriv; struct i915_address_space *vm; unsigned long user_flags; struct i915_sched_attr sched; int num_user_engines; struct i915_gem_proto_engine *user_engines; struct intel_sseu legacy_rcs_sseu; bool single_timeline; bool uses_protected_content; intel_wakeref_t pxp_wakeref; };”h]”hX{struct i915_gem_proto_context { struct drm_i915_file_private *fpriv; struct i915_address_space *vm; unsigned long user_flags; struct i915_sched_attr sched; int num_user_engines; struct i915_gem_proto_engine *user_engines; struct intel_sseu legacy_rcs_sseu; bool single_timeline; bool uses_protected_content; intel_wakeref_t pxp_wakeref; };”…”�”}”hj_‘sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K†hj>‘ubhÚ)�”}”(hŒ **Members**”h]”j)�”}”(hjp‘h]”hŒMembers”…”�”}”(hjr‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjn‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K“hj>‘ubj)�”}”(hhh]”(j)�”}”(hŒ+``fpriv`` Client which creates the context ”h]”(j$)�”}”(hŒ ``fpriv``”h]”j*)�”}”(hj�‘h]”hŒfpriv”…”�”}”(hj‘‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj�‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K¿hj‰‘ubj@)�”}”(hhh]”hÚ)�”}”(hŒ Client which creates the context”h]”hŒ Client which creates the context”…”�”}”(hj¨‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¤‘h´K¿hj¥‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj‰‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤‘h´K¿hj†‘ubj)�”}”(hŒ<``vm`` See :c:type:`i915_gem_context.vm ` ”h]”(j$)�”}”(hŒ``vm``”h]”j*)�”}”(hjÈ‘h]”hŒvm”…”�”}”(hjÊ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÆ‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KÂhj‘ubj@)�”}”(hhh]”hÚ)�”}”(hŒ4See :c:type:`i915_gem_context.vm `”h]”(hŒSee ”…”�”}”(hjá‘h²hh³Nh´Nubh)�”}”(hŒ0:c:type:`i915_gem_context.vm `”h]”j*)�”}”(hjë‘h]”hŒi915_gem_context.vm”…”�”}”(hjí‘h²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjé‘ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùjü)�”}”jÿ]”sbjŒi915_gem_context”uh1hh³jÝ‘h´KÂhjá‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÝ‘h´KÂhjÞ‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝ‘h´KÂhj†‘ubj)�”}”(hŒL``user_flags`` See :c:type:`i915_gem_context.user_flags ` ”h]”(j$)�”}”(hŒ``user_flags``”h]”j*)�”}”(hj#’h]”hŒ user_flags”…”�”}”(hj%’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj!’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KÅhj’ubj@)�”}”(hhh]”hÚ)�”}”(hŒ`”h]”(hŒSee ”…”�”}”(hj<’h²hh³Nh´Nubh)�”}”(hŒ8:c:type:`i915_gem_context.user_flags `”h]”j*)�”}”(hjF’h]”hŒi915_gem_context.user_flags”…”�”}”(hjH’h²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjD’ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒi915_gem_context”uh1hh³j8’h´KÅhj<’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j8’h´KÅhj9’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j8’h´KÅhj†‘ubj)�”}”(hŒB``sched`` See :c:type:`i915_gem_context.sched ` ”h]”(j$)�”}”(hŒ ``sched``”h]”j*)�”}”(hj{’h]”hŒsched”…”�”}”(hj}’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjy’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KÈhju’ubj@)�”}”(hhh]”hÚ)�”}”(hŒ7See :c:type:`i915_gem_context.sched `”h]”(hŒSee ”…”�”}”(hj”’h²hh³Nh´Nubh)�”}”(hŒ3:c:type:`i915_gem_context.sched `”h]”j*)�”}”(hjž’h]”hŒi915_gem_context.sched”…”�”}”(hj ’h²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjœ’ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒi915_gem_context”uh1hh³j�’h´KÈhj”’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j�’h´KÈhj‘’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hju’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�’h´KÈhj†‘ubj)�”}”(hŒ<``num_user_engines`` Number of user-specified engines or -1 ”h]”(j$)�”}”(hŒ``num_user_engines``”h]”j*)�”}”(hjÓ’h]”hŒnum_user_engines”…”�”}”(hjÕ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÑ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KËhjÍ’ubj@)�”}”(hhh]”hÚ)�”}”(hŒ&Number of user-specified engines or -1”h]”hŒ&Number of user-specified engines or -1”…”�”}”(hjì’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jè’h´KËhjé’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÍ’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jè’h´KËhj†‘ubj)�”}”(hŒ(``user_engines`` User-specified engines ”h]”(j$)�”}”(hŒ``user_engines``”h]”j*)�”}”(hj “h]”hŒ user_engines”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj “ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KÎhj“ubj@)�”}”(hhh]”hÚ)�”}”(hŒUser-specified engines”h]”hŒUser-specified engines”…”�”}”(hj%“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j!“h´KÎhj"“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!“h´KÎhj†‘ubj)�”}”(hŒB``legacy_rcs_sseu`` Client-set SSEU parameters for the legacy RCS ”h]”(j$)�”}”(hŒ``legacy_rcs_sseu``”h]”j*)�”}”(hjE“h]”hŒlegacy_rcs_sseu”…”�”}”(hjG“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjC“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KÑhj?“ubj@)�”}”(hhh]”hÚ)�”}”(hŒ-Client-set SSEU parameters for the legacy RCS”h]”hŒ-Client-set SSEU parameters for the legacy RCS”…”�”}”(hj^“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jZ“h´KÑhj[“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj?“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jZ“h´KÑhj†‘ubj)�”}”(hŒR``single_timeline`` See See :c:type:`i915_gem_context.syncobj ` ”h]”(j$)�”}”(hŒ``single_timeline``”h]”j*)�”}”(hj~“h]”hŒsingle_timeline”…”�”}”(hj€“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj|“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KÔhjx“ubj@)�”}”(hhh]”hÚ)�”}”(hŒ=See See :c:type:`i915_gem_context.syncobj `”h]”(hŒSee See ”…”�”}”(hj—“h²hh³Nh´Nubh)�”}”(hŒ5:c:type:`i915_gem_context.syncobj `”h]”j*)�”}”(hj¡“h]”hŒi915_gem_context.syncobj”…”�”}”(hj£“h²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjŸ“ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒi915_gem_context”uh1hh³j““h´KÔhj—“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j““h´KÔhj”“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjx“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j““h´KÔhj†‘ubj)�”}”(hŒd``uses_protected_content`` See :c:type:`i915_gem_context.uses_protected_content ` ”h]”(j$)�”}”(hŒ``uses_protected_content``”h]”j*)�”}”(hjÖ“h]”hŒuses_protected_content”…”�”}”(hjØ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÔ“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K×hjГubj@)�”}”(hhh]”hÚ)�”}”(hŒHSee :c:type:`i915_gem_context.uses_protected_content `”h]”(hŒSee ”…”�”}”(hjï“h²hh³Nh´Nubh)�”}”(hŒD:c:type:`i915_gem_context.uses_protected_content `”h]”j*)�”}”(hjù“h]”hŒ'i915_gem_context.uses_protected_content”…”�”}”(hjû“h²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hj÷“ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒi915_gem_context”uh1hh³jë“h´K×hjï“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jë“h´K×hjì“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjГubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jë“h´K×hj†‘ubj)�”}”(hŒM``pxp_wakeref`` See :c:type:`i915_gem_context.pxp_wakeref `”h]”(j$)�”}”(hŒ``pxp_wakeref``”h]”j*)�”}”(hj.”h]”hŒ pxp_wakeref”…”�”}”(hj0”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj,”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KÙhj(”ubj@)�”}”(hhh]”hÚ)�”}”(hŒ=See :c:type:`i915_gem_context.pxp_wakeref `”h]”(hŒSee ”…”�”}”(hjG”h²hh³Nh´Nubh)�”}”(hŒ9:c:type:`i915_gem_context.pxp_wakeref `”h]”j*)�”}”(hjQ”h]”hŒi915_gem_context.pxp_wakeref”…”�”}”(hjS”h²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjO”ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒi915_gem_context”uh1hh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KÚhjG”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jn”h´KÚhjD”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj(”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jC”h´KÙhj†‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj>‘ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjȈh²hh³jçˆh´NubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj�”h]”hŒ Description”…”�”}”(hj’”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KÝhjȈh²hubhÚ)�”}”(hXThe struct i915_gem_proto_context represents the creation parameters for a struct i915_gem_context. This is used to gather parameters provided either through creation flags or via SET_CONTEXT_PARAM so that, when we create the final i915_gem_context, those parameters can be immutable.”h]”hXThe struct i915_gem_proto_context represents the creation parameters for a struct i915_gem_context. This is used to gather parameters provided either through creation flags or via SET_CONTEXT_PARAM so that, when we create the final i915_gem_context, those parameters can be immutable.”…”�”}”(hj¦”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K�hjȈh²hubhÚ)�”}”(hXcThe context uAPI allows for two methods of setting context parameters: SET_CONTEXT_PARAM and CONTEXT_CREATE_EXT_SETPARAM. The former is allowed to be called at any time while the later happens as part of GEM_CONTEXT_CREATE. When these were initially added, Currently, everything settable via one is settable via the other. While some params are fairly simple and setting them on a live context is harmless such the context priority, others are far trickier such as the VM or the set of engines. To avoid some truly nasty race conditions, we don't allow setting the VM or the set of engines on live contexts.”h]”hXeThe context uAPI allows for two methods of setting context parameters: SET_CONTEXT_PARAM and CONTEXT_CREATE_EXT_SETPARAM. The former is allowed to be called at any time while the later happens as part of GEM_CONTEXT_CREATE. When these were initially added, Currently, everything settable via one is settable via the other. While some params are fairly simple and setting them on a live context is harmless such the context priority, others are far trickier such as the VM or the set of engines. To avoid some truly nasty race conditions, we don’t allow setting the VM or the set of engines on live contexts.”…”�”•l}”(hjµ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K†hjȈh²hubhÚ)�”}”(hX The way we dealt with this without breaking older userspace that sets the VM or engine set via SET_CONTEXT_PARAM is to delay the creation of the actual context until after the client is done configuring it with SET_CONTEXT_PARAM. From the perspective of the client, it has the same u32 context ID the whole time. From the perspective of i915, however, it's an i915_gem_proto_context right up until the point where we attempt to do something which the proto-context can't handle at which point the real context gets created.”h]”hXThe way we dealt with this without breaking older userspace that sets the VM or engine set via SET_CONTEXT_PARAM is to delay the creation of the actual context until after the client is done configuring it with SET_CONTEXT_PARAM. From the perspective of the client, it has the same u32 context ID the whole time. From the perspective of i915, however, it’s an i915_gem_proto_context right up until the point where we attempt to do something which the proto-context can’t handle at which point the real context gets created.”…”�”}”(hjÄ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K�hjȈh²hubhÚ)�”}”(hXâThis is accomplished via a little xarray dance. When GEM_CONTEXT_CREATE is called, we create a proto-context, reserve a slot in context_xa but leave it NULL, the proto-context in the corresponding slot in proto_context_xa. Then, whenever we go to look up a context, we first check context_xa. If it's there, we return the i915_gem_context and we're done. If it's not, we look in proto_context_xa and, if we find it there, we create the actual context and kill the proto-context.”h]”hXèThis is accomplished via a little xarray dance. When GEM_CONTEXT_CREATE is called, we create a proto-context, reserve a slot in context_xa but leave it NULL, the proto-context in the corresponding slot in proto_context_xa. Then, whenever we go to look up a context, we first check context_xa. If it’s there, we return the i915_gem_context and we’re done. If it’s not, we look in proto_context_xa and, if we find it there, we create the actual context and kill the proto-context.”…”�”}”(hjÓ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K™hjȈh²hubhÚ)�”}”(hŒ‹At the time we made this change (April, 2021), we did a fairly complete audit of existing userspace to ensure this wouldn't break anything:”h]”hŒ�At the time we made this change (April, 2021), we did a fairly complete audit of existing userspace to ensure this wouldn’t break anything:”…”�”}”(hjâ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K¡hjȈh²hubjgd)�”}”(hX·- Mesa/i965 didn't use the engines or VM APIs at all - Mesa/ANV used the engines API but via CONTEXT_CREATE_EXT_SETPARAM and didn't use the VM API. - Mesa/iris didn't use the engines or VM APIs at all - The open-source compute-runtime didn't yet use the engines API but did use the VM API via SET_CONTEXT_PARAM. However, CONTEXT_SETPARAM was always the second ioctl on that context, immediately following GEM_CONTEXT_CREATE. - The media driver sets engines and bonding/balancing via SET_CONTEXT_PARAM. However, CONTEXT_SETPARAM to set the VM was always the second ioctl on that context, immediately following GEM_CONTEXT_CREATE and setting engines immediately followed that. ”h]”j°:)�”}”(hhh]”(jµ:)�”}”(hŒ3Mesa/i965 didn't use the engines or VM APIs at all ”h]”hÚ)�”}”(hŒ2Mesa/i965 didn't use the engines or VM APIs at all”h]”hŒ4Mesa/i965 didn’t use the engines or VM APIs at all”…”�”}”(hjü”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K¤hjø”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjõ”ubjµ:)�”}”(hŒ]Mesa/ANV used the engines API but via CONTEXT_CREATE_EXT_SETPARAM and didn't use the VM API. ”h]”hÚ)�”}”(hŒ\Mesa/ANV used the engines API but via CONTEXT_CREATE_EXT_SETPARAM and didn't use the VM API.”h]”hŒ^Mesa/ANV used the engines API but via CONTEXT_CREATE_EXT_SETPARAM and didn’t use the VM API.”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K¦hj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjõ”ubjµ:)�”}”(hŒ3Mesa/iris didn't use the engines or VM APIs at all ”h]”hÚ)�”}”(hŒ2Mesa/iris didn't use the engines or VM APIs at all”h]”hŒ4Mesa/iris didn’t use the engines or VM APIs at all”…”�”}”(hj.•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K©hj*•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjõ”ubjµ:)�”}”(hŒßThe open-source compute-runtime didn't yet use the engines API but did use the VM API via SET_CONTEXT_PARAM. However, CONTEXT_SETPARAM was always the second ioctl on that context, immediately following GEM_CONTEXT_CREATE. ”h]”hÚ)�”}”(hŒÞThe open-source compute-runtime didn't yet use the engines API but did use the VM API via SET_CONTEXT_PARAM. However, CONTEXT_SETPARAM was always the second ioctl on that context, immediately following GEM_CONTEXT_CREATE.”h]”hŒàThe open-source compute-runtime didn’t yet use the engines API but did use the VM API via SET_CONTEXT_PARAM. However, CONTEXT_SETPARAM was always the second ioctl on that context, immediately following GEM_CONTEXT_CREATE.”…”�”}”(hjG•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K«hjC•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjõ”ubjµ:)�”}”(hŒùThe media driver sets engines and bonding/balancing via SET_CONTEXT_PARAM. However, CONTEXT_SETPARAM to set the VM was always the second ioctl on that context, immediately following GEM_CONTEXT_CREATE and setting engines immediately followed that. ”h]”hÚ)�”}”(hŒøThe media driver sets engines and bonding/balancing via SET_CONTEXT_PARAM. However, CONTEXT_SETPARAM to set the VM was always the second ioctl on that context, immediately following GEM_CONTEXT_CREATE and setting engines immediately followed that.”h]”hŒøThe media driver sets engines and bonding/balancing via SET_CONTEXT_PARAM. However, CONTEXT_SETPARAM to set the VM was always the second ioctl on that context, immediately following GEM_CONTEXT_CREATE and setting engines immediately followed that.”…”�”}”(hj`•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K°hj\•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjõ”ubeh}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³j •h´K¤hjñ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³j •h´K¤hjȈh²hubhÚ)�”}”(hXiIn order for this dance to work properly, any modification to an i915_gem_proto_context that is exposed to the client via drm_i915_file_private::proto_context_xa must be guarded by drm_i915_file_private::proto_context_lock. The exception is when a proto-context has not yet been exposed such as when handling CONTEXT_CREATE_SET_PARAM during GEM_CONTEXT_CREATE.”h]”hXiIn order for this dance to work properly, any modification to an i915_gem_proto_context that is exposed to the client via drm_i915_file_private::proto_context_xa must be guarded by drm_i915_file_private::proto_context_lock. The exception is when a proto-context has not yet been exposed such as when handling CONTEXT_CREATE_SET_PARAM during GEM_CONTEXT_CREATE.”…”�”}”(hj�•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KµhjȈh²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_gem_context (C struct)”Œc.i915_gem_context”hNt”auh1j¶hjȈh²hh³jçˆh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒi915_gem_context”h]”jÓ)�”}”(hŒstruct i915_gem_context”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj©•h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj¥•h²hh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´K¿ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¥•h²hh³j¶•h´K¿ubj)�”}”(hŒi915_gem_context”h]”jÜ)�”}”(hj£•h]”hŒi915_gem_context”…”�”}”(hjÉ•h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÅ•ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj¥•h²hh³j¶•h´K¿ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj¡•h²hh³j¶•h´K¿ubah}”(h]”jœ•ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j¶•h´K¿hjž•h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ client state”h]”hŒ client state”…”�”}”(hjë•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KÞhjè•h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjž•h²hh³j¶•h´K¿ubeh}”(h]”h ]”(jóŒstruct”eh"]”h$]”h&]”jòjójój–jôj–jõ‰jö‰j÷‰uh1jÇh²hhjȈh³jçˆh´Nubjù)�”}”(hX'**Definition**:: struct i915_gem_context { struct drm_i915_private *i915; struct drm_i915_file_private *file_priv; struct i915_gem_engines *engines; struct mutex engines_mutex; struct drm_syncobj *syncobj; struct i915_address_space *vm; struct pid *pid; struct list_head link; struct i915_drm_client *client; struct list_head client_link; struct kref ref; struct work_struct release_work; struct rcu_head rcu; unsigned long user_flags; #define UCONTEXT_NO_ERROR_CAPTURE 1; #define UCONTEXT_BANNABLE 2; #define UCONTEXT_RECOVERABLE 3; #define UCONTEXT_PERSISTENCE 4; #define UCONTEXT_LOW_LATENCY 5; unsigned long flags; #define CONTEXT_CLOSED 0; #define CONTEXT_USER_ENGINES 1; bool uses_protected_content; intel_wakeref_t pxp_wakeref; struct mutex mutex; struct i915_sched_attr sched; atomic_t guilty_count; atomic_t active_count; unsigned long hang_timestamp[2]; #define CONTEXT_FAST_HANG_JIFFIES (120 * HZ) ; u8 remap_slice; struct radix_tree_root handles_vma; struct mutex lut_mutex; char name[TASK_COMM_LEN + 8]; struct { spinlock_t lock; struct list_head engines; } stale; }; **Members** ``i915`` i915 device backpointer ``file_priv`` owning file descriptor ``engines`` User defined engines for this context Various uAPI offer the ability to lookup up an index from this array to select an engine operate on. Multiple logically distinct instances of the same engine may be defined in the array, as well as composite virtual engines. Execbuf uses the I915_EXEC_RING_MASK as an index into this array to select which HW context + engine to execute on. For the default array, the user_ring_map[] is used to translate the legacy uABI onto the appropriate index (e.g. both I915_EXEC_DEFAULT and I915_EXEC_RENDER select the same context, and I915_EXEC_BSD is weird). For a user defined array, execbuf uses I915_EXEC_RING_MASK as a plain index. User defined by I915_CONTEXT_PARAM_ENGINE (when the CONTEXT_USER_ENGINES flag is set). ``engines_mutex`` guards writes to engines ``syncobj`` Shared timeline syncobj When the SHARED_TIMELINE flag is set on context creation, we emulate a single timeline across all engines using this syncobj. For every execbuffer2 call, this syncobj is used as both an in- and out-fence. Unlike the real intel_timeline, this doesn't provide perfect atomic in-order guarantees if the client races with itself by calling execbuffer2 twice concurrently. However, if userspace races with itself, that's not likely to yield well- defined results anyway so we choose to not care. ``vm`` unique address space (GTT) In full-ppgtt mode, each context has its own address space ensuring complete separation of one client from all others. In other modes, this is a NULL pointer with the expectation that the caller uses the shared global GTT. ``pid`` process id of creator Note that who created the context may not be the principle user, as the context may be shared across a local socket. However, that should only affect the default context, all contexts created explicitly by the client are expected to be isolated. ``link`` place with :c:type:`drm_i915_private.context_list ` ``client`` struct i915_drm_client ``client_link`` for linking onto :c:type:`i915_drm_client.ctx_list ` ``ref`` reference count A reference to a context is held by both the client who created it and on each request submitted to the hardware using the request (to ensure the hardware has access to the state until it has finished all pending writes). See i915_gem_context_get() and i915_gem_context_put() for access. ``release_work`` Work item for deferred cleanup, since i915_gem_context_put() tends to be called from hardirq context. FIXME: The only real reason for this is :c:type:`i915_gem_engines.fence `, all other callers are from process context and need at most some mild shuffling to pull the i915_gem_context_put() call out of a spinlock. ``rcu`` rcu_head for deferred freeing. ``user_flags`` small set of booleans controlled by the user ``flags`` small set of booleans ``uses_protected_content`` context uses PXP-encrypted objects. This flag can only be set at ctx creation time and it's immutable for the lifetime of the context. See I915_CONTEXT_PARAM_PROTECTED_CONTENT in uapi/drm/i915_drm.h for more info on setting restrictions and expected behaviour of marked contexts. ``pxp_wakeref`` wakeref to keep the device awake when PXP is in use PXP sessions are invalidated when the device is suspended, which in turns invalidates all contexts and objects using it. To keep the flow simple, we keep the device awake when contexts using PXP objects are in use. It is expected that the userspace application only uses PXP when the display is on, so taking a wakeref here shouldn't worsen our power metrics. ``mutex`` guards everything that isn't engines or handles_vma ``sched`` scheduler parameters ``guilty_count`` How many times this context has caused a GPU hang. ``active_count`` How many times this context was active during a GPU hang, but did not cause it. ``hang_timestamp`` The last time(s) this context caused a GPU hang ``remap_slice`` Bitmask of cache lines that need remapping ``handles_vma`` rbtree to look up our context specific obj/vma for the user handle. (user handles are per fd, but the binding is per vm, which may be one per context or shared with the global GTT) ``lut_mutex`` Locks handles_vma ``name`` arbitrary name, used for user debug A name is constructed for the context from the creator's process name, pid and user handle in order to uniquely identify the context in messages. ``stale`` tracks stale engines to be destroyed ``stale.lock`` guards engines ``stale.engines`` list of stale engines”h]”(hÚ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj –ubhŒ:”…”�”}”(hj –h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kâhj–ubjA#)�”}”(hXøstruct i915_gem_context { struct drm_i915_private *i915; struct drm_i915_file_private *file_priv; struct i915_gem_engines *engines; struct mutex engines_mutex; struct drm_syncobj *syncobj; struct i915_address_space *vm; struct pid *pid; struct list_head link; struct i915_drm_client *client; struct list_head client_link; struct kref ref; struct work_struct release_work; struct rcu_head rcu; unsigned long user_flags; #define UCONTEXT_NO_ERROR_CAPTURE 1; #define UCONTEXT_BANNABLE 2; #define UCONTEXT_RECOVERABLE 3; #define UCONTEXT_PERSISTENCE 4; #define UCONTEXT_LOW_LATENCY 5; unsigned long flags; #define CONTEXT_CLOSED 0; #define CONTEXT_USER_ENGINES 1; bool uses_protected_content; intel_wakeref_t pxp_wakeref; struct mutex mutex; struct i915_sched_attr sched; atomic_t guilty_count; atomic_t active_count; unsigned long hang_timestamp[2]; #define CONTEXT_FAST_HANG_JIFFIES (120 * HZ) ; u8 remap_slice; struct radix_tree_root handles_vma; struct mutex lut_mutex; char name[TASK_COMM_LEN + 8]; struct { spinlock_t lock; struct list_head engines; } stale; };”h]”hXøstruct i915_gem_context { struct drm_i915_private *i915; struct drm_i915_file_private *file_priv; struct i915_gem_engines *engines; struct mutex engines_mutex; struct drm_syncobj *syncobj; struct i915_address_space *vm; struct pid *pid; struct list_head link; struct i915_drm_client *client; struct list_head client_link; struct kref ref; struct work_struct release_work; struct rcu_head rcu; unsigned long user_flags; #define UCONTEXT_NO_ERROR_CAPTURE 1; #define UCONTEXT_BANNABLE 2; #define UCONTEXT_RECOVERABLE 3; #define UCONTEXT_PERSISTENCE 4; #define UCONTEXT_LOW_LATENCY 5; unsigned long flags; #define CONTEXT_CLOSED 0; #define CONTEXT_USER_ENGINES 1; bool uses_protected_content; intel_wakeref_t pxp_wakeref; struct mutex mutex; struct i915_sched_attr sched; atomic_t guilty_count; atomic_t active_count; unsigned long hang_timestamp[2]; #define CONTEXT_FAST_HANG_JIFFIES (120 * HZ) ; u8 remap_slice; struct radix_tree_root handles_vma; struct mutex lut_mutex; char name[TASK_COMM_LEN + 8]; struct { spinlock_t lock; struct list_head engines; } stale; };”…”�”}”hj(–sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kähj–ubhÚ)�”}”(hŒ **Members**”h]”j)�”}”(hj9–h]”hŒMembers”…”�”}”(hj;–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M hj–ubj)�”}”(hhh]”(j)�”}”(hŒ!``i915`` i915 device backpointer ”h]”(j$)�”}”(hŒ``i915``”h]”j*)�”}”(hjX–h]”hŒi915”…”�”}”(hjZ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjV–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KåhjR–ubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 device backpointer”h]”hŒi915 device backpointer”…”�”}”(hjq–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jm–h´Kåhjn–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjR–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jm–h´KåhjO–ubj)�”}”(hŒ%``file_priv`` owning file descriptor ”h]”(j$)�”}”(hŒ ``file_priv``”h]”j*)�”}”(hj‘–h]”hŒ file_priv”…”�”}”(hj“–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj�–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kèhj‹–ubj@)�”}”(hhh]”hÚ)�”}”(hŒowning file descriptor”h]”hŒowning file descriptor”…”�”}”(hjª–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¦–h´Kèhj§–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj‹–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¦–h´KèhjO–ubj)�”}”(hX``engines`` User defined engines for this context Various uAPI offer the ability to lookup up an index from this array to select an engine operate on. Multiple logically distinct instances of the same engine may be defined in the array, as well as composite virtual engines. Execbuf uses the I915_EXEC_RING_MASK as an index into this array to select which HW context + engine to execute on. For the default array, the user_ring_map[] is used to translate the legacy uABI onto the appropriate index (e.g. both I915_EXEC_DEFAULT and I915_EXEC_RENDER select the same context, and I915_EXEC_BSD is weird). For a user defined array, execbuf uses I915_EXEC_RING_MASK as a plain index. User defined by I915_CONTEXT_PARAM_ENGINE (when the CONTEXT_USER_ENGINES flag is set). ”h]”(j$)�”}”(hŒ ``engines``”h]”j*)�”}”(hjÊ–h]”hŒengines”…”�”}”(hjÌ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÈ–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KþhjÄ–ubj@)�”}”(hhh]”(hÚ)�”}”(hŒ%User defined engines for this context”h]”hŒ%User defined engines for this context”…”�”}”(hjã–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kìhjà–ubhÚ)�”}”(hŒdVarious uAPI offer the ability to lookup up an index from this array to select an engine operate on.”h]”hŒdVarious uAPI offer the ability to lookup up an index from this array to select an engine operate on.”…”�”}”(hjò–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kîhjà–ubhÚ)�”}”(hŒ{Multiple logically distinct instances of the same engine may be defined in the array, as well as composite virtual engines.”h]”hŒ{Multiple logically distinct instances of the same engine may be defined in the array, as well as composite virtual engines.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kñhjà–ubhÚ)�”}”(hX“Execbuf uses the I915_EXEC_RING_MASK as an index into this array to select which HW context + engine to execute on. For the default array, the user_ring_map[] is used to translate the legacy uABI onto the appropriate index (e.g. both I915_EXEC_DEFAULT and I915_EXEC_RENDER select the same context, and I915_EXEC_BSD is weird). For a user defined array, execbuf uses I915_EXEC_RING_MASK as a plain index.”h]”hX“Execbuf uses the I915_EXEC_RING_MASK as an index into this array to select which HW context + engine to execute on. For the default array, the user_ring_map[] is used to translate the legacy uABI onto the appropriate index (e.g. both I915_EXEC_DEFAULT and I915_EXEC_RENDER select the same context, and I915_EXEC_BSD is weird). For a user defined array, execbuf uses I915_EXEC_RING_MASK as a plain index.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kõhjà–ubhÚ)�”}”(hŒVUser defined by I915_CONTEXT_PARAM_ENGINE (when the CONTEXT_USER_ENGINES flag is set).”h]”hŒVUser defined by I915_CONTEXT_PARAM_ENGINE (when the CONTEXT_USER_ENGINES flag is set).”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Kýhjà–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÄ–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jß–h´KþhjO–ubj)�”}”(hŒ+``engines_mutex`` guards writes to engines ”h]”(j$)�”}”(hŒ``engines_mutex``”h]”j*)�”}”(hj@—h]”hŒ engines_mutex”…”�”}”(hjB—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj>—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mhj:—ubj@)�”}”(hhh]”hÚ)�”}”(hŒguards writes to engines”h]”hŒguards writes to engines”…”�”}”(hjY—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jU—h´MhjV—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj:—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jU—h´MhjO–ubj)�”}”(hX``syncobj`` Shared timeline syncobj When the SHARED_TIMELINE flag is set on context creation, we emulate a single timeline across all engines using this syncobj. For every execbuffer2 call, this syncobj is used as both an in- and out-fence. Unlike the real intel_timeline, this doesn't provide perfect atomic in-order guarantees if the client races with itself by calling execbuffer2 twice concurrently. However, if userspace races with itself, that's not likely to yield well- defined results anyway so we choose to not care. ”h]”(j$)�”}”(hŒ ``syncobj``”h]”j*)�”}”(hjy—h]”hŒsyncobj”…”�”}”(hj{—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjw—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mhjs—ubj@)�”}”(hhh]”(hÚ)�”}”(hŒShared timeline syncobj”h]”hŒShared timeline syncobj”…”�”}”(hj’—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mhj�—ubhÚ)�”}”(hXìWhen the SHARED_TIMELINE flag is set on context creation, we emulate a single timeline across all engines using this syncobj. For every execbuffer2 call, this syncobj is used as both an in- and out-fence. Unlike the real intel_timeline, this doesn't provide perfect atomic in-order guarantees if the client races with itself by calling execbuffer2 twice concurrently. However, if userspace races with itself, that's not likely to yield well- defined results anyway so we choose to not care.”h]”hXðWhen the SHARED_TIMELINE flag is set on context creation, we emulate a single timeline across all engines using this syncobj. For every execbuffer2 call, this syncobj is used as both an in- and out-fence. Unlike the real intel_timeline, this doesn’t provide perfect atomic in-order guarantees if the client races with itself by calling execbuffer2 twice concurrently. However, if userspace races with itself, that’s not likely to yield well- defined results anyway so we choose to not care.”…”�”}”(hj¡—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mhj�—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j?hjs—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŽ—h´MhjO–ubj)�”}”(hX``vm`` unique address space (GTT) In full-ppgtt mode, each context has its own address space ensuring complete separation of one client from all others. In other modes, this is a NULL pointer with the expectation that the caller uses the shared global GTT. ”h]”(j$)�”}”(hŒ``vm``”h]”j*)�”}”(hj—h]”hŒvm”…”�”}”(hjÄ—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÀ—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mhj¼—ubj@)�”}”(hhh]”(hÚ)�”}”(hŒunique address space (GTT)”h]”hŒunique address space (GTT)”…”�”}”(hjÛ—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´MhjØ—ubhÚ)�”}”(hŒvIn full-ppgtt mode, each context has its own address space ensuring complete separation of one client from all others.”h]”hŒvIn full-ppgtt mode, each context has its own address space ensuring complete separation of one client from all others.”…”�”}”(hjê—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´MhjØ—ubhÚ)�”}”(hŒgIn other modes, this is a NULL pointer with the expectation that the caller uses the shared global GTT.”h]”hŒgIn other modes, this is a NULL pointer with the expectation that the caller uses the shared global GTT.”…”�”}”(hjù—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´MhjØ—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¼—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j×—h´MhjO–ubj)�”}”(hX``pid`` process id of creator Note that who created the context may not be the principle user, as the context may be shared across a local socket. However, that should only affect the default context, all contexts created explicitly by the client are expected to be isolated. ”h]”(j$)�”}”(hŒ``pid``”h]”j*)�”}”(hj˜h]”hŒpid”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M$hj˜ubj@)�”}”(hhh]”(hÚ)�”}”(hŒprocess id of creator”h]”hŒprocess id of creator”…”�”}”(hj3˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mhj0˜ubhÚ)�”}”(hŒõNote that who created the context may not be the principle user, as the context may be shared across a local socket. However, that should only affect the default context, all contexts created explicitly by the client are expected to be isolated.”h]”hŒõNote that who created the context may not be the principle user, as the context may be shared across a local socket. However, that should only affect the default context, all contexts created explicitly by the client are expected to be isolated.”…”�”}”(hjB˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M!hj0˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j?hj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j/˜h´M$hjO–ubj)�”}”(hŒO``link`` place with :c:type:`drm_i915_private.context_list ` ”h]”(j$)�”}”(hŒ``link``”h]”j*)�”}”(hjc˜h]”hŒlink”…”�”}”(hje˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hja˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M(hj]˜ubj@)�”}”(hhh]”hÚ)�”}”(hŒEplace with :c:type:`drm_i915_private.context_list `”h]”(hŒ place with ”…”�”}”(hj|˜h²hh³Nh´Nubh)�”}”(hŒ::c:type:`drm_i915_private.context_list `”h]”j*)�”}”(hj†˜h]”hŒdrm_i915_private.context_list”…”�”}”(hjˆ˜h²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hj„˜ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒdrm_i915_private”uh1hh³jx˜h´M(hj|˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jx˜h´M(hjy˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj]˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jx˜h´M(hjO–ubj)�”}”(hŒ"``client`` struct i915_drm_client ”h]”(j$)�”}”(hŒ ``client``”h]”j*)�”}”(hj»˜h]”hŒclient”…”�”}”(hj½˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¹˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M+hjµ˜ubj@)�”}”(hhh]”hÚ)�”}”(hŒstruct i915_drm_client”h]”hŒstruct i915_drm_client”…”�”}”(hjÔ˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jИh´M+hjјubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjµ˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jИh´M+hjO–ubj)�”}”(hŒV``client_link`` for linking onto :c:type:`i915_drm_client.ctx_list ` ”h]”(j$)�”}”(hŒ``client_link``”h]”j*)�”}”(hjô˜h]”hŒ client_link”…”�”}”(hjö˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjò˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M.hjî˜ubj@)�”}”(hhh]”hÚ)�”}”(hŒEfor linking onto :c:type:`i915_drm_client.ctx_list `”h]”(hŒfor linking onto ”…”�”}”(hj ™h²hh³Nh´Nubh)�”}”(hŒ4:c:type:`i915_drm_client.ctx_list `”h]”j*)�”}”(hj™h]”hŒi915_drm_client.ctx_list”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hj™ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒi915_drm_client”uh1hh³j ™h´M.hj ™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j ™h´M.hj ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjî˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ™h´M.hjO–ubj)�”}”(hX9``ref`` reference count A reference to a context is held by both the client who created it and on each request submitted to the hardware using the request (to ensure the hardware has access to the state until it has finished all pending writes). See i915_gem_context_get() and i915_gem_context_put() for access. ”h]”(j$)�”}”(hŒ``ref``”h]”j*)�”}”(hjL™h]”hŒref”…”�”}”(hjN™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjJ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M8hjF™ubj@)�”}”(hhh]”(hÚ)�”}”(hŒreference count”h]”hŒreference count”…”�”}”(hje™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M2hjb™ubhÚ)�”}”(hXA reference to a context is held by both the client who created it and on each request submitted to the hardware using the request (to ensure the hardware has access to the state until it has finished all pending writes). See i915_gem_context_get() and i915_gem_context_put() for access.”h]”hXA reference to a context is held by both the client who created it and on each request submitted to the hardware using the request (to ensure the hardware has access to the state until it has finished all pending writes). See i915_gem_context_get() and i915_gem_context_put() for access.”…”�”}”(hjt™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M4hjb™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j?hjF™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³ja™h´M8hjO–ubj)�”}”(hX```release_work`` Work item for deferred cleanup, since i915_gem_context_put() tends to be called from hardirq context. FIXME: The only real reason for this is :c:type:`i915_gem_engines.fence `, all other callers are from process context and need at most some mild shuffling to pull the i915_gem_context_put() call out of a spinlock. ”h]”(j$)�”}”(hŒ``release_work``”h]”j*)�”}”(hj•™h]”hŒ release_work”…”�”}”(hj—™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj“™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´MBhj�™ubj@)�”}”(hhh]”(hÚ)�”}”(hŒeWork item for deferred cleanup, since i915_gem_context_put() tends to be called from hardirq context.”h]”hŒeWork item for deferred cleanup, since i915_gem_context_put() tends to be called from hardirq context.”…”�”}”(hj®™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M=hj«™ubhÚ)�”}”(hŒçFIXME: The only real reason for this is :c:type:`i915_gem_engines.fence `, all other callers are from process context and need at most some mild shuffling to pull the i915_gem_context_put() call out of a spinlock.”h]”(hŒ(FIXME: The only real reason for this is ”…”�”}”(hj½™h²hh³Nh´Nubh)�”}”(hŒ3:c:type:`i915_gem_engines.fence `”h]”j*)�”}”(hjÇ™h]”hŒi915_gem_engines.fence”…”�”}”(hjÉ™h²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjÅ™ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒi915_gem_engines”uh1hh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M@hj½™ubhŒŒ, all other callers are from process context and need at most some mild shuffling to pull the i915_gem_context_put() call out of a spinlock.”…”�”}”(hj½™h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jä™h´M@hj«™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j?hj�™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jª™h´MBhjO–ubj)�”}”(hŒ'``rcu`` rcu_head for deferred freeing. ”h]”(j$)�”}”(hŒ``rcu``”h]”j*)�”}”(hjšh]”hŒrcu”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÿ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´MIhjû™ubj@)�”}”(hhh]”hÚ)�”}”(hŒrcu_head for deferred freeing.”h]”hŒrcu_head for deferred freeing.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jšh´MIhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjû™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jšh´MIhjO–ubj)�”}”(hŒ<``user_flags`` small set of booleans controlled by the user ”h]”(j$)�”}”(hŒ``user_flags``”h]”j*)�”}”(hj:šh]”hŒ user_flags”…”�”}”(hj<šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj8šubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´MNhj4šubj@)�”}”(hhh]”hÚ)�”}”(hŒ,small set of booleans controlled by the user”h]”hŒ,small set of booleans controlled by the user”…”�”}”(hjSšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jOšh´MNhjPšubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj4šubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jOšh´MNhjO–ubj)�”}”(hŒ ``flags`` small set of booleans ”h]”(j$)�”}”(hŒ ``flags``”h]”j*)�”}”(hjsšh]”hŒflags”…”�”}”(hjušh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjqšubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´MXhjmšubj@)�”}”(hhh]”hÚ)�”}”(hŒsmall set of booleans”h]”hŒsmall set of booleans”…”�”}”(hjŒšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jˆšh´MXhj‰šubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjmšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jˆšh´MXhjO–ubj)�”}”(hX4``uses_protected_content`` context uses PXP-encrypted objects. This flag can only be set at ctx creation time and it's immutable for the lifetime of the context. See I915_CONTEXT_PARAM_PROTECTED_CONTENT in uapi/drm/i915_drm.h for more info on setting restrictions and expected behaviour of marked contexts. ”h]”(j$)�”}”(hŒ``uses_protected_content``”h]”j*)�”}”(hj¬šh]”hŒuses_protected_content”…”�”}”(hj®šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjªšubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mdhj¦šubj@)�”}”(hhh]”(hÚ)�”}”(hŒ#context uses PXP-encrypted objects.”h]”hŒ#context uses PXP-encrypted objects.”…”�”}”(hjÅšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M_hjšubhÚ)�”}”(hŒóThis flag can only be set at ctx creation time and it's immutable for the lifetime of the context. See I915_CONTEXT_PARAM_PROTECTED_CONTENT in uapi/drm/i915_drm.h for more info on setting restrictions and expected behaviour of marked contexts.”h]”hŒõThis flag can only be set at ctx creation time and it’s immutable for the lifetime of the context. See I915_CONTEXT_PARAM_PROTECTED_CONTENT in uapi/drm/i915_drm.h for more info on setting restrictions and expected behaviour of marked contexts.”…”�”}”(hjÔšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mahjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¦šubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÁšh´MdhjO–ubj)�”}”(hX­``pxp_wakeref`` wakeref to keep the device awake when PXP is in use PXP sessions are invalidated when the device is suspended, which in turns invalidates all contexts and objects using it. To keep the flow simple, we keep the device awake when contexts using PXP objects are in use. It is expected that the userspace application only uses PXP when the display is on, so taking a wakeref here shouldn't worsen our power metrics. ”h]”(j$)�”}”(hŒ``pxp_wakeref``”h]”j*)�”}”(hjõšh]”hŒ pxp_wakeref”…”�”}”(hj÷šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjóšubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mphjïšubj@)�”}”(hhh]”(hÚ)�”}”(hŒ3wakeref to keep the device awake when PXP is in use”h]”hŒ3wakeref to keep the device awake when PXP is in use”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mihj ›ubhÚ)�”}”(hXgPXP sessions are invalidated when the device is suspended, which in turns invalidates all contexts and objects using it. To keep the flow simple, we keep the device awake when contexts using PXP objects are in use. It is expected that the userspace application only uses PXP when the display is on, so taking a wakeref here shouldn't worsen our power metrics.”h]”hXiPXP sessions are invalidated when the device is suspended, which in turns invalidates all contexts and objects using it. To keep the flow simple, we keep the device awake when contexts using PXP objects are in use. It is expected that the userspace application only uses PXP when the display is on, so taking a wakeref here shouldn’t worsen our power metrics.”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mkhj ›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j?hjïšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ›h´MphjO–ubj)�”}”(hŒ>``mutex`` guards everything that isn't engines or handles_vma ”h]”(j$)�”}”(hŒ ``mutex``”h]”j*)�”}”(hj>›h]”hŒmutex”…”�”}”(hj@›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj<›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mthj8›ubj@)�”}”(hhh]”hÚ)�”}”(hŒ3guards everything that isn't engines or handles_vma”h]”hŒ5guards everything that isn’t engines or handles_vma”…”�”}”(hjW›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jS›h´MthjT›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj8›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jS›h´MthjO–ubj)�”}”(hŒ``sched`` scheduler parameters ”h]”(j$)�”}”(hŒ ``sched``”h]”j*)�”}”(hjw›h]”hŒsched”…”�”}”(hjy›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hju›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mwhjq›ubj@)�”}”(hhh]”hÚ)�”}”(hŒscheduler parameters”h]”hŒscheduler parameters”…”�”}”(hj�›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jŒ›h´Mwhj�›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjq›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŒ›h´MwhjO–ubj)�”}”(hŒD``guilty_count`` How many times this context has caused a GPU hang. ”h]”(j$)�”}”(hŒ``guilty_count``”h]”j*)�”}”(hj°›h]”hŒ guilty_count”…”�”}”(hj²›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj®›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mzhjª›ubj@)�”}”(hhh]”hÚ)�”}”(hŒ2How many times this context has caused a GPU hang.”h]”hŒ2How many times this context has caused a GPU hang.”…”�”}”(hjÉ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÅ›h´MzhjÆ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjª›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÅ›h´MzhjO–ubj)�”}”(hŒa``active_count`` How many times this context was active during a GPU hang, but did not cause it. ”h]”(j$)�”}”(hŒ``active_count``”h]”j*)�”}”(hjé›h]”hŒ active_count”…”�”}”(hjë›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjç›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M~hjã›ubj@)�”}”(hhh]”hÚ)�”}”(hŒOHow many times this context was active during a GPU hang, but did not cause it.”h]”hŒOHow many times this context was active during a GPU hang, but did not cause it.”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M}hjÿ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjã›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jþ›h´M~hjO–ubj)�”}”(hŒC``hang_timestamp`` The last time(s) this context caused a GPU hang ”h]”(j$)�”}”(hŒ``hang_timestamp``”h]”j*)�”}”(hj#œh]”hŒhang_timestamp”…”�”}”(hj%œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj!œubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mƒhjœubj@)�”}”(hhh]”hÚ)�”}”(hŒ/The last time(s) this context caused a GPU hang”h]”hŒ/The last time(s) this context caused a GPU hang”…”�”}”(hj<œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j8œh´Mƒhj9œubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j8œh´MƒhjO–ubj)�”}”(hŒ;``remap_slice`` Bitmask of cache lines that need remapping ”h]”(j$)�”}”(hŒ``remap_slice``”h]”j*)�”}”(hj\œh]”hŒ remap_slice”…”�”}”(hj^œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjZœubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´MˆhjVœubj@)�”}”(hhh]”hÚ)�”}”(hŒ*Bitmask of cache lines that need remapping”h]”hŒ*Bitmask of cache lines that need remapping”…”�”}”(hjuœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jqœh´Mˆhjrœubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjVœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jqœh´MˆhjO–ubj)�”}”(hŒÅ``handles_vma`` rbtree to look up our context specific obj/vma for the user handle. (user handles are per fd, but the binding is per vm, which may be one per context or shared with the global GTT) ”h]”(j$)�”}”(hŒ``handles_vma``”h]”j*)�”}”(hj•œh]”hŒ handles_vma”…”�”}”(hj—œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj“œubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´MŽhj�œubj@)�”}”(hhh]”hÚ)�”}”(hŒ´rbtree to look up our context specific obj/vma for the user handle. (user handles are per fd, but the binding is per vm, which may be one per context or shared with the global GTT)”h]”hŒ´rbtree to look up our context specific obj/vma for the user handle. (user handles are per fd, but the binding is per vm, which may be one per context or shared with the global GTT)”…”�”}”(hj®œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´MŒhj«œubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj�œubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jªœh´MŽhjO–ubj)�”}”(hŒ ``lut_mutex`` Locks handles_vma ”h]”(j$)�”}”(hŒ ``lut_mutex``”h]”j*)�”}”(hjÏœh]”hŒ lut_mutex”…”�”}”(hjÑœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÍœubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M’hjÉœubj@)�”}”(hhh]”hÚ)�”}”(hŒLocks handles_vma”h]”hŒLocks handles_vma”…”�”}”(hjèœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jäœh´M’hjåœubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÉœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jäœh´M’hjO–ubj)�”}”(hŒÀ``name`` arbitrary name, used for user debug A name is constructed for the context from the creator's process name, pid and user handle in order to uniquely identify the context in messages. ”h]”(j$)�”}”(hŒ``name``”h]”j*)�”}”(hj�h]”hŒname”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´Mšhj�ubj@)�”}”(hhh]”(hÚ)�”}”(hŒ#arbitrary name, used for user debug”h]”hŒ#arbitrary name, used for user debug”…”�”}”(hj!�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M–hj�ubhÚ)�”}”(hŒ‘A name is constructed for the context from the creator's process name, pid and user handle in order to uniquely identify the context in messages.”h]”hŒ“A name is constructed for the context from the creator’s process name, pid and user handle in order to uniquely identify the context in messages.”…”�”}”(hj0�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M˜hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j?hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�h´MšhjO–ubj)�”}”(hŒ/``stale`` tracks stale engines to be destroyed ”h]”(j$)�”}”(hŒ ``stale``”h]”j*)�”}”(hjQ�h]”hŒstale”…”�”}”(hjS�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjO�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´MžhjK�ubj@)�”}”(hhh]”hÚ)�”}”(hŒ$tracks stale engines to be destroyed”h]”hŒ$tracks stale engines to be destroyed”…”�”}”(hjj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jf�h´Mžhjg�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjK�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jf�h´MžhjO–ubj)�”}”(hŒ``stale.lock`` guards engines ”h]”(j$)�”}”(hŒ``stale.lock``”h]”j*)�”}”(hjŠ�h]”hŒ stale.lock”…”�”}”(hjŒ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjˆ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M hj„�ubj@)�”}”(hhh]”hÚ)�”}”(hŒguards engines”h]”hŒguards engines”…”�”}”(hj£�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jŸ�h´M hj �ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj„�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸ�h´M hjO–ubj)�”}”(hŒ'``stale.engines`` list of stale engines”h]”(j$)�”}”(hŒ``stale.engines``”h]”j*)�”}”(hjÃ�h]”hŒ stale.engines”…”�”}”(hjÅ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÁ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M¡hj½�ubj@)�”}”(hhh]”hÚ)�”}”(hŒlist of stale engines”h]”hŒlist of stale engines”…”�”}”(hjÜ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M¢hjÙ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj½�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØ�h´M¡hjO–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj–ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjȈh²hh³jçˆh´NubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjžh]”hŒ Description”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´M¥hjȈh²hubhÚ)�”}”(hŒzThe struct i915_gem_context represents the combined view of the driver and logical hardware state for a particular client.”h]”hŒzThe struct i915_gem_context represents the combined view of the driver and logical hardware state for a particular client.”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:242: ./drivers/gpu/drm/i915/gem/i915_gem_context_types.h”h´KßhjȈh²hubhÚ)�”}”(hXîUserspace submits commands to be executed on the GPU as an instruction stream within a GEM object we call a batchbuffer. This instructions may refer to other GEM objects containing auxiliary state such as kernels, samplers, render targets and even secondary batchbuffers. Userspace does not know where in the GPU memory these objects reside and so before the batchbuffer is passed to the GPU for execution, those addresses in the batchbuffer and auxiliary objects are updated. This is known as relocation, or patching. To try and avoid having to relocate each object on the next execution, userspace is told the location of those objects in this pass, but this remains just a hint as the kernel may choose a new location for any object in the future.”h]”hXîUserspace submits commands to be executed on the GPU as an instruction stream within a GEM object we call a batchbuffer. This instructions may refer to other GEM objects containing auxiliary state such as kernels, samplers, render targets and even secondary batchbuffers. Userspace does not know where in the GPU memory these objects reside and so before the batchbuffer is passed to the GPU for execution, those addresses in the batchbuffer and auxiliary objects are updated. This is known as relocation, or patching. To try and avoid having to relocate each object on the next execution, userspace is told the location of those objects in this pass, but this remains just a hint as the kernel may choose a new location for any object in the future.”…”�”}”(hj+žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´KXhjȈh²hubhÚ)�”}”(hŒ¥At the level of talking to the hardware, submitting a batchbuffer for the GPU to execute is to add content to a buffer from which the HW command streamer is reading.”h]”hŒ¥At the level of talking to the hardware, submitting a batchbuffer for the GPU to execute is to add content to a buffer from which the HW command streamer is reading.”…”�”}”(hj:žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´KdhjȈh²hubj”;)�”}”(hhh]”(jµ:)�”}”(hŒ—Add a command to load the HW context. For Logical Ring Contexts, i.e. Execlists, this command is not placed on the same buffer as the remaining items. ”h]”hÚ)�”}”(hŒ–Add a command to load the HW context. For Logical Ring Contexts, i.e. Execlists, this command is not placed on the same buffer as the remaining items.”h]”hŒ–Add a command to load the HW context. For Logical Ring Contexts, i.e. Execlists, this command is not placed on the same buffer as the remaining items.”…”�”}”(hjPžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´KhhjLžubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjIžubjµ:)�”}”(hŒ2Add a command to invalidate caches to the buffer. ”h]”hÚ)�”}”(hŒ1Add a command to invalidate caches to the buffer.”h]”hŒ1Add a command to invalidate caches to the buffer.”…”�”}”(hjižh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´Klhježubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjIžubjµ:)�”}”(hŒ™Add a batchbuffer start command to the buffer; the start command is essentially a token together with the GPU address of the batchbuffer to be executed. ”h]”hÚ)�”}”(hŒ˜Add a batchbuffer start command to the buffer; the start command is essentially a token together with the GPU address of the batchbuffer to be executed.”h]”hŒ˜Add a batchbuffer start command to the buffer; the start command is essentially a token together with the GPU address of the batchbuffer to be executed.”…”�”}”(hj‚žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´Knhj~žubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjIžubjµ:)�”}”(hŒ$Add a pipeline flush to the buffer. ”h]”hÚ)�”}”(hŒ#Add a pipeline flush to the buffer.”h]”hŒ#Add a pipeline flush to the buffer.”…”�”}”(hj›žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´Krhj—žubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjIžubjµ:)�”}”(hX4Add a memory write command to the buffer to record when the GPU is done executing the batchbuffer. The memory write writes the global sequence number of the request, ``i915_request::global_seqno``; the i915 driver uses the current value in the register to determine if the GPU has completed the batchbuffer. ”h]”hÚ)�”}”(hX3Add a memory write command to the buffer to record when the GPU is done executing the batchbuffer. The memory write writes the global sequence number of the request, ``i915_request::global_seqno``; the i915 driver uses the current value in the register to determine if the GPU has completed the batchbuffer.”h]”(hŒ¦Add a memory write command to the buffer to record when the GPU is done executing the batchbuffer. The memory write writes the global sequence number of the request, ”…”�”}”(hj´žh²hh³Nh´Nubj*)�”}”(hŒ``i915_request::global_seqno``”h]”hŒi915_request::global_seqno”…”�”}”(hj¼žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj´žubhŒo; the i915 driver uses the current value in the register to determine if the GPU has completed the batchbuffer.”…”�”}”(hj´žh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´Kthj°žubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjIžubjµ:)�”}”(hŒ¢Add a user interrupt command to the buffer. This command instructs the GPU to issue an interrupt when the command, pipeline flush and memory write are completed. ”h]”hÚ)�”}”(hŒ¡Add a user interrupt command to the buffer. This command instructs the GPU to issue an interrupt when the command, pipeline flush and memory write are completed.”h]”hŒ¡Add a user interrupt command to the buffer. This command instructs the GPU to issue an interrupt when the command, pipeline flush and memory write are completed.”…”�”}”(hjßžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´KzhjÛžubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjIžubjµ:)�”}”(hŒcInform the hardware of the additional commands added to the buffer (by updating the tail pointer). ”h]”hÚ)�”}”(hŒbInform the hardware of the additional commands added to the buffer (by updating the tail pointer).”h]”hŒbInform the hardware of the additional commands added to the buffer (by updating the tail pointer).”…”�”}”(hjøžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´K~hjôžubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjIžubeh}”(h]”h ]”h"]”h$]”h&]”jÐ;jÑ;jÒ;hjÓ;jÔ;uh1j“;hjȈh²hh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´NubhÚ)�”}”(hŒGProcessing an execbuf ioctl is conceptually split up into a few phases.”h]”hŒGProcessing an execbuf ioctl is conceptually split up into a few phases.”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´K�hjȈh²hubj”;)�”}”(hhh]”(jµ:)�”}”(hŒBValidation - Ensure all the pointers, handles and flags are valid.”h]”hÚ)�”}”(hj(Ÿh]”hŒBValidation - Ensure all the pointers, handles and flags are valid.”…”�”}”(hj*Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´Kƒhj&Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj#Ÿubjµ:)�”}”(hŒ7Reservation - Assign GPU address space for every object”h]”hÚ)�”}”(hj@Ÿh]”hŒ7Reservation - Assign GPU address space for every object”…”�”}”(hjBŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´K„hj>Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj#Ÿubjµ:)�”}”(hŒARelocation - Update any addresses to point to the final locations”h]”hÚ)�”}”(hjXŸh]”hŒARelocation - Update any addresses to point to the final locations”…”�”}”(hjZŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´K…hjVŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj#Ÿubjµ:)�”}”(hŒBSerialisation - Order the request with respect to its dependencies”h]”hÚ)�”}”(hjpŸh]”hŒBSerialisation - Order the request with respect to its dependencies”…”�”}”(hjrŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´K†hjnŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj#Ÿubjµ:)�”}”(hŒ=Construction - Construct a request to execute the batchbuffer”h]”hÚ)�”}”(hjˆŸh]”hŒ=Construction - Construct a request to execute the batchbuffer”…”�”}”(hjŠŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´K‡hj†Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj#Ÿubjµ:)�”}”(hŒ3Submission (at some point in the future execution) ”h]”hÚ)�”}”(hŒ2Submission (at some point in the future execution)”h]”hŒ2Submission (at some point in the future execution)”…”�”}”(hj¢Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´KˆhjžŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj#Ÿubeh}”(h]”h ]”h"]”h$]”h&]”jÐ;jÑ;jÒ;hjÓ;jÔ;uh1j“;hjȈh²hh³jŸh´NubhÚ)�”}”(hX³Reserving resources for the execbuf is the most complicated phase. We neither want to have to migrate the object in the address space, nor do we want to have to update any relocations pointing to this object. Ideally, we want to leave the object where it is and for all the existing relocations to match. If the object is given a new address, or if userspace thinks the object is elsewhere, we have to parse all the relocation entries and update the addresses. Userspace can set the I915_EXEC_NO_RELOC flag to hint that all the target addresses in all of its objects match the value in the relocation entries and that they all match the presumed offsets given by the list of execbuffer objects. Using this knowledge, we know that if we haven't moved any buffers, all the relocation entries are valid and we can skip the update. (If userspace is wrong, the likely outcome is an impromptu GPU hang.) The requirement for using I915_EXEC_NO_RELOC are:”h]”hXµReserving resources for the execbuf is the most complicated phase. We neither want to have to migrate the object in the address space, nor do we want to have to update any relocations pointing to this object. Ideally, we want to leave the object where it is and for all the existing relocations to match. If the object is given a new address, or if userspace thinks the object is elsewhere, we have to parse all the relocation entries and update the addresses. Userspace can set the I915_EXEC_NO_RELOC flag to hint that all the target addresses in all of its objects match the value in the relocation entries and that they all match the presumed offsets given by the list of execbuffer objects. Using this knowledge, we know that if we haven’t moved any buffers, all the relocation entries are valid and we can skip the update. (If userspace is wrong, the likely outcome is an impromptu GPU hang.) The requirement for using I915_EXEC_NO_RELOC are:”…”�”•#}”(hj½Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´KŠhjȈh²hubjgd)�”}”(hX[The addresses written in the objects must match the corresponding reloc.presumed_offset which in turn must match the corresponding execobject.offset. Any render targets written to in the batch must be flagged with EXEC_OBJECT_WRITE. To avoid stalling, execobject.offset should match the current address of that object within the active context. ”h]”(hÚ)�”}”(hŒ•The addresses written in the objects must match the corresponding reloc.presumed_offset which in turn must match the corresponding execobject.offset.”h]”hŒ•The addresses written in the objects must match the corresponding reloc.presumed_offset which in turn must match the corresponding execobject.offset.”…”�”}”(hjПh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´K˜hjÌŸubhÚ)�”}”(hŒRAny render targets written to in the batch must be flagged with EXEC_OBJECT_WRITE.”h]”hŒRAny render targets written to in the batch must be flagged with EXEC_OBJECT_WRITE.”…”�”}”(hjߟh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´KœhjÌŸubhÚ)�”}”(hŒoTo avoid stalling, execobject.offset should match the current address of that object within the active context.”h]”hŒoTo avoid stalling, execobject.offset should match the current address of that object within the active context.”…”�”}”(hjîŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´KŸhjÌŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³jÞŸh´K˜hjȈh²hubhÚ)�”}”(hXTThe reservation is done is multiple phases. First we try and keep any object already bound in its current location - so as long as meets the constraints imposed by the new execbuffer. Any object left unbound after the first pass is then fitted into any available idle space. If an object does not fit, all objects are removed from the reservation and the process rerun after sorting the objects into a priority order (more difficult to fit objects are tried first). Failing that, the entire VM is cleared and we try to fit the execbuf once last time before concluding that it simply will not fit.”h]”hXTThe reservation is done is multiple phases. First we try and keep any object already bound in its current location - so as long as meets the constraints imposed by the new execbuffer. Any object left unbound after the first pass is then fitted into any available idle space. If an object does not fit, all objects are removed from the reservation and the process rerun after sorting the objects into a priority order (more difficult to fit objects are tried first). Failing that, the entire VM is cleared and we try to fit the execbuf once last time before concluding that it simply will not fit.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´K¢hjȈh²hubhÚ)�”}”(hXBA small complication to all of this is that we allow userspace not only to specify an alignment and a size for the object in the address space, but we also allow userspace to specify the exact offset. This objects are simpler to place (the location is known a priori) all we have to do is make sure the space is available.”h]”hXBA small complication to all of this is that we allow userspace not only to specify an alignment and a size for the object in the address space, but we also allow userspace to specify the exact offset. This objects are simpler to place (the location is known a priori) all we have to do is make sure the space is available.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´K¬hjȈh²hubhÚ)�”}”(hX.Once all the objects are in place, patching up the buried pointers to point to the final locations is a fairly simple job of walking over the relocation entry arrays, looking up the right address and rewriting the value into the object. Simple! ... The relocation entries are stored in user memory and so to access them we have to copy them into a local buffer. That copy has to avoid taking any pagefaults as they may lead back to a GEM object requiring the vm->mutex (i.e. recursive deadlock). So once again we split the relocation into multiple passes. First we try to do everything within an atomic context (avoid the pagefaults) which requires that we never wait. If we detect that we may wait, or if we need to fault, then we have to fallback to a slower path. The slowpath has to drop the mutex. (Can you hear alarm bells yet?) Dropping the mutex means that we lose all the state we have built up so far for the execbuf and we must reset any global data. However, we do leave the objects pinned in their final locations - which is a potential issue for concurrent execbufs. Once we have left the mutex, we can allocate and copy all the relocation entries into a large array at our leisure, reacquire the mutex, reclaim all the objects and other state and then proceed to update any incorrect addresses with the objects.”h]”hX.Once all the objects are in place, patching up the buried pointers to point to the final locations is a fairly simple job of walking over the relocation entry arrays, looking up the right address and rewriting the value into the object. Simple! ... The relocation entries are stored in user memory and so to access them we have to copy them into a local buffer. That copy has to avoid taking any pagefaults as they may lead back to a GEM object requiring the vm->mutex (i.e. recursive deadlock). So once again we split the relocation into multiple passes. First we try to do everything within an atomic context (avoid the pagefaults) which requires that we never wait. If we detect that we may wait, or if we need to fault, then we have to fallback to a slower path. The slowpath has to drop the mutex. (Can you hear alarm bells yet?) Dropping the mutex means that we lose all the state we have built up so far for the execbuf and we must reset any global data. However, we do leave the objects pinned in their final locations - which is a potential issue for concurrent execbufs. Once we have left the mutex, we can allocate and copy all the relocation entries into a large array at our leisure, reacquire the mutex, reclaim all the objects and other state and then proceed to update any incorrect addresses with the objects.”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´K²hjȈh²hubhÚ)�”}”(hX™As we process the relocation entries, we maintain a record of whether the object is being written to. Using NORELOC, we expect userspace to provide this information instead. We also check whether we can skip the relocation by comparing the expected value inside the relocation entry with the target's final address. If they differ, we have to map the current object and rewrite the 4 or 8 byte pointer within.”h]”hX›As we process the relocation entries, we maintain a record of whether the object is being written to. Using NORELOC, we expect userspace to provide this information instead. We also check whether we can skip the relocation by comparing the expected value inside the relocation entry with the target’s final address. If they differ, we have to map the current object and rewrite the 4 or 8 byte pointer within.”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´KÅhjȈh²hubhÚ)�”}”(hXSerialising an execbuf is quite simple according to the rules of the GEM ABI. Execution within each context is ordered by the order of submission. Writes to any GEM object are in order of submission and are exclusive. Reads from a GEM object are unordered with respect to other reads, but ordered by writes. A write submitted after a read cannot occur before the read, and similarly any read submitted after a write cannot occur before the write. Writes are ordered between engines such that only one write occurs at any time (completing any reads beforehand) - using semaphores where available and CPU serialisation otherwise. Other GEM access obey the same rules, any write (either via mmaps using set-domain, or via pwrite) must flush all GPU reads before starting, and any read (either using set-domain or pread) must flush all GPU writes before starting. (Note we only employ a barrier before, we currently rely on userspace not concurrently starting a new execution whilst reading or writing to an object. This may be an advantage or not depending on how much you trust userspace not to shoot themselves in the foot.) Serialisation may just result in the request being inserted into a DAG awaiting its turn, but most simple is to wait on the CPU until all dependencies are resolved.”h]”hXSerialising an execbuf is quite simple according to the rules of the GEM ABI. Execution within each context is ordered by the order of submission. Writes to any GEM object are in order of submission and are exclusive. Reads from a GEM object are unordered with respect to other reads, but ordered by writes. A write submitted after a read cannot occur before the read, and similarly any read submitted after a write cannot occur before the write. Writes are ordered between engines such that only one write occurs at any time (completing any reads beforehand) - using semaphores where available and CPU serialisation otherwise. Other GEM access obey the same rules, any write (either via mmaps using set-domain, or via pwrite) must flush all GPU reads before starting, and any read (either using set-domain or pread) must flush all GPU writes before starting. (Note we only employ a barrier before, we currently rely on userspace not concurrently starting a new execution whilst reading or writing to an object. This may be an advantage or not depending on how much you trust userspace not to shoot themselves in the foot.) Serialisation may just result in the request being inserted into a DAG awaiting its turn, but most simple is to wait on the CPU until all dependencies are resolved.”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´KÌhjȈh²hubhÚ)�”}”(hX&After all of that, is just a matter of closing the request and handing it to the hardware (well, leaving it in a queue to be executed). However, we also offer the ability for batchbuffers to be run with elevated privileges so that they access otherwise hidden registers. (Used to adjust L3 cache etc.) Before any batch is given extra privileges we first must check that it contains no nefarious instructions, we check that each instruction is from our whitelist and all registers are also from an allowed list. We first copy the user's batchbuffer to a shadow (so that the user doesn't have access to it, either by the CPU or GPU as we scan it) and then parse each instruction. If everything is ok, we set a flag telling the hardware to run the batchbuffer in trusted mode, otherwise the ioctl is rejected.”h]”hX*After all of that, is just a matter of closing the request and handing it to the hardware (well, leaving it in a queue to be executed). However, we also offer the ability for batchbuffers to be run with elevated privileges so that they access otherwise hidden registers. (Used to adjust L3 cache etc.) Before any batch is given extra privileges we first must check that it contains no nefarious instructions, we check that each instruction is from our whitelist and all registers are also from an allowed list. We first copy the user’s batchbuffer to a shadow (so that the user doesn’t have access to it, either by the CPU or GPU as we scan it) and then parse each instruction. If everything is ok, we set a flag telling the hardware to run the batchbuffer in trusted mode, otherwise the ioctl is rejected.”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œh/var/lib/git/docbuild/linux/Documentation/gpu/i915:244: ./drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c”h´KßhjȈh²hubeh}”(h]”Œuser-batchbuffer-execution”ah ]”h"]”Œuser batchbuffer execution”ah$]”h&]”uh1hÄhj.bh²hh³hÃh´KðubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ Scheduling”h]”hŒ Scheduling”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhje h²hh³hÃh´Køubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_sched_engine (C struct)”Œc.i915_sched_engine”hNt”auh1j¶hje h²hh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒi915_sched_engine”h]”jÓ)�”}”(hŒstruct i915_sched_engine”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjŒ h²hh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´Kubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŒ h²hh³j� h´Kubj)�”}”(hŒi915_sched_engine”h]”jÜ)�”}”(hjŠ h]”hŒi915_sched_engine”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¬ ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjŒ h²hh³j� h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjˆ h²hh³j� h´Kubah}”(h]”j‚ ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j� h´Khj… h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒscheduler engine”h]”hŒscheduler engine”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K_hjÏ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj… h²hh³j� h´Kubeh}”(h]”h ]”(jóŒstruct”eh"]”h$]”h&]”jòjójójê jôjê jõ‰jö‰j÷‰uh1jÇh²hhje h³j„ h´Nubjù)�”}”(hXX **Definition**:: struct i915_sched_engine { struct kref ref; spinlock_t lock; struct list_head requests; struct list_head hold; struct tasklet_struct tasklet; struct i915_priolist default_priolist; int queue_priority_hint; struct rb_root_cached queue; bool no_priolist; void *private_data; void (*destroy)(struct kref *kref); bool (*disabled)(struct i915_sched_engine *sched_engine); void (*kick_backend)(const struct i915_request *rq, int prio); void (*bump_inflight_request_prio)(struct i915_request *rq, int prio); void (*retire_inflight_request_prio)(struct i915_request *rq); void (*schedule)(struct i915_request *request, const struct i915_sched_attr *attr); }; **Members** ``ref`` reference count of schedule engine object ``lock`` protects requests in priority lists, requests, hold and tasklet while running ``requests`` list of requests inflight on this schedule engine ``hold`` list of ready requests, but on hold ``tasklet`` softirq tasklet for submission ``default_priolist`` priority list for I915_PRIORITY_NORMAL ``queue_priority_hint`` Highest pending priority. When we add requests into the queue, or adjust the priority of executing requests, we compute the maximum priority of those pending requests. We can then use this value to determine if we need to preempt the executing requests to service the queue. However, since the we may have recorded the priority of an inflight request we wanted to preempt but since completed, at the time of dequeuing the priority hint may no longer may match the highest available request priority. ``queue`` queue of requests, in priority lists ``no_priolist`` priority lists disabled ``private_data`` private data of the submission backend ``destroy`` destroy schedule engine / cleanup in backend ``disabled`` check if backend has disabled submission ``kick_backend`` kick backend after a request's priority has changed ``bump_inflight_request_prio`` update priority of an inflight request ``retire_inflight_request_prio`` indicate request is retired to priority tracking ``schedule`` adjust priority of request Call when the priority on a request has changed and it and its dependencies may need rescheduling. Note the request itself may not be ready to run!”h]”(hÚ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjò ubhŒ:”…”�”}”(hjò h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´Kchjî ubjA#)�”}”(hXÊstruct i915_sched_engine { struct kref ref; spinlock_t lock; struct list_head requests; struct list_head hold; struct tasklet_struct tasklet; struct i915_priolist default_priolist; int queue_priority_hint; struct rb_root_cached queue; bool no_priolist; void *private_data; void (*destroy)(struct kref *kref); bool (*disabled)(struct i915_sched_engine *sched_engine); void (*kick_backend)(const struct i915_request *rq, int prio); void (*bump_inflight_request_prio)(struct i915_request *rq, int prio); void (*retire_inflight_request_prio)(struct i915_request *rq); void (*schedule)(struct i915_request *request, const struct i915_sched_attr *attr); };”h]”hXÊstruct i915_sched_engine { struct kref ref; spinlock_t lock; struct list_head requests; struct list_head hold; struct tasklet_struct tasklet; struct i915_priolist default_priolist; int queue_priority_hint; struct rb_root_cached queue; bool no_priolist; void *private_data; void (*destroy)(struct kref *kref); bool (*disabled)(struct i915_sched_engine *sched_engine); void (*kick_backend)(const struct i915_request *rq, int prio); void (*bump_inflight_request_prio)(struct i915_request *rq, int prio); void (*retire_inflight_request_prio)(struct i915_request *rq); void (*schedule)(struct i915_request *request, const struct i915_sched_attr *attr); };”…”�”}”hj¡sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´Kehjî ubhÚ)�”}”(hŒ **Members**”h]”j)�”}”(hj ¡h]”hŒMembers”…”�”}”(hj"¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´Kxhjî ubj)�”}”(hhh]”(j)�”}”(hŒ2``ref`` reference count of schedule engine object ”h]”(j$)�”}”(hŒ``ref``”h]”j*)�”}”(hj?¡h]”hŒref”…”�”}”(hjA¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj=¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´Klhj9¡ubj@)�”}”(hhh]”hÚ)�”}”(hŒ)reference count of schedule engine object”h]”hŒ)reference count of schedule engine object”…”�”}”(hjX¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jT¡h´KlhjU¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj9¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jT¡h´Klhj6¡ubj)�”}”(hŒW``lock`` protects requests in priority lists, requests, hold and tasklet while running ”h]”(j$)�”}”(hŒ``lock``”h]”j*)�”}”(hjx¡h]”hŒlock”…”�”}”(hjz¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjv¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´Krhjr¡ubj@)�”}”(hhh]”hÚ)�”}”(hŒMprotects requests in priority lists, requests, hold and tasklet while running”h]”hŒMprotects requests in priority lists, requests, hold and tasklet while running”…”�”}”(hj‘¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´KqhjŽ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjr¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�¡h´Krhj6¡ubj)�”}”(hŒ?``requests`` list of requests inflight on this schedule engine ”h]”(j$)�”}”(hŒ ``requests``”h]”j*)�”}”(hj²¡h]”hŒrequests”…”�”}”(hj´¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj°¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´Kwhj¬¡ubj@)�”}”(hhh]”hÚ)�”}”(hŒ1list of requests inflight on this schedule engine”h]”hŒ1list of requests inflight on this schedule engine”…”�”}”(hjË¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÇ¡h´KwhjÈ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¬¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÇ¡h´Kwhj6¡ubj)�”}”(hŒ-``hold`` list of ready requests, but on hold ”h]”(j$)�”}”(hŒ``hold``”h]”j*)�”}”(hjë¡h]”hŒhold”…”�”}”(hjí¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjé¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K|hjå¡ubj@)�”}”(hhh]”hÚ)�”}”(hŒ#list of ready requests, but on hold”h]”hŒ#list of ready requests, but on hold”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¢h´K|hj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjå¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¢h´K|hj6¡ubj)�”}”(hŒ+``tasklet`` softirq tasklet for submission ”h]”(j$)�”}”(hŒ ``tasklet``”h]”j*)�”}”(hj$¢h]”hŒtasklet”…”�”}”(hj&¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj"¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K�hj¢ubj@)�”}”(hhh]”hÚ)�”}”(hŒsoftirq tasklet for submission”h]”hŒsoftirq tasklet for submission”…”�”}”(hj=¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j9¢h´K�hj:¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j9¢h´K�hj6¡ubj)�”}”(hŒ<``default_priolist`` priority list for I915_PRIORITY_NORMAL ”h]”(j$)�”}”(hŒ``default_priolist``”h]”j*)�”}”(hj]¢h]”hŒdefault_priolist”…”�”}”(hj_¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj[¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K†hjW¢ubj@)�”}”(hhh]”hÚ)�”}”(hŒ&priority list for I915_PRIORITY_NORMAL”h]”hŒ&priority list for I915_PRIORITY_NORMAL”…”�”}”(hjv¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jr¢h´K†hjs¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjW¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jr¢h´K†hj6¡ubj)�”}”(hX ``queue_priority_hint`` Highest pending priority. When we add requests into the queue, or adjust the priority of executing requests, we compute the maximum priority of those pending requests. We can then use this value to determine if we need to preempt the executing requests to service the queue. However, since the we may have recorded the priority of an inflight request we wanted to preempt but since completed, at the time of dequeuing the priority hint may no longer may match the highest available request priority. ”h]”(j$)�”}”(hŒ``queue_priority_hint``”h]”j*)�”}”(hj–¢h]”hŒqueue_priority_hint”…”�”}”(hj˜¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj”¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K”hj�¢ubj@)�”}”(hhh]”(hÚ)�”}”(hŒHighest pending priority.”h]”hŒHighest pending priority.”…”�”}”(hj¯¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K‹hj¬¢ubhÚ)�”}”(hXÙWhen we add requests into the queue, or adjust the priority of executing requests, we compute the maximum priority of those pending requests. We can then use this value to determine if we need to preempt the executing requests to service the queue. However, since the we may have recorded the priority of an inflight request we wanted to preempt but since completed, at the time of dequeuing the priority hint may no longer may match the highest available request priority.”h]”hXÙWhen we add requests into the queue, or adjust the priority of executing requests, we compute the maximum priority of those pending requests. We can then use this value to determine if we need to preempt the executing requests to service the queue. However, since the we may have recorded the priority of an inflight request we wanted to preempt but since completed, at the time of dequeuing the priority hint may no longer may match the highest available request priority.”…”�”}”(hj¾¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K�hj¬¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j?hj�¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j«¢h´K”hj6¡ubj)�”}”(hŒ/``queue`` queue of requests, in priority lists ”h]”(j$)�”}”(hŒ ``queue``”h]”j*)�”}”(hjߢh]”hŒqueue”…”�”}”(hjá¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÝ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K™hjÙ¢ubj@)�”}”(hhh]”hÚ)�”}”(hŒ$queue of requests, in priority lists”h]”hŒ$queue of requests, in priority lists”…”�”}”(hjø¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jô¢h´K™hjõ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÙ¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jô¢h´K™hj6¡ubj)�”}”(hŒ(``no_priolist`` priority lists disabled ”h]”(j$)�”}”(hŒ``no_priolist``”h]”j*)�”}”(hj£h]”hŒ no_priolist”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´Kžhj£ubj@)�”}”(hhh]”hÚ)�”}”(hŒpriority lists disabled”h]”hŒpriority lists disabled”…”�”}”(hj1£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j-£h´Kžhj.£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j-£h´Kžhj6¡ubj)�”}”(hŒ8``private_data`` private data of the submission backend ”h]”(j$)�”}”(hŒ``private_data``”h]”j*)�”}”(hjQ£h]”hŒ private_data”…”�”}”(hjS£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjO£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K£hjK£ubj@)�”}”(hhh]”hÚ)�”}”(hŒ&private data of the submission backend”h]”hŒ&private data of the submission backend”…”�”}”(hjj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jf£h´K£hjg£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjK£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jf£h´K£hj6¡ubj)�”}”(hŒ9``destroy`` destroy schedule engine / cleanup in backend ”h]”(j$)�”}”(hŒ ``destroy``”h]”j*)�”}”(hjŠ£h]”hŒdestroy”…”�”}”(hjŒ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjˆ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K¨hj„£ubj@)�”}”(hhh]”hÚ)�”}”(hŒ,destroy schedule engine / cleanup in backend”h]”hŒ,destroy schedule engine / cleanup in backend”…”�”}”(hj££h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jŸ£h´K¨hj £ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj„£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸ£h´K¨hj6¡ubj)�”}”(hŒ6``disabled`` check if backend has disabled submission ”h]”(j$)�”}”(hŒ ``disabled``”h]”j*)�”}”(hjãh]”hŒdisabled”…”�”}”(hjÅ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÁ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K­hj½£ubj@)�”}”(hhh]”hÚ)�”}”(hŒ(check if backend has disabled submission”h]”hŒ(check if backend has disabled submission”…”�”}”(hjÜ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jØ£h´K­hjÙ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj½£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØ£h´K­hj6¡ubj)�”}”(hŒE``kick_backend`` kick backend after a request's priority has changed ”h]”(j$)�”}”(hŒ``kick_backend``”h]”j*)�”}”(hjü£h]”hŒ kick_backend”…”�”}”(hjþ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjú£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K²hjö£ubj@)�”}”(hhh]”hÚ)�”}”(hŒ3kick backend after a request's priority has changed”h]”hŒ5kick backend after a request’s priority has changed”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¤h´K²hj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjö£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤h´K²hj6¡ubj)�”}”(hŒF``bump_inflight_request_prio`` update priority of an inflight request ”h]”(j$)�”}”(hŒ``bump_inflight_request_prio``”h]”j*)�”}”(hj5¤h]”hŒbump_inflight_request_prio”…”�”}”(hj7¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj3¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K¸hj/¤ubj@)�”}”(hhh]”hÚ)�”}”(hŒ&update priority of an inflight request”h]”hŒ&update priority of an inflight request”…”�”}”(hjN¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jJ¤h´K¸hjK¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj/¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jJ¤h´K¸hj6¡ubj)�”}”(hŒR``retire_inflight_request_prio`` indicate request is retired to priority tracking ”h]”(j$)�”}”(hŒ ``retire_inflight_request_prio``”h]”j*)�”}”(hjn¤h]”hŒretire_inflight_request_prio”…”�”}”(hjp¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjl¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K¿hjh¤ubj@)�”}”(hhh]”hÚ)�”}”(hŒ0indicate request is retired to priority tracking”h]”hŒ0indicate request is retired to priority tracking”…”�”}”(hj‡¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K¾hj„¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjh¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒ¤h´K¿hj6¡ubj)�”}”(hŒ¼``schedule`` adjust priority of request Call when the priority on a request has changed and it and its dependencies may need rescheduling. Note the request itself may not be ready to run!”h]”(j$)�”}”(hŒ ``schedule``”h]”j*)�”}”(hj¨¤h]”hŒschedule”…”�”}”(hjª¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¦¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´KÇhj¢¤ubj@)�”}”(hhh]”(hÚ)�”}”(hŒadjust priority of request”h]”hŒadjust priority of request”…”�”}”(hjÁ¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´KÄhj¾¤ubhÚ)�”}”(hŒ“Call when the priority on a request has changed and it and its dependencies may need rescheduling. Note the request itself may not be ready to run!”h]”hŒ“Call when the priority on a request has changed and it and its dependencies may need rescheduling. Note the request itself may not be ready to run!”…”�”}”(hjФh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´KÆhj¾¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¢¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j½¤h´KÇhj6¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjî ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhje h²hh³j„ h´NubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjú¤h]”hŒ Description”…”�”}”(hjü¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjø¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´KËhje h²hubhÚ)�”}”(hŒ°A schedule engine represents a submission queue with different priority bands. It contains all the common state (relative to the backend) to queue, track, and submit a request.”h]”hŒ°A schedule engine represents a submission queue with different priority bands. It contains all the common state (relative to the backend) to queue, track, and submit a request.”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´K`hje h²hubhÚ)�”}”(hŒ¾This object at the moment is quite i915 specific but will transition into a container for the drm_gpu_scheduler plus a few other variables once the i915 is integrated with the DRM scheduler.”h]”hŒ¾This object at the moment is quite i915 specific but will transition into a container for the drm_gpu_scheduler plus a few other variables once the i915 is integrated with the DRM scheduler.”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œe/var/lib/git/docbuild/linux/Documentation/gpu/i915:249: ./drivers/gpu/drm/i915/i915_scheduler_types.h”h´Kdhje h²hubeh}”(h]”Œ scheduling”ah ]”h"]”Œ scheduling”ah$]”h&]”uh1hÄhj.bh²hh³hÃh´KøubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ2Logical Rings, Logical Ring Contexts and Execlists”h]”hŒ2Logical Rings, Logical Ring Contexts and Execlists”…”�”}”(hj9¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj6¥h²hh³hÃh´KýubhÚ)�”}”(hŒÃMotivation: GEN8 brings an expansion of the HW contexts: "Logical Ring Contexts". These expanded contexts enable a number of new abilities, especially "Execlists" (also implemented in this file).”h]”hŒËMotivation: GEN8 brings an expansion of the HW contexts: “Logical Ring Contextsâ€�. These expanded contexts enable a number of new abilities, especially “Execlistsâ€� (also implemented in this file).”…”�”}”(hjG¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œn/var/lib/git/docbuild/linux/Documentation/gpu/i915:255: ./drivers/gpu/drm/i915/gt/intel_execlists_submission.c”h´Khj6¥h²hubhÚ)�”}”(hŒµOne of the main differences with the legacy HW contexts is that logical ring contexts incorporate many more things to the context's state, like PDPs or ringbuffer control registers:”h]”hŒ·One of the main differences with the legacy HW contexts is that logical ring contexts incorporate many more things to the context’s state, like PDPs or ringbuffer control registers:”…”�”}”(hjV¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œn/var/lib/git/docbuild/linux/Documentation/gpu/i915:255: ./drivers/gpu/drm/i915/gt/intel_execlists_submission.c”h´K hj6¥h²hubhÚ)�”}”(hX The reason why PDPs are included in the context is straightforward: as PPGTTs (per-process GTTs) are actually per-context, having the PDPs contained there mean you don't need to do a ppgtt->switch_mm yourself, instead, the GPU will do it for you on the context switch.”h]”hXThe reason why PDPs are included in the context is straightforward: as PPGTTs (per-process GTTs) are actually per-context, having the PDPs contained there mean you don’t need to do a ppgtt->switch_mm yourself, instead, the GPU will do it for you on the context switch.”…”�”}”(hje¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œn/var/lib/git/docbuild/linux/Documentation/gpu/i915:255: ./drivers/gpu/drm/i915/gt/intel_execlists_submission.c”h´Khj6¥h²hubhÚ)�”}”(hXòBut, what about the ringbuffer control registers (head, tail, etc..)? shouldn't we just need a set of those per engine command streamer? This is where the name "Logical Rings" starts to make sense: by virtualizing the rings, the engine cs shifts to a new "ring buffer" with every context switch. When you want to submit a workload to the GPU you: A) choose your context, B) find its appropriate virtualized ring, C) write commands to it and then, finally, D) tell the GPU to switch to that context.”h]”hXüBut, what about the ringbuffer control registers (head, tail, etc..)? shouldn’t we just need a set of those per engine command streamer? This is where the name “Logical Ringsâ€� starts to make sense: by virtualizing the rings, the engine cs shifts to a new “ring bufferâ€� with every context switch. When you want to submit a workload to the GPU you: A) choose your context, B) find its appropriate virtualized ring, C) write commands to it and then, finally, D) tell the GPU to switch to that context.”…”�”}”(hjt¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œn/var/lib/git/docbuild/linux/Documentation/gpu/i915:255: ./drivers/gpu/drm/i915/gt/intel_execlists_submission.c”h´Khj6¥h²hubhÚ)�”}”(hŒ‰Instead of the legacy MI_SET_CONTEXT, the way you tell the GPU to switch to a contexts is via a context execution list, ergo "Execlists".”h]”hŒ�Instead of the legacy MI_SET_CONTEXT, the way you tell the GPU to switch to a contexts is via a context execution list, ergo “Execlistsâ€�.”…”�”}”(hjƒ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œn/var/lib/git/docbuild/linux/Documentation/gpu/i915:255: ./drivers/gpu/drm/i915/gt/intel_execlists_submission.c”h´Khj6¥h²hubhÚ)�”}”(hŒ@LRC implementation: Regarding the creation of contexts, we have:”h]”hŒ@LRC implementation: Regarding the creation of contexts, we have:”…”�”}”(hj’¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œn/var/lib/git/docbuild/linux/Documentation/gpu/i915:255: ./drivers/gpu/drm/i915/gt/intel_execlists_submission.c”h´K hj6¥h²hubj°:)�”}”(hhh]”(jµ:)�”}”(hŒOne global default context.”h]”hÚ)�”}”(hj¦¥h]”hŒOne global default context.”…”�”}”(hj¨¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œn/var/lib/git/docbuild/linux/Documentation/gpu/i915:255: ./drivers/gpu/drm/i915/gt/intel_execlists_submission.c”h´K#hj¤¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj¡¥ubjµ:)�”}”(hŒ-One local default context for each opened fd.”h]”hÚ)�”}”(hj¾¥h]”hŒ-One local default context for each opened fd.”…”�”}”(hjÀ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œn/var/lib/git/docbuild/linux/Documentation/gpu/i915:255: ./drivers/gpu/drm/i915/gt/intel_execlists_submission.c”h´K$hj¼¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj¡¥ubjµ:)�”}”(hŒhj6¥h²hubhÚ)�”}”(hXWhen a request is committed, its commands (the BB start and any leading or trailing commands, like the seqno breadcrumbs) are placed in the ringbuffer for the appropriate context. The tail pointer in the hardware context is not updated at this time, but instead, kept by the driver in the ringbuffer structure. A structure representing this request is added to a request queue for the appropriate engine: this structure contains a copy of the context's tail after the request was written to the ring buffer and a pointer to the context itself.”h]”hX!When a request is committed, its commands (the BB start and any leading or trailing commands, like the seqno breadcrumbs) are placed in the ringbuffer for the appropriate context. The tail pointer in the hardware context is not updated at this time, but instead, kept by the driver in the ringbuffer structure. A structure representing this request is added to a request queue for the appropriate engine: this structure contains a copy of the context’s tail after the request was written to the ring buffer and a pointer to the context itself.”…”�”}”(hjx¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œn/var/lib/git/docbuild/linux/Documentation/gpu/i915:255: ./drivers/gpu/drm/i915/gt/intel_execlists_submission.c”h´KChj6¥h²hubhÚ)�”}”(hXQIf the engine's request queue was empty before the request was added, the queue is processed immediately. Otherwise the queue will be processed during a context switch interrupt. In any case, elements on the queue will get sent (in pairs) to the GPU's ExecLists Submit Port (ELSP, for short) with a globally unique 20-bits submission ID.”h]”hXUIf the engine’s request queue was empty before the request was added, the queue is processed immediately. Otherwise the queue will be processed during a context switch interrupt. In any case, elements on the queue will get sent (in pairs) to the GPU’s ExecLists Submit Port (ELSP, for short) with a globally unique 20-bits submission ID.”…”�”}”(hj‡¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œn/var/lib/git/docbuild/linux/Documentation/gpu/i915:255: ./drivers/gpu/drm/i915/gt/intel_execlists_submission.c”h´KLhj6¥h²hubhÚ)�”}”(hX‚When execution of a request completes, the GPU updates the context status buffer with a context complete event and generates a context switch interrupt. During the interrupt handling, the driver examines the events in the buffer: for each context complete event, if the announced ID matches that on the head of the request queue, then that request is retired and removed from the queue.”h]”hX‚When execution of a request completes, the GPU updates the context status buffer with a context complete event and generates a context switch interrupt. During the interrupt handling, the driver examines the events in the buffer: for each context complete event, if the announced ID matches that on the head of the request queue, then that request is retired and removed from the queue.”…”�”}”(hj–¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œn/var/lib/git/docbuild/linux/Documentation/gpu/i915:255: ./drivers/gpu/drm/i915/gt/intel_execlists_submission.c”h´KRhj6¥h²hubhÚ)�”}”(hXAfter processing, if any requests were retired and the queue is not empty then a new execution list can be submitted. The two requests at the front of the queue are next to be submitted but since a context may not occur twice in an execution list, if subsequent requests have the same ID as the first then the two requests must be combined. This is done simply by discarding requests at the head of the queue until either only one requests is left (in which case we use a NULL second context) or the first two requests have unique IDs.”h]”hXAfter processing, if any requests were retired and the queue is not empty then a new execution list can be submitted. The two requests at the front of the queue are next to be submitted but since a context may not occur twice in an execution list, if subsequent requests have the same ID as the first then the two requests must be combined. This is done simply by discarding requests at the head of the queue until either only one requests is left (in which case we use a NULL second context) or the first two requests have unique IDs.”…”�”}”(hj¥¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œn/var/lib/git/docbuild/linux/Documentation/gpu/i915:255: ./drivers/gpu/drm/i915/gt/intel_execlists_submission.c”h´KXhj6¥h²hubhÚ)�”}”(hX¢By always executing the first two requests in the queue the driver ensures that the GPU is kept as busy as possible. In the case where a single context completes but a second context is still executing, the request for this second context will be at the head of the queue when we remove the first one. This request will then be resubmitted along with a new request for a different context, which will cause the hardware to continue executing the second request and queue the new request (the GPU detects the condition of a context getting preempted with the same context and optimizes the context switch flow by not doing preemption, but just sampling the new tail pointer).”h]”hX¢By always executing the first two requests in the queue the driver ensures that the GPU is kept as busy as possible. In the case where a single context completes but a second context is still executing, the request for this second context will be at the head of the queue when we remove the first one. This request will then be resubmitted along with a new request for a different context, which will cause the hardware to continue executing the second request and queue the new request (the GPU detects the condition of a context getting preempted with the same context and optimizes the context switch flow by not doing preemption, but just sampling the new tail pointer).”…”�”}”(hj´¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œn/var/lib/git/docbuild/linux/Documentation/gpu/i915:255: ./drivers/gpu/drm/i915/gt/intel_execlists_submission.c”h´K`hj6¥h²hubeh}”(h]”Œ1logical-rings-logical-ring-contexts-and-execlists”ah ]”h"]”Œ2logical rings, logical ring contexts and execlists”ah$]”h&]”uh1hÄhj.bh²hh³hÃh´KýubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒGlobal GTT views”h]”hŒGlobal GTT views”…”�”}”(hjΦh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj˦h²hh³hÃh´MubhÚ)�”}”(hŒBackground and previous state”h]”hŒBackground and previous state”…”�”}”(hjܦh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´K&hj˦h²hubhÚ)�”}”(hŒÓHistorically objects could exists (be bound) in global GTT space only as singular instances with a view representing all of the object's backing pages in a linear fashion. This view will be called a normal view.”h]”hŒÕHistorically objects could exists (be bound) in global GTT space only as singular instances with a view representing all of the object’s backing pages in a linear fashion. This view will be called a normal view.”…”�”}”(hjë¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´K(hj˦h²hubhÚ)�”}”(hŒÃTo support multiple views of the same object, where the number of mapped pages is not equal to the backing store, or where the layout of the pages is not linear, concept of a GGTT view was added.”h]”hŒÃTo support multiple views of the same object, where the number of mapped pages is not equal to the backing store, or where the layout of the pages is not linear, concept of a GGTT view was added.”…”�”}”(hjú¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´K,hj˦h²hubhÚ)�”}”(hŒ˜One example of an alternative view is a stereo display driven by a single image. In this case we would have a framebuffer looking like this (2x2 pages):”h]”hŒ˜One example of an alternative view is a stereo display driven by a single image. In this case we would have a framebuffer looking like this (2x2 pages):”…”�”}”(hj §h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´K0hj˦h²hubjgd)�”}”(hŒ12 34 ”h]”hÚ)�”}”(hŒ12 34”h]”hŒ12 34”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´K4hj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³j*§h´K4hj˦h²hubhÚ)�”}”(hŒ¿Above would represent a normal GGTT view as normally mapped for GPU or CPU rendering. In contrast, fed to the display engine would be an alternative view which could look something like this:”h]”hŒ¿Above would represent a normal GGTT view as normally mapped for GPU or CPU rendering. In contrast, fed to the display engine would be an alternative view which could look something like this:”…”�”}”(hj1§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´K7hj˦h²hubjgd)�”}”(hŒ 1212 3434 ”h]”hÚ)�”}”(hŒ 1212 3434”h]”hŒ 1212 3434”…”�”}”(hjD§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´K;hj@§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³jR§h´K;hj˦h²hubhÚ)�”}”(hŒlIn this example both the size and layout of pages in the alternative view is different from the normal view.”h]”hŒlIn this example both the size and layout of pages in the alternative view is different from the normal view.”…”�”}”(hjY§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´K>hj˦h²hubhÚ)�”}”(hŒImplementation and usage”h]”hŒImplementation and usage”…”�”}”(hjh§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´KAhj˦h²hubhÚ)�”}”(hŒqGGTT views are implemented using VMAs and are distinguished via enum i915_gtt_view_type and struct i915_gtt_view.”h]”hŒqGGTT views are implemented using VMAs and are distinguished via enum i915_gtt_view_type and struct i915_gtt_view.”…”�”}”(hjw§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´KChj˦h²hubhÚ)�”}”(hXA new flavour of core GEM functions which work with GGTT bound objects were added with the _ggtt_ infix, and sometimes with _view postfix to avoid renaming in large amounts of code. They take the struct i915_gtt_view parameter encapsulating all metadata required to implement a view.”h]”hXA new flavour of core GEM functions which work with GGTT bound objects were added with the _ggtt_ infix, and sometimes with _view postfix to avoid renaming in large amounts of code. They take the struct i915_gtt_view parameter encapsulating all metadata required to implement a view.”…”�”}”(hj†§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´KFhj˦h²hubhÚ)�”}”(hŒüAs a helper for callers which are only interested in the normal view, globally const i915_gtt_view_normal singleton instance exists. All old core GEM API functions, the ones not taking the view parameter, are operating on, or with the normal GGTT view.”h]”hŒüAs a helper for callers which are only interested in the normal view, globally const i915_gtt_view_normal singleton instance exists. All old core GEM API functions, the ones not taking the view parameter, are operating on, or with the normal GGTT view.”…”�”}”(hj•§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´KKhj˦h²hubhÚ)�”}”(hŒ4Code wanting to add or use a new GGTT view needs to:”h]”hŒ4Code wanting to add or use a new GGTT view needs to:”…”�”}”(hj¤§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´KPhj˦h²hubj”;)�”}”(hhh]”(jµ:)�”}”(hŒ$Add a new enum with a suitable name.”h]”hÚ)�”}”(hj¸§h]”hŒ$Add a new enum with a suitable name.”…”�”}”(hjº§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´KRhj¶§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj³§ubjµ:)�”}”(hŒ?Extend the metadata in the i915_gtt_view structure if required.”h]”hÚ)�”}”(hjЧh]”hŒ?Extend the metadata in the i915_gtt_view structure if required.”…”�”}”(hjÒ§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´KShjΧubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj³§ubjµ:)�”}”(hŒ%Add support to i915_get_vma_pages(). ”h]”hÚ)�”}”(hŒ$Add support to i915_get_vma_pages().”h]”hŒ$Add support to i915_get_vma_pages().”…”�”}”(hjê§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´KThjæ§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj³§ubeh}”(h]”h ]”h"]”h$]”h&]”jÐ;jÑ;jÒ;hjÓ;jÔ;uh1j“;hj˦h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´NubhÚ)�”}”(hŒ³New views are required to build a scatter-gather table from within the i915_get_vma_pages function. This table is stored in the vma.gtt_view and exists for the lifetime of an VMA.”h]”hŒ³New views are required to build a scatter-gather table from within the i915_get_vma_pages function. This table is stored in the vma.gtt_view and exists for the lifetime of an VMA.”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´KVhj˦h²hubhÚ)�”}”(hŒ®Core API is designed to have copy semantics which means that passed in struct i915_gtt_view does not need to be persistent (left around after calling the core API functions).”h]”hŒ®Core API is designed to have copy semantics which means that passed in struct i915_gtt_view does not need to be persistent (left around after calling the core API functions).”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:261: ./drivers/gpu/drm/i915/i915_vma_types.h”h´KZhj˦h²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ!i915_gem_gtt_reserve (C function)”Œc.i915_gem_gtt_reserve”hNt”auh1j¶hj˦h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ­int i915_gem_gtt_reserve (struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, struct drm_mm_node *node, u64 size, u64 offset, unsigned long color, unsigned int flags)”h]”jÓ)�”}”(hŒ¬int i915_gem_gtt_reserve(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, struct drm_mm_node *node, u64 size, u64 offset, unsigned long color, unsigned int flags)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj=¨h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj9¨h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KGubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj9¨h²hh³jK¨h´KGubj)�”}”(hŒi915_gem_gtt_reserve”h]”jÜ)�”}”(hŒi915_gem_gtt_reserve”h]”hŒi915_gem_gtt_reserve”…”�”}”(hj^¨h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjZ¨ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj9¨h²hh³jK¨h´KGubj8)�”}”(hŒ”(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, struct drm_mm_node *node, u64 size, u64 offset, unsigned long color, unsigned int flags)”h]”(j>)�”}”(hŒstruct i915_address_space *vm”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjz¨h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjv¨ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjv¨ubh)�”}”(hhh]”jÜ)�”}”(hŒi915_address_space”h]”hŒi915_address_space”…”�”}”(hj˜¨h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj•¨ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jš¨Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj`¨sbŒc.i915_gem_gtt_reserve”†”asbuh1hhjv¨ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjv¨ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjƨh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjv¨ubjÜ)�”}”(hŒvm”h]”hŒvm”…”�”}”(hjÓ¨h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjv¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjr¨ubj>)�”}”(hŒstruct i915_gem_ww_ctx *ww”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjì¨h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjè¨ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjè¨ubh)�”}”(hhh]”jÜ)�”}”(hŒi915_gem_ww_ctx”h]”hŒi915_gem_ww_ctx”…”�”}”(hj ©h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j ©Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j´¨Œc.i915_gem_gtt_reserve”†”asbuh1hhjè¨ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjè¨ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj6©h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjè¨ubjÜ)�”}”(hŒww”h]”hŒww”…”�”}”(hjC©h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjè¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjr¨ubj>)�”}”(hŒstruct drm_mm_node *node”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj\©h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjX©ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hji©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjX©ubh)�”}”(hhh]”jÜ)�”}”(hŒ drm_mm_node”h]”hŒ drm_mm_node”…”�”}”(hjz©h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjw©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j|©Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j´¨Œc.i915_gem_gtt_reserve”†”asbuh1hhjX©ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjX©ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¦©h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjX©ubjÜ)�”}”(hŒnode”h]”hŒnode”…”�”}”(hj³©h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjX©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjr¨ubj>)�”}”(hŒu64 size”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjÏ©h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÌ©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÑ©Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j´¨Œc.i915_gem_gtt_reserve”†”asbuh1hhjÈ©ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÈ©ubjÜ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjû©h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÈ©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjr¨ubj>)�”}”(hŒ u64 offset”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jªŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j´¨Œc.i915_gem_gtt_reserve”†”asbuh1hhjªubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5ªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjªubjÜ)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjCªh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjr¨ubj>)�”}”(hŒunsigned long color”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj\ªh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjXªubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjXªubjn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjxªh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjXªubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†ªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjXªubjÜ)�”}”(hŒcolor”h]”hŒcolor”…”�”}”(hj”ªh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjXªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjr¨ubj>)�”}”(hŒunsigned int flags”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj­ªh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj©ªubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»ªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj©ªubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hjɪh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj©ªubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjתh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj©ªubjÜ)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjåªh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj©ªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjr¨ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj9¨h²hh³jK¨h´KGubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj5¨h²hh³jK¨h´KGubah}”(h]”j0¨ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jK¨h´KGhj2¨h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ(reserve a node in an address_space (GTT)”h]”hŒ(reserve a node in an address_space (GTT)”…”�”•}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KGhj «h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj2¨h²hh³jK¨h´KGubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój'«jôj'«jõ‰jö‰j÷‰uh1jÇh²hhj˦h³Nh´Nubjù)�”}”(hX°**Parameters** ``struct i915_address_space *vm`` the :c:type:`struct i915_address_space ` ``struct i915_gem_ww_ctx *ww`` An optional struct i915_gem_ww_ctx. ``struct drm_mm_node *node`` the :c:type:`struct drm_mm_node ` (typically i915_vma.node) ``u64 size`` how much space to allocate inside the GTT, must be #I915_GTT_PAGE_SIZE aligned ``u64 offset`` where to insert inside the GTT, must be #I915_GTT_MIN_ALIGNMENT aligned, and the node (**offset** + **size**) must fit within the address space ``unsigned long color`` color to apply to node, if this node is not from a VMA, color must be #I915_COLOR_UNEVICTABLE ``unsigned int flags`` control search and eviction behaviour **Description** i915_gem_gtt_reserve() tries to insert the **node** at the exact **offset** inside the address space (using **size** and **color**). If the **node** does not fit, it tries to evict any overlapping nodes from the GTT, including any neighbouring nodes if the colors do not match (to ensure guard pages between differing domains). See i915_gem_evict_for_node() for the gory details on the eviction algorithm. #PIN_NONBLOCK may used to prevent waiting on evicting active overlapping objects, and any overlapping node that is pinned or marked as unevictable will also result in failure. **Return** 0 on success, -ENOSPC if no suitable hole is found, -EINTR if asked to wait for eviction and interrupted.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj1«h]”hŒ Parameters”…”�”}”(hj3«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KKhj+«ubj)�”}”(hhh]”(j)�”}”(hŒ_``struct i915_address_space *vm`` the :c:type:`struct i915_address_space ` ”h]”(j$)�”}”(hŒ!``struct i915_address_space *vm``”h]”j*)�”}”(hjP«h]”hŒstruct i915_address_space *vm”…”�”}”(hjR«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjN«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KHhjJ«ubj@)�”}”(hhh]”hÚ)�”}”(hŒ`”h]”(hŒthe ”…”�”}”(hji«h²hh³Nh´Nubh)�”}”(hŒ8:c:type:`struct i915_address_space `”h]”j*)�”}”(hjs«h]”hŒstruct i915_address_space”…”�”}”(hju«h²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjq«ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒi915_address_space”uh1hh³je«h´KHhji«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³je«h´KHhjf«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjJ«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³je«h´KHhjG«ubj)�”}”(hŒC``struct i915_gem_ww_ctx *ww`` An optional struct i915_gem_ww_ctx. ”h]”(j$)�”}”(hŒ``struct i915_gem_ww_ctx *ww``”h]”j*)�”}”(hj¨«h]”hŒstruct i915_gem_ww_ctx *ww”…”�”}”(hjª«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¦«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KIhj¢«ubj@)�”}”(hhh]”hÚ)�”}”(hŒ#An optional struct i915_gem_ww_ctx.”h]”hŒ#An optional struct i915_gem_ww_ctx.”…”�”}”(hjÁ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j½«h´KIhj¾«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¢«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j½«h´KIhjG«ubj)�”}”(hŒf``struct drm_mm_node *node`` the :c:type:`struct drm_mm_node ` (typically i915_vma.node) ”h]”(j$)�”}”(hŒ``struct drm_mm_node *node``”h]”j*)�”}”(hjá«h]”hŒstruct drm_mm_node *node”…”�”}”(hjã«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjß«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KJhjÛ«ubj@)�”}”(hhh]”hÚ)�”}”(hŒHthe :c:type:`struct drm_mm_node ` (typically i915_vma.node)”h]”(hŒthe ”…”�”}”(hjú«h²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct drm_mm_node `”h]”j*)�”}”(hj¬h]”hŒstruct drm_mm_node”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hj¬ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒ drm_mm_node”uh1hh³jö«h´KJhjú«ubhŒ (typically i915_vma.node)”…”�”}”(hjú«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jö«h´KJhj÷«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÛ«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jö«h´KJhjG«ubj)�”}”(hŒ\``u64 size`` how much space to allocate inside the GTT, must be #I915_GTT_PAGE_SIZE aligned ”h]”(j$)�”}”(hŒ ``u64 size``”h]”j*)�”}”(hj=¬h]”hŒu64 size”…”�”}”(hj?¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj;¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KLhj7¬ubj@)�”}”(hhh]”hÚ)�”}”(hŒNhow much space to allocate inside the GTT, must be #I915_GTT_PAGE_SIZE aligned”h]”hŒNhow much space to allocate inside the GTT, must be #I915_GTT_PAGE_SIZE aligned”…”�”}”(hjV¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KKhjS¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj7¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jR¬h´KLhjG«ubj)�”}”(hŒŸ``u64 offset`` where to insert inside the GTT, must be #I915_GTT_MIN_ALIGNMENT aligned, and the node (**offset** + **size**) must fit within the address space ”h]”(j$)�”}”(hŒ``u64 offset``”h]”j*)�”}”(hjw¬h]”hŒ u64 offset”…”�”}”(hjy¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hju¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KOhjq¬ubj@)�”}”(hhh]”hÚ)�”}”(hŒ�where to insert inside the GTT, must be #I915_GTT_MIN_ALIGNMENT aligned, and the node (**offset** + **size**) must fit within the address space”h]”(hŒWwhere to insert inside the GTT, must be #I915_GTT_MIN_ALIGNMENT aligned, and the node (”…”�”}”(hj�¬h²hh³Nh´Nubj)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hj˜¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�¬ubhŒ + ”…”�”}”(hj�¬h²hh³Nh´Nubj)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjª¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�¬ubhŒ#) must fit within the address space”…”�”}”(hj�¬h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KMhj�¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjq¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŒ¬h´KOhjG«ubj)�”}”(hŒv``unsigned long color`` color to apply to node, if this node is not from a VMA, color must be #I915_COLOR_UNEVICTABLE ”h]”(j$)�”}”(hŒ``unsigned long color``”h]”j*)�”}”(hjÕ¬h]”hŒunsigned long color”…”�”}”(hj׬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÓ¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KQhjϬubj@)�”}”(hhh]”hÚ)�”}”(hŒ]color to apply to node, if this node is not from a VMA, color must be #I915_COLOR_UNEVICTABLE”h]”hŒ]color to apply to node, if this node is not from a VMA, color must be #I915_COLOR_UNEVICTABLE”…”�”}”(hjî¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KPhjë¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjϬubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jê¬h´KQhjG«ubj)�”}”(hŒ=``unsigned int flags`` control search and eviction behaviour ”h]”(j$)�”}”(hŒ``unsigned int flags``”h]”j*)�”}”(hj­h]”hŒunsigned int flags”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KRhj ­ubj@)�”}”(hhh]”hÚ)�”}”(hŒ%control search and eviction behaviour”h]”hŒ%control search and eviction behaviour”…”�”}”(hj(­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j$­h´KRhj%­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj ­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$­h´KRhjG«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj+«ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjJ­h]”hŒ Description”…”�”}”(hjL­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjH­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KThj+«ubhÚ)�”}”(hXEi915_gem_gtt_reserve() tries to insert the **node** at the exact **offset** inside the address space (using **size** and **color**). If the **node** does not fit, it tries to evict any overlapping nodes from the GTT, including any neighbouring nodes if the colors do not match (to ensure guard pages between differing domains). See i915_gem_evict_for_node() for the gory details on the eviction algorithm. #PIN_NONBLOCK may used to prevent waiting on evicting active overlapping objects, and any overlapping node that is pinned or marked as unevictable will also result in failure.”h]”(hŒ+i915_gem_gtt_reserve() tries to insert the ”…”�”}”(hj`­h²hh³Nh´Nubj)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjh­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`­ubhŒ at the exact ”…”�”}”(hj`­h²hh³Nh´Nubj)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hjz­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`­ubhŒ! inside the address space (using ”…”�”}”(hj`­h²hh³Nh´Nubj)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjŒ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`­ubhŒ and ”…”�”}”(hj`­h²hh³Nh´Nubj)�”}”(hŒ **color**”h]”hŒcolor”…”�”}”(hjž­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`­ubhŒ ). If the ”…”�”}”(hj`­h²hh³Nh´Nubj)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hj°­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`­ubhX± does not fit, it tries to evict any overlapping nodes from the GTT, including any neighbouring nodes if the colors do not match (to ensure guard pages between differing domains). See i915_gem_evict_for_node() for the gory details on the eviction algorithm. #PIN_NONBLOCK may used to prevent waiting on evicting active overlapping objects, and any overlapping node that is pinned or marked as unevictable will also result in failure.”…”�”}”(hj`­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KShj+«ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjË­h]”hŒReturn”…”�”}”(hjÍ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K\hj+«ubhÚ)�”}”(hŒi0 on success, -ENOSPC if no suitable hole is found, -EINTR if asked to wait for eviction and interrupted.”h]”hŒi0 on success, -ENOSPC if no suitable hole is found, -EINTR if asked to wait for eviction and interrupted.”…”�”}”(hjá­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K]hj+«ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj˦h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ i915_gem_gtt_insert (C function)”Œc.i915_gem_gtt_insert”hNt”auh1j¶hj˦h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒÃint i915_gem_gtt_insert (struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, struct drm_mm_node *node, u64 size, u64 alignment, unsigned long color, u64 start, u64 end, unsigned int flags)”h]”jÓ)�”}”(hŒÂint i915_gem_gtt_insert(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, struct drm_mm_node *node, u64 size, u64 alignment, unsigned long color, u64 start, u64 end, unsigned int flags)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj ®h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K›ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj ®h²hh³j®h´K›ubj)�”}”(hŒi915_gem_gtt_insert”h]”jÜ)�”}”(hŒi915_gem_gtt_insert”h]”hŒi915_gem_gtt_insert”…”�”}”(hj1®h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj-®ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj ®h²hh³j®h´K›ubj8)�”}”(hŒ«(struct i915_address_space *vm, struct i915_gem_ww_ctx *ww, struct drm_mm_node *node, u64 size, u64 alignment, unsigned long color, u64 start, u64 end, unsigned int flags)”h]”(j>)�”}”(hŒstruct i915_address_space *vm”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjM®h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjI®ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjI®ubh)�”}”(hhh]”jÜ)�”}”(hŒi915_address_space”h]”hŒi915_address_space”…”�”}”(hjk®h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjh®ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jm®Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj3®sbŒc.i915_gem_gtt_insert”†”asbuh1hhjI®ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjI®ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj™®h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjI®ubjÜ)�”}”(hŒvm”h]”hŒvm”…”�”}”(hj¦®h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjI®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjE®ubj>)�”}”(hŒstruct i915_gem_ww_ctx *ww”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj¿®h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj»®ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj»®ubh)�”}”(hhh]”jÜ)�”}”(hŒi915_gem_ww_ctx”h]”hŒi915_gem_ww_ctx”…”�”}”(hjÝ®h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÚ®ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jß®Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j‡®Œc.i915_gem_gtt_insert”†”asbuh1hhj»®ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj»®ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj ¯h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj»®ubjÜ)�”}”(hŒww”h]”hŒww”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj»®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjE®ubj>)�”}”(hŒstruct drm_mm_node *node”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj/¯h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj+¯ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj+¯ubh)�”}”(hhh]”jÜ)�”}”(hŒ drm_mm_node”h]”hŒ drm_mm_node”…”�”}”(hjM¯h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjJ¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jO¯Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j‡®Œc.i915_gem_gtt_insert”†”asbuh1hhj+¯ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj+¯ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjy¯h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj+¯ubjÜ)�”}”(hŒnode”h]”hŒnode”…”�”}”(hj†¯h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj+¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjE®ubj>)�”}”(hŒu64 size”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj¢¯h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŸ¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j¤¯Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j‡®Œc.i915_gem_gtt_insert”†”asbuh1hhj›¯ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj›¯ubjÜ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjίh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj›¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjE®ubj>)�”}”(hŒ u64 alignment”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjê¯h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjç¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j쯌modname”NŒ classname”Njùjü)�”}”jÿ]”j‡®Œc.i915_gem_gtt_insert”†”asbuh1hhjã¯ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjã¯ubjÜ)�”}”(hŒ alignment”h]”hŒ alignment”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjã¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjE®ubj>)�”}”(hŒunsigned long color”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj/°h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj+°ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj+°ubjn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjK°h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj+°ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj+°ubjÜ)�”}”(hŒcolor”h]”hŒcolor”…”�”}”(hjg°h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj+°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjE®ubj>)�”}”(hŒ u64 start”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjƒ°h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj€°ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j…°Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j‡®Œc.i915_gem_gtt_insert”†”asbuh1hhj|°ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj|°ubjÜ)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj¯°h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj|°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjE®ubj>)�”}”(hŒu64 end”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj˰h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjȰubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jͰŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j‡®Œc.i915_gem_gtt_insert”†”asbuh1hhjİubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjİubjÜ)�”}”(hŒend”h]”hŒend”…”�”}”(hj÷°h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjİubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjE®ubj>)�”}”(hŒunsigned int flags”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj ±ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj ±ubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hj,±h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj ±ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj ±ubjÜ)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjH±h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj ±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjE®ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj ®h²hh³j®h´K›ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj®h²hh³j®h´K›ubah}”(h]”j®ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j®h´K›hj®h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ)insert a node into an address_space (GTT)”h]”hŒ)insert a node into an address_space (GTT)”…”�”}”(hjr±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K›hjo±h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj®h²hh³j®h´K›ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójбjôjбjõ‰jö‰j÷‰uh1jÇh²hhj˦h³Nh´Nubjù)�”}”(hXØ**Parameters** ``struct i915_address_space *vm`` the :c:type:`struct i915_address_space ` ``struct i915_gem_ww_ctx *ww`` An optional struct i915_gem_ww_ctx. ``struct drm_mm_node *node`` the :c:type:`struct drm_mm_node ` (typically i915_vma.node) ``u64 size`` how much space to allocate inside the GTT, must be #I915_GTT_PAGE_SIZE aligned ``u64 alignment`` required alignment of starting offset, may be 0 but if specified, this must be a power-of-two and at least #I915_GTT_MIN_ALIGNMENT ``unsigned long color`` color to apply to node ``u64 start`` start of any range restriction inside GTT (0 for all), must be #I915_GTT_PAGE_SIZE aligned ``u64 end`` end of any range restriction inside GTT (U64_MAX for all), must be #I915_GTT_PAGE_SIZE aligned if not U64_MAX ``unsigned int flags`` control search and eviction behaviour **Description** i915_gem_gtt_insert() first searches for an available hole into which is can insert the node. The hole address is aligned to **alignment** and its **size** must then fit entirely within the [**start**, **end**] bounds. The nodes on either side of the hole must match **color**, or else a guard page will be inserted between the two nodes (or the node evicted). If no suitable hole is found, first a victim is randomly selected and tested for eviction, otherwise then the LRU list of objects within the GTT is scanned to find the first set of replacement nodes to create the hole. Those old overlapping nodes are evicted from the GTT (and so must be rebound before any future use). Any node that is currently pinned cannot be evicted (see i915_vma_pin()). Similar if the node's VMA is currently active and #PIN_NONBLOCK is specified, that node is also skipped when searching for an eviction candidate. See i915_gem_evict_something() for the gory details on the eviction algorithm. **Return** 0 on success, -ENOSPC if no suitable hole is found, -EINTR if asked to wait for eviction and interrupted.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj”±h]”hŒ Parameters”…”�”}”(hj–±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’±ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KŸhjޱubj)�”}”(hhh]”(j)�”}”(hŒ_``struct i915_address_space *vm`` the :c:type:`struct i915_address_space ` ”h]”(j$)�”}”(hŒ!``struct i915_address_space *vm``”h]”j*)�”}”(hj³±h]”hŒstruct i915_address_space *vm”…”�”}”(hjµ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj±±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´Kœhj­±ubj@)�”}”(hhh]”hÚ)�”}”(hŒ`”h]”(hŒthe ”…”�”}”(hj̱h²hh³Nh´Nubh)�”}”(hŒ8:c:type:`struct i915_address_space `”h]”j*)�”}”(hjÖ±h]”hŒstruct i915_address_space”…”�”}”(hjرh²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjÔ±ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒi915_address_space”uh1hh³jȱh´Kœhj̱ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jȱh´Kœhjɱubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj­±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jȱh´Kœhjª±ubj)�”}”(hŒC``struct i915_gem_ww_ctx *ww`` An optional struct i915_gem_ww_ctx. ”h]”(j$)�”}”(hŒ``struct i915_gem_ww_ctx *ww``”h]”j*)�”}”(hj ²h]”hŒstruct i915_gem_ww_ctx *ww”…”�”}”(hj ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj ²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K�hj²ubj@)�”}”(hhh]”hÚ)�”}”(hŒ#An optional struct i915_gem_ww_ctx.”h]”hŒ#An optional struct i915_gem_ww_ctx.”…”�”}”(hj$²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j ²h´K�hj!²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ²h´K�hjª±ubj)�”}”(hŒf``struct drm_mm_node *node`` the :c:type:`struct drm_mm_node ` (typically i915_vma.node) ”h]”(j$)�”}”(hŒ``struct drm_mm_node *node``”h]”j*)�”}”(hjD²h]”hŒstruct drm_mm_node *node”…”�”}”(hjF²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjB²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´Kžhj>²ubj@)�”}”(hhh]”hÚ)�”}”(hŒHthe :c:type:`struct drm_mm_node ` (typically i915_vma.node)”h]”(hŒthe ”…”�”}”(hj]²h²hh³Nh´Nubh)�”}”(hŒ*:c:type:`struct drm_mm_node `”h]”j*)�”}”(hjg²h]”hŒstruct drm_mm_node”…”�”}”(hji²h²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hje²ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒ drm_mm_node”uh1hh³jY²h´Kžhj]²ubhŒ (typically i915_vma.node)”…”�”}”(hj]²h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jY²h´KžhjZ²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj>²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jY²h´Kžhjª±ubj)�”}”(hŒ\``u64 size`` how much space to allocate inside the GTT, must be #I915_GTT_PAGE_SIZE aligned ”h]”(j$)�”}”(hŒ ``u64 size``”h]”j*)�”}”(hj ²h]”hŒu64 size”…”�”}”(hj¢²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjž²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K hjš²ubj@)�”}”(hhh]”hÚ)�”}”(hŒNhow much space to allocate inside the GTT, must be #I915_GTT_PAGE_SIZE aligned”h]”hŒNhow much space to allocate inside the GTT, must be #I915_GTT_PAGE_SIZE aligned”…”�”}”(hj¹²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KŸhj¶²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjš²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµ²h´K hjª±ubj)�”}”(hŒ•``u64 alignment`` required alignment of starting offset, may be 0 but if specified, this must be a power-of-two and at least #I915_GTT_MIN_ALIGNMENT ”h]”(j$)�”}”(hŒ``u64 alignment``”h]”j*)�”}”(hjÚ²h]”hŒ u64 alignment”…”�”}”(hjܲh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjزubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K£hjÔ²ubj@)�”}”(hhh]”hÚ)�”}”(hŒ‚required alignment of starting offset, may be 0 but if specified, this must be a power-of-two and at least #I915_GTT_MIN_ALIGNMENT”h]”hŒ‚required alignment of starting offset, may be 0 but if specified, this must be a power-of-two and at least #I915_GTT_MIN_ALIGNMENT”…”�”}”(hjó²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K¡hjð²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÔ²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jï²h´K£hjª±ubj)�”}”(hŒ/``unsigned long color`` color to apply to node ”h]”(j$)�”}”(hŒ``unsigned long color``”h]”j*)�”}”(hj³h]”hŒunsigned long color”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K¤hj³ubj@)�”}”(hhh]”hÚ)�”}”(hŒcolor to apply to node”h]”hŒcolor to apply to node”…”�”}”(hj-³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j)³h´K¤hj*³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)³h´K¤hjª±ubj)�”}”(hŒi``u64 start`` start of any range restriction inside GTT (0 for all), must be #I915_GTT_PAGE_SIZE aligned ”h]”(j$)�”}”(hŒ ``u64 start``”h]”j*)�”}”(hjM³h]”hŒ u64 start”…”�”}”(hjO³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjK³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K¦hjG³ubj@)�”}”(hhh]”hÚ)�”}”(hŒZstart of any range restriction inside GTT (0 for all), must be #I915_GTT_PAGE_SIZE aligned”h]”hŒZstart of any range restriction inside GTT (0 for all), must be #I915_GTT_PAGE_SIZE aligned”…”�”}”(hjf³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K¥hjc³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjG³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jb³h´K¦hjª±ubj)�”}”(hŒz``u64 end`` end of any range restriction inside GTT (U64_MAX for all), must be #I915_GTT_PAGE_SIZE aligned if not U64_MAX ”h]”(j$)�”}”(hŒ ``u64 end``”h]”j*)�”}”(hj‡³h]”hŒu64 end”…”�”}”(hj‰³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj…³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K¨hj�³ubj@)�”}”(hhh]”hÚ)�”}”(hŒmend of any range restriction inside GTT (U64_MAX for all), must be #I915_GTT_PAGE_SIZE aligned if not U64_MAX”h]”hŒmend of any range restriction inside GTT (U64_MAX for all), must be #I915_GTT_PAGE_SIZE aligned if not U64_MAX”…”�”}”(hj ³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K§hj�³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj�³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jœ³h´K¨hjª±ubj)�”}”(hŒ=``unsigned int flags`` control search and eviction behaviour ”h]”(j$)�”}”(hŒ``unsigned int flags``”h]”j*)�”}”(hjÁ³h]”hŒunsigned int flags”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¿³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K©hj»³ubj@)�”}”(hhh]”hÚ)�”}”(hŒ%control search and eviction behaviour”h]”hŒ%control search and eviction behaviour”…”�”}”(hjÚ³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÖ³h´K©hj׳ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj»³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÖ³h´K©hjª±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjޱubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjü³h]”hŒ Description”…”�”}”(hjþ³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjú³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K«hjޱubhÚ)�”}”(hXÓi915_gem_gtt_insert() first searches for an available hole into which is can insert the node. The hole address is aligned to **alignment** and its **size** must then fit entirely within the [**start**, **end**] bounds. The nodes on either side of the hole must match **color**, or else a guard page will be inserted between the two nodes (or the node evicted). If no suitable hole is found, first a victim is randomly selected and tested for eviction, otherwise then the LRU list of objects within the GTT is scanned to find the first set of replacement nodes to create the hole. Those old overlapping nodes are evicted from the GTT (and so must be rebound before any future use). Any node that is currently pinned cannot be evicted (see i915_vma_pin()). Similar if the node's VMA is currently active and #PIN_NONBLOCK is specified, that node is also skipped when searching for an eviction candidate. See i915_gem_evict_something() for the gory details on the eviction algorithm.”h]”(hŒ}i915_gem_gtt_insert() first searches for an available hole into which is can insert the node. The hole address is aligned to ”…”�”}”(hj´h²hh³Nh´Nubj)�”}”(hŒ **alignment**”h]”hŒ alignment”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´ubhŒ and its ”…”�”}”(hj´h²hh³Nh´Nubj)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj,´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´ubhŒ$ must then fit entirely within the [”…”�”}”(hj´h²hh³Nh´Nubj)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hj>´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´ubhŒ, ”…”�”}”(hj´h²hh³Nh´Nubj)�”}”(hŒ**end**”h]”hŒend”…”�”}”(hjP´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´ubhŒ:] bounds. The nodes on either side of the hole must match ”…”�”}”(hj´h²hh³Nh´Nubj)�”}”(hŒ **color**”h]”hŒcolor”…”�”}”(hjb´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´ubhXÁ, or else a guard page will be inserted between the two nodes (or the node evicted). If no suitable hole is found, first a victim is randomly selected and tested for eviction, otherwise then the LRU list of objects within the GTT is scanned to find the first set of replacement nodes to create the hole. Those old overlapping nodes are evicted from the GTT (and so must be rebound before any future use). Any node that is currently pinned cannot be evicted (see i915_vma_pin()). Similar if the node’s VMA is currently active and #PIN_NONBLOCK is specified, that node is also skipped when searching for an eviction candidate. See i915_gem_evict_something() for the gory details on the eviction algorithm.”…”�”}”(hj´h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´KªhjޱubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj}´h]”hŒReturn”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´K¹hjޱubhÚ)�”}”(hŒi0 on success, -ENOSPC if no suitable hole is found, -EINTR if asked to wait for eviction and interrupted.”h]”hŒi0 on success, -ENOSPC if no suitable hole is found, -EINTR if asked to wait for eviction and interrupted.”…”�”}”(hj“´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ]/var/lib/git/docbuild/linux/Documentation/gpu/i915:264: ./drivers/gpu/drm/i915/i915_gem_gtt.c”h´Kºhjޱubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj˦h²hh³Nh´Nubeh}”(h]”Œglobal-gtt-views”ah ]”h"]”Œglobal gtt views”ah$]”h&]”uh1hÄhj.bh²hh³hÃh´MubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒGTT Fences and Swizzling”h]”hŒGTT Fences and Swizzling”…”�”}”(hj´´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj±´h²hh³hÃh´M ubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ"i915_vma_revoke_fence (C function)”Œc.i915_vma_revoke_fence”hNt”auh1j¶hj±´h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ1void i915_vma_revoke_fence (struct i915_vma *vma)”h]”jÓ)�”}”(hŒ0void i915_vma_revoke_fence(struct i915_vma *vma)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÛ´h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj×´h²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj×´h²hh³jé´h´M ubj)�”}”(hŒi915_vma_revoke_fence”h]”jÜ)�”}”(hŒi915_vma_revoke_fence”h]”hŒi915_vma_revoke_fence”…”�”}”(hjü´h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjø´ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj×´h²hh³jé´h´M ubj8)�”}”(hŒ(struct i915_vma *vma)”h]”j>)�”}”(hŒstruct i915_vma *vma”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjµubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%µh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjµubh)�”}”(hhh]”jÜ)�”}”(hŒi915_vma”h]”hŒi915_vma”…”�”}”(hj6µh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj3µubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j8µŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjþ´sbŒc.i915_vma_revoke_fence”†”asbuh1hhjµubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjµubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjdµh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjµubjÜ)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjqµh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjµubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjµubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj×´h²hh³jé´h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÓ´h²hh³jé´h´M ubah}”(h]”jδah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jé´h´M hjдh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒforce-remove fence for a VMA”h]”hŒforce-remove fence for a VMA”…”�”}”(hj›µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M hj˜µh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjдh²hh³jé´h´M ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój³µjôj³µjõ‰jö‰j÷‰uh1jÇh²hhj±´h³Nh´Nubjù)�”}”(hŒå**Parameters** ``struct i915_vma *vma`` vma to map linearly (not through a fence reg) **Description** This function force-removes any fence from the given object, which is useful if the kernel wants to do untiled GTT access.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj½µh]”hŒ Parameters”…”�”}”(hj¿µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»µubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M$hj·µubj)�”}”(hhh]”j)�”}”(hŒG``struct i915_vma *vma`` vma to map linearly (not through a fence reg) ”h]”(j$)�”}”(hŒ``struct i915_vma *vma``”h]”j*)�”}”(hjܵh]”hŒstruct i915_vma *vma”…”�”}”(hjÞµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÚµubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M!hjÖµubj@)�”}”(hhh]”hÚ)�”}”(hŒ-vma to map linearly (not through a fence reg)”h]”hŒ-vma to map linearly (not through a fence reg)”…”�”}”(hjõµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jñµh´M!hjòµubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÖµubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jñµh´M!hjÓµubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·µubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj¶h]”hŒ Description”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M#hj·µubhÚ)�”}”(hŒzThis function force-removes any fence from the given object, which is useful if the kernel wants to do untiled GTT access.”h]”hŒzThis function force-removes any fence from the given object, which is useful if the kernel wants to do untiled GTT access.”…”�”}”(hj-¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M"hj·µubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj±´h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_vma_pin_fence (C function)”Œc.i915_vma_pin_fence”hNt”auh1j¶hj±´h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ-int i915_vma_pin_fence (struct i915_vma *vma)”h]”jÓ)�”}”(hŒ,int i915_vma_pin_fence(struct i915_vma *vma)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj\¶h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjX¶h²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M›ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjX¶h²hh³jj¶h´M›ubj)�”}”(hŒi915_vma_pin_fence”h]”jÜ)�”}”(hŒi915_vma_pin_fence”h]”hŒi915_vma_pin_fence”…”�”}”(hj}¶h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjy¶ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjX¶h²hh³jj¶h´M›ubj8)�”}”(hŒ(struct i915_vma *vma)”h]”j>)�”}”(hŒstruct i915_vma *vma”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj™¶h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj•¶ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj•¶ubh)�”}”(hhh]”jÜ)�”}”(hŒi915_vma”h]”hŒi915_vma”…”�”}”(hj·¶h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj´¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j¹¶Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj¶sbŒc.i915_vma_pin_fence”†”asbuh1hhj•¶ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj•¶ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjå¶h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj•¶ubjÜ)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjò¶h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj•¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj‘¶ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjX¶h²hh³jj¶h´M›ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjT¶h²hh³jj¶h´M›ubah}”(h]”jO¶ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jj¶h´M›hjQ¶h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒset up fencing for a vma”h]”hŒset up fencing for a vma”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M›hj·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjQ¶h²hh³jj¶h´M›ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój4·jôj4·jõ‰jö‰j÷‰uh1jÇh²hhj±´h³Nh´Nubjù)�”}”(hX)**Parameters** ``struct i915_vma *vma`` vma to map through a fence reg **Description** When mapping objects through the GTT, userspace wants to be able to write to them without having to worry about swizzling if the object is tiled. This function walks the fence regs looking for a free one for **obj**, stealing one if it can't find any. It then sets up the reg based on the object's properties: address, pitch and tiling format. For an untiled surface, this removes any existing fence. **Return** 0 on success, negative error code on failure.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj>·h]”hŒ Parameters”…”�”}”(hj@·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj<·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´MŸhj8·ubj)�”}”(hhh]”j)�”}”(hŒ8``struct i915_vma *vma`` vma to map through a fence reg ”h]”(j$)�”}”(hŒ``struct i915_vma *vma``”h]”j*)�”}”(hj]·h]”hŒstruct i915_vma *vma”…”�”}”(hj_·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj[·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´MœhjW·ubj@)�”}”(hhh]”hÚ)�”}”(hŒvma to map through a fence reg”h]”hŒvma to map through a fence reg”…”�”}”(hjv·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jr·h´Mœhjs·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjW·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jr·h´MœhjT·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8·ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj˜·h]”hŒ Description”…”�”}”(hjš·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mžhj8·ubhÚ)�”}”(hŒûWhen mapping objects through the GTT, userspace wants to be able to write to them without having to worry about swizzling if the object is tiled. This function walks the fence regs looking for a free one for **obj**, stealing one if it can't find any.”h]”(hŒÐWhen mapping objects through the GTT, userspace wants to be able to write to them without having to worry about swizzling if the object is tiled. This function walks the fence regs looking for a free one for ”…”�”}”(hj®·h²hh³Nh´Nubj)�”}”(hŒ**obj**”h]”hŒobj”…”�”}”(hj¶·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®·ubhŒ&, stealing one if it can’t find any.”…”�”}”(hj®·h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M�hj8·ubhÚ)�”}”(hŒ[It then sets up the reg based on the object's properties: address, pitch and tiling format.”h]”hŒ]It then sets up the reg based on the object’s properties: address, pitch and tiling format.”…”�”}”(hjÏ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M¢hj8·ubhÚ)�”}”(hŒ8For an untiled surface, this removes any existing fence.”h]”hŒ8For an untiled surface, this removes any existing fence.”…”�”}”(hjÞ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M¥hj8·ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjï·h]”hŒReturn”…”�”}”(hjñ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjí·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M§hj8·ubhÚ)�”}”(hŒ-0 on success, negative error code on failure.”h]”hŒ-0 on success, negative error code on failure.”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M¨hj8·ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj±´h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_reserve_fence (C function)”Œc.i915_reserve_fence”hNt”auh1j¶hj±´h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒCstruct i915_fence_reg * i915_reserve_fence (struct i915_ggtt *ggtt)”h]”jÓ)�”}”(hŒAstruct i915_fence_reg *i915_reserve_fence(struct i915_ggtt *ggtt)”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj4¸h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj0¸h²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´MÄubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj0¸h²hh³jA¸h´MÄubh)�”}”(hhh]”jÜ)�”}”(hŒi915_fence_reg”h]”hŒi915_fence_reg”…”�”}”(hjS¸h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjP¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jU¸Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõŒi915_reserve_fence”sbŒc.i915_reserve_fence”†”asbuh1hhj0¸h²hh³jA¸h´MÄubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj0¸h²hh³jA¸h´MÄubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj‚¸h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj0¸h²hh³jA¸h´MÄubj)�”}”(hŒi915_reserve_fence”h]”jÜ)�”}”(hjq¸h]”hŒi915_reserve_fence”…”�”}”(hj“¸h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�¸ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj0¸h²hh³jA¸h´MÄubj8)�”}”(hŒ(struct i915_ggtt *ggtt)”h]”j>)�”}”(hŒstruct i915_ggtt *ggtt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj®¸h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjª¸ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjª¸ubh)�”}”(hhh]”jÜ)�”}”(hŒ i915_ggtt”h]”hŒ i915_ggtt”…”�”}”(hj̸h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjɸubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jθŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jo¸Œc.i915_reserve_fence”†”asbuh1hhjª¸ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjª¸ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjø¸h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjª¸ubjÜ)�”}”(hŒggtt”h]”hŒggtt”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjª¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¦¸ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj0¸h²hh³jA¸h´MÄubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj,¸h²hh³jA¸h´MÄubah}”(h]”j'¸ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jA¸h´MÄhj)¸h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒReserve a fence for vGPU”h]”hŒReserve a fence for vGPU”…”�”}”(hj/¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´MÄhj,¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj)¸h²hh³jA¸h´MÄubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójG¹jôjG¹jõ‰jö‰j÷‰uh1jÇh²hhj±´h³Nh´Nubjù)�”}”(hŒÓ**Parameters** ``struct i915_ggtt *ggtt`` Global GTT **Description** This function walks the fence regs looking for a free one and remove it from the fence_list. It is used to reserve fence for vGPU to use.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjQ¹h]”hŒ Parameters”…”�”}”(hjS¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjO¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´MÈhjK¹ubj)�”}”(hhh]”j)�”}”(hŒ&``struct i915_ggtt *ggtt`` Global GTT ”h]”(j$)�”}”(hŒ``struct i915_ggtt *ggtt``”h]”j*)�”}”(hjp¹h]”hŒstruct i915_ggtt *ggtt”…”�”}”(hjr¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjn¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´MÅhjj¹ubj@)�”}”(hhh]”hÚ)�”}”(hŒ Global GTT”h]”hŒ Global GTT”…”�”}”(hj‰¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j…¹h´MÅhj†¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjj¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j…¹h´MÅhjg¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjK¹ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj«¹h]”hŒ Description”…”�”}”(hj­¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´MÇhjK¹ubhÚ)�”}”(hŒ‰This function walks the fence regs looking for a free one and remove it from the fence_list. It is used to reserve fence for vGPU to use.”h]”hŒ‰This function walks the fence regs looking for a free one and remove it from the fence_list. It is used to reserve fence for vGPU to use.”…”�”}”(hjÁ¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´MÆhjK¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj±´h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ!i915_unreserve_fence (C function)”Œc.i915_unreserve_fence”hNt”auh1j¶hj±´h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ8void i915_unreserve_fence (struct i915_fence_reg *fence)”h]”jÓ)�”}”(hŒ7void i915_unreserve_fence(struct i915_fence_reg *fence)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjð¹h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjì¹h²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mêubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ¹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjì¹h²hh³jþ¹h´Mêubj)�”}”(hŒi915_unreserve_fence”h]”jÜ)�”}”(hŒi915_unreserve_fence”h]”hŒi915_unreserve_fence”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj ºubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjì¹h²hh³jþ¹h´Mêubj8)�”}”(hŒ(struct i915_fence_reg *fence)”h]”j>)�”}”(hŒstruct i915_fence_reg *fence”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj-ºh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj)ºubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:ºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj)ºubh)�”}”(hhh]”jÜ)�”}”(hŒi915_fence_reg”h]”hŒi915_fence_reg”…”�”}”(hjKºh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjHºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jMºŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjºsbŒc.i915_unreserve_fence”†”asbuh1hhj)ºubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj)ºubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjyºh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj)ºubjÜ)�”}”(hŒfence”h]”hŒfence”…”�”}”(hj†ºh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj)ºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj%ºubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjì¹h²hh³jþ¹h´Mêubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjè¹h²hh³jþ¹h´Mêubah}”(h]”jã¹ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jþ¹h´Mêhjå¹h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒReclaim a reserved fence”h]”hŒReclaim a reserved fence”…”�”}”(hj°ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mêhj­ºh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjå¹h²hh³jþ¹h´Mêubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójȺjôjȺjõ‰jö‰j÷‰uh1jÇh²hhj±´h³Nh´Nubjù)�”}”(hŒ›**Parameters** ``struct i915_fence_reg *fence`` the fence reg **Description** This function add a reserved fence register from vGPU to the fence_list.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÒºh]”hŒ Parameters”…”�”}”(hjÔºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjкubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mîhj̺ubj)�”}”(hhh]”j)�”}”(hŒ/``struct i915_fence_reg *fence`` the fence reg ”h]”(j$)�”}”(hŒ ``struct i915_fence_reg *fence``”h]”j*)�”}”(hjñºh]”hŒstruct i915_fence_reg *fence”…”�”}”(hjóºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjïºubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mëhjëºubj@)�”}”(hhh]”hÚ)�”}”(hŒ the fence reg”h]”hŒ the fence reg”…”�”}”(hj »h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j»h´Mëhj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjëºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j»h´Mëhjèºubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj̺ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj,»h]”hŒ Description”…”�”}”(hj.»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Míhj̺ubhÚ)�”}”(hŒHThis function add a reserved fence register from vGPU to the fence_list.”h]”hŒHThis function add a reserved fence register from vGPU to the fence_list.”…”�”}”(hjB»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mìhj̺ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj±´h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ&intel_ggtt_restore_fences (C function)”Œc.intel_ggtt_restore_fences”hNt”auh1j¶hj±´h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ7void intel_ggtt_restore_fences (struct i915_ggtt *ggtt)”h]”jÓ)�”}”(hŒ6void intel_ggtt_restore_fences(struct i915_ggtt *ggtt)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjq»h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjm»h²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mùubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjm»h²hh³j»h´Mùubj)�”}”(hŒintel_ggtt_restore_fences”h]”jÜ)�”}”(hŒintel_ggtt_restore_fences”h]”hŒintel_ggtt_restore_fences”…”�”}”(hj’»h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŽ»ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjm»h²hh³j»h´Mùubj8)�”}”(hŒ(struct i915_ggtt *ggtt)”h]”j>)�”}”(hŒstruct i915_ggtt *ggtt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj®»h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjª»ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjª»ubh)�”}”(hhh]”jÜ)�”}”(hŒ i915_ggtt”h]”hŒ i915_ggtt”…”�”}”(hjÌ»h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÉ»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jλŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj”»sbŒc.intel_ggtt_restore_fences”†”asbuh1hhjª»ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjª»ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjú»h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjª»ubjÜ)�”}”(hŒggtt”h]”hŒggtt”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjª»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¦»ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjm»h²hh³j»h´Mùubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhji»h²hh³j»h´Mùubah}”(h]”jd»ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j»h´Mùhjf»h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒrestore fence state”h]”hŒrestore fence state”…”�”}”(hj1¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mùhj.¼h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjf»h²hh³j»h´Mùubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójI¼jôjI¼jõ‰jö‰j÷‰uh1jÇh²hhj±´h³Nh´Nubjù)�”}”(hX**Parameters** ``struct i915_ggtt *ggtt`` Global GTT **Description** Restore the hw fence state to match the software tracking again, to be called after a gpu reset and on resume. Note that on runtime suspend we only cancel the fences, to be reacquired by the user later.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjS¼h]”hŒ Parameters”…”�”}”(hjU¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´MýhjM¼ubj)�”}”(hhh]”j)�”}”(hŒ&``struct i915_ggtt *ggtt`` Global GTT ”h]”(j$)�”}”(hŒ``struct i915_ggtt *ggtt``”h]”j*)�”}”(hjr¼h]”hŒstruct i915_ggtt *ggtt”…”�”}”(hjt¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjp¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Múhjl¼ubj@)�”}”(hhh]”hÚ)�”}”(hŒ Global GTT”h]”hŒ Global GTT”…”�”}”(hj‹¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j‡¼h´Múhjˆ¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjl¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‡¼h´Múhji¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjM¼ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj­¼h]”hŒ Description”…”�”}”(hj¯¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´MühjM¼ubhÚ)�”}”(hŒÊRestore the hw fence state to match the software tracking again, to be called after a gpu reset and on resume. Note that on runtime suspend we only cancel the fences, to be reacquired by the user later.”h]”hŒÊRestore the hw fence state to match the software tracking again, to be called after a gpu reset and on resume. Note that on runtime suspend we only cancel the fences, to be reacquired by the user later.”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´MûhjM¼ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj±´h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ!detect_bit_6_swizzle (C function)”Œc.detect_bit_6_swizzle”hNt”auh1j¶hj±´h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ2void detect_bit_6_swizzle (struct i915_ggtt *ggtt)”h]”jÓ)�”}”(hŒ1void detect_bit_6_swizzle(struct i915_ggtt *ggtt)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjò¼h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjî¼h²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M9ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjî¼h²hh³j½h´M9ubj)�”}”(hŒdetect_bit_6_swizzle”h]”jÜ)�”}”(hŒdetect_bit_6_swizzle”h]”hŒdetect_bit_6_swizzle”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj½ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjî¼h²hh³j½h´M9ubj8)�”}”(hŒ(struct i915_ggtt *ggtt)”h]”j>)�”}”(hŒstruct i915_ggtt *ggtt”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj/½h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj+½ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj+½ubh)�”}”(hhh]”jÜ)�”}”(hŒ i915_ggtt”h]”hŒ i915_ggtt”…”�”}”(hjM½h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjJ½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jO½Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj½sbŒc.detect_bit_6_swizzle”†”asbuh1hhj+½ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj+½ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj{½h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj+½ubjÜ)�”}”(hŒggtt”h]”hŒggtt”…”�”}”(hjˆ½h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj+½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj'½ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjî¼h²hh³j½h´M9ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjê¼h²hh³j½h´M9ubah}”(h]”jå¼ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j½h´M9hjç¼h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒdetect bit 6 swizzling pattern”h]”hŒdetect bit 6 swizzling pattern”…”�”}”(hj²½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M9hj¯½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjç¼h²hh³j½h´M9ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójʽjôjʽjõ‰jö‰j÷‰uh1jÇh²hhj±´h³Nh´Nubjù)�”}”(hŒ«**Parameters** ``struct i915_ggtt *ggtt`` Global GGTT **Description** Detects bit 6 swizzling of address lookup between IGD access and CPU access through main memory.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÔ½h]”hŒ Parameters”…”�”}”(hjÖ½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒ½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M=hjνubj)�”}”(hhh]”j)�”}”(hŒ'``struct i915_ggtt *ggtt`` Global GGTT ”h]”(j$)�”}”(hŒ``struct i915_ggtt *ggtt``”h]”j*)�”}”(hjó½h]”hŒstruct i915_ggtt *ggtt”…”�”}”(hjõ½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjñ½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M:hjí½ubj@)�”}”(hhh]”hÚ)�”}”(hŒ Global GGTT”h]”hŒ Global GGTT”…”�”}”(hj ¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¾h´M:hj ¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjí½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¾h´M:hjê½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjνubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj.¾h]”hŒ Description”…”�”}”(hj0¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M<hjνubhÚ)�”}”(hŒ`Detects bit 6 swizzling of address lookup between IGD access and CPU access through main memory.”h]”hŒ`Detects bit 6 swizzling of address lookup between IGD access and CPU access through main memory.”…”�”}”(hjD¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M;hjνubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj±´h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ.i915_gem_object_do_bit_17_swizzle (C function)”•)Œ#c.i915_gem_object_do_bit_17_swizzle”hNt”auh1j¶hj±´h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ`void i915_gem_object_do_bit_17_swizzle (struct drm_i915_gem_object *obj, struct sg_table *pages)”h]”jÓ)�”}”(hŒ_void i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj, struct sg_table *pages)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjs¾h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjo¾h²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjo¾h²hh³j�¾h´Mubj)�”}”(hŒ!i915_gem_object_do_bit_17_swizzle”h]”jÜ)�”}”(hŒ!i915_gem_object_do_bit_17_swizzle”h]”hŒ!i915_gem_object_do_bit_17_swizzle”…”�”}”(hj”¾h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�¾ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjo¾h²hh³j�¾h´Mubj8)�”}”(hŒ9(struct drm_i915_gem_object *obj, struct sg_table *pages)”h]”(j>)�”}”(hŒstruct drm_i915_gem_object *obj”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj°¾h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj¬¾ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¬¾ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_gem_object”h]”hŒdrm_i915_gem_object”…”�”}”(hjξh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj˾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jоŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj–¾sbŒ#c.i915_gem_object_do_bit_17_swizzle”†”asbuh1hhj¬¾ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¬¾ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjü¾h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj¬¾ubjÜ)�”}”(hŒobj”h]”hŒobj”…”�”}”(hj ¿h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¬¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¨¾ubj>)�”}”(hŒstruct sg_table *pages”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj"¿h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj¿ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¿ubh)�”}”(hhh]”jÜ)�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hj@¿h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj=¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jB¿Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j꾌#c.i915_gem_object_do_bit_17_swizzle”†”asbuh1hhj¿ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¿ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjl¿h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj¿ubjÜ)�”}”(hŒpages”h]”hŒpages”…”�”}”(hjy¿h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¨¾ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjo¾h²hh³j�¾h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjk¾h²hh³j�¾h´Mubah}”(h]”jf¾ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j�¾h´Mhjh¾h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒfixup bit 17 swizzling”h]”hŒfixup bit 17 swizzling”…”�”}”(hj£¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mhj ¿h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjh¾h²hh³j�¾h´Mubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój»¿jôj»¿jõ‰jö‰j÷‰uh1jÇh²hhj±´h³Nh´Nubjù)�”}”(hX**Parameters** ``struct drm_i915_gem_object *obj`` i915 GEM buffer object ``struct sg_table *pages`` the scattergather list of physical pages **Description** This function fixes up the swizzling in case any page frame number for this object has changed in bit 17 since that state has been saved with i915_gem_object_save_bit_17_swizzle(). This is called when pinning backing storage again, since the kernel is free to move unpinned backing storage around (either by directly moving pages or by swapping them out and back in again).”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÅ¿h]”hŒ Parameters”…”�”}”(hjÇ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mhj¿¿ubj)�”}”(hhh]”(j)�”}”(hŒ;``struct drm_i915_gem_object *obj`` i915 GEM buffer object ”h]”(j$)�”}”(hŒ#``struct drm_i915_gem_object *obj``”h]”j*)�”}”(hjä¿h]”hŒstruct drm_i915_gem_object *obj”…”�”}”(hjæ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjâ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´MhjÞ¿ubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 GEM buffer object”h]”hŒi915 GEM buffer object”…”�”}”(hjý¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jù¿h´Mhjú¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÞ¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jù¿h´MhjÛ¿ubj)�”}”(hŒD``struct sg_table *pages`` the scattergather list of physical pages ”h]”(j$)�”}”(hŒ``struct sg_table *pages``”h]”j*)�”}”(hjÀh]”hŒstruct sg_table *pages”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´MhjÀubj@)�”}”(hhh]”hÚ)�”}”(hŒ(the scattergather list of physical pages”h]”hŒ(the scattergather list of physical pages”…”�”}”(hj6Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j2Àh´Mhj3Àubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j2Àh´MhjÛ¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¿¿ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjXÀh]”hŒ Description”…”�”}”(hjZÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjVÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mhj¿¿ubhÚ)�”}”(hŒ´This function fixes up the swizzling in case any page frame number for this object has changed in bit 17 since that state has been saved with i915_gem_object_save_bit_17_swizzle().”h]”hŒ´This function fixes up the swizzling in case any page frame number for this object has changed in bit 17 since that state has been saved with i915_gem_object_save_bit_17_swizzle().”…”�”}”(hjnÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mhj¿¿ubhÚ)�”}”(hŒÀThis is called when pinning backing storage again, since the kernel is free to move unpinned backing storage around (either by directly moving pages or by swapping them out and back in again).”h]”hŒÀThis is called when pinning backing storage again, since the kernel is free to move unpinned backing storage around (either by directly moving pages or by swapping them out and back in again).”…”�”}”(hj}Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mhj¿¿ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj±´h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ0i915_gem_object_save_bit_17_swizzle (C function)”Œ%c.i915_gem_object_save_bit_17_swizzle”hNt”auh1j¶hj±´h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒbvoid i915_gem_object_save_bit_17_swizzle (struct drm_i915_gem_object *obj, struct sg_table *pages)”h]”jÓ)�”}”(hŒavoid i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj, struct sg_table *pages)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¬Àh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj¨Àh²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M%ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»Àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¨Àh²hh³jºÀh´M%ubj)�”}”(hŒ#i915_gem_object_save_bit_17_swizzle”h]”jÜ)�”}”(hŒ#i915_gem_object_save_bit_17_swizzle”h]”hŒ#i915_gem_object_save_bit_17_swizzle”…”�”}”(hjÍÀh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÉÀubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj¨Àh²hh³jºÀh´M%ubj8)�”}”(hŒ9(struct drm_i915_gem_object *obj, struct sg_table *pages)”h]”(j>)�”}”(hŒstruct drm_i915_gem_object *obj”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjéÀh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjåÀubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjåÀubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_gem_object”h]”hŒdrm_i915_gem_object”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÁubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j ÁŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjÏÀsbŒ%c.i915_gem_object_save_bit_17_swizzle”†”asbuh1hhjåÀubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'Áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjåÀubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj5Áh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjåÀubjÜ)�”}”(hŒobj”h]”hŒobj”…”�”}”(hjBÁh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjåÀubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjáÀubj>)�”}”(hŒstruct sg_table *pages”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj[Áh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjWÁubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhÁh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjWÁubh)�”}”(hhh]”jÜ)�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hjyÁh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjvÁubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j{ÁŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j#ÁŒ%c.i915_gem_object_save_bit_17_swizzle”†”asbuh1hhjWÁubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—Áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjWÁubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¥Áh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjWÁubjÜ)�”}”(hŒpages”h]”hŒpages”…”�”}”(hj²Áh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjWÁubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjáÀubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj¨Àh²hh³jºÀh´M%ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj¤Àh²hh³jºÀh´M%ubah}”(h]”jŸÀah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jºÀh´M%hj¡Àh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒsave bit 17 swizzling”h]”hŒsave bit 17 swizzling”…”�”}”(hjÜÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M%hjÙÁh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj¡Àh²hh³jºÀh´M%ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójôÁjôjôÁjõ‰jö‰j÷‰uh1jÇh²hhj±´h³Nh´Nubjù)�”}”(hXs**Parameters** ``struct drm_i915_gem_object *obj`` i915 GEM buffer object ``struct sg_table *pages`` the scattergather list of physical pages **Description** This function saves the bit 17 of each page frame number so that swizzling can be fixed up later on with i915_gem_object_do_bit_17_swizzle(). This must be called before the backing storage can be unpinned.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjþÁh]”hŒ Parameters”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjüÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M)hjøÁubj)�”}”(hhh]”(j)�”}”(hŒ;``struct drm_i915_gem_object *obj`` i915 GEM buffer object ”h]”(j$)�”}”(hŒ#``struct drm_i915_gem_object *obj``”h]”j*)�”}”(hjÂh]”hŒstruct drm_i915_gem_object *obj”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M&hjÂubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 GEM buffer object”h]”hŒi915 GEM buffer object”…”�”}”(hj6Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j2Âh´M&hj3Âubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j2Âh´M&hjÂubj)�”}”(hŒD``struct sg_table *pages`` the scattergather list of physical pages ”h]”(j$)�”}”(hŒ``struct sg_table *pages``”h]”j*)�”}”(hjVÂh]”hŒstruct sg_table *pages”…”�”}”(hjXÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjTÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M'hjPÂubj@)�”}”(hhh]”hÚ)�”}”(hŒ(the scattergather list of physical pages”h]”hŒ(the scattergather list of physical pages”…”�”}”(hjoÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jkÂh´M'hjlÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjPÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jkÂh´M'hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjøÁubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj‘Âh]”hŒ Description”…”�”}”(hj“Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Âubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M)hjøÁubhÚ)�”}”(hŒÍThis function saves the bit 17 of each page frame number so that swizzling can be fixed up later on with i915_gem_object_do_bit_17_swizzle(). This must be called before the backing storage can be unpinned.”h]”hŒÍThis function saves the bit 17 of each page frame number so that swizzling can be fixed up later on with i915_gem_object_do_bit_17_swizzle(). This must be called before the backing storage can be unpinned.”…”�”}”(hj§Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:270: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M(hjøÁubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj±´h²hh³Nh´NubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒGlobal GTT Fence Handling”h]”hŒGlobal GTT Fence Handling”…”�”}”(hjÀÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj½Âh²hh³hÃh´MubhÚ)�”}”(hŒûImportant to avoid confusions: "fences" in the i915 driver are not execution fences used to track command completion but hardware detiler objects which wrap a given range of the global GTT. Each platform has only a fairly limited set of these objects.”h]”hŒÿImportant to avoid confusions: “fencesâ€� in the i915 driver are not execution fences used to track command completion but hardware detiler objects which wrap a given range of the global GTT. Each platform has only a fairly limited set of these objects.”…”�”}”(hjÎÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:276: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Khj½Âh²hubhÚ)�”}”(hXøFences are used to detile GTT memory mappings. They're also connected to the hardware frontbuffer render tracking and hence interact with frontbuffer compression. Furthermore on older platforms fences are required for tiled objects used by the display engine. They can also be used by the render engine - they're required for blitter commands and are optional for render commands. But on gen4+ both display (with the exception of fbc) and rendering have their own tiling state bits and don't need fences.”h]”hXþFences are used to detile GTT memory mappings. They’re also connected to the hardware frontbuffer render tracking and hence interact with frontbuffer compression. Furthermore on older platforms fences are required for tiled objects used by the display engine. They can also be used by the render engine - they’re required for blitter commands and are optional for render commands. But on gen4+ both display (with the exception of fbc) and rendering have their own tiling state bits and don’t need fences.”…”�”}”(hjÝÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:276: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Khj½Âh²hubhÚ)�”}”(hŒAlso note that fences only support X and Y tiling and hence can't be used for the fancier new tiling formats like W, Ys and Yf.”h]”hŒ�Also note that fences only support X and Y tiling and hence can’t be used for the fancier new tiling formats like W, Ys and Yf.”…”�”}”(hjìÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:276: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´K"hj½Âh²hubhÚ)�”}”(hXÄFinally note that because fences are such a restricted resource they're dynamically associated with objects. Furthermore fence state is committed to the hardware lazily to avoid unnecessary stalls on gen2/3. Therefore code must explicitly call i915_gem_object_get_fence() to synchronize fencing status for cpu access. Also note that some code wants an unfenced view, for those cases the fence can be removed forcefully with i915_gem_object_put_fence().”h]”hXÆFinally note that because fences are such a restricted resource they’re dynamically associated with objects. Furthermore fence state is committed to the hardware lazily to avoid unnecessary stalls on gen2/3. Therefore code must explicitly call i915_gem_object_get_fence() to synchronize fencing status for cpu access. Also note that some code wants an unfenced view, for those cases the fence can be removed forcefully with i915_gem_object_put_fence().”…”�”}”(hjûÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:276: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´K%hj½Âh²hubhÚ)�”}”(hŒŽInternally these functions will synchronize with userspace access by removing CPU ptes into GTT mmaps (not the GTT ptes themselves) as needed.”h]”hŒŽInternally these functions will synchronize with userspace access by removing CPU ptes into GTT mmaps (not the GTT ptes themselves) as needed.”…”�”}”(hj Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:276: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´K,hj½Âh²hubeh}”(h]”Œglobal-gtt-fence-handling”ah ]”h"]”Œglobal gtt fence handling”ah$]”h&]”uh1hÄhj±´h²hh³hÃh´MubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ%Hardware Tiling and Swizzling Details”h]”hŒ%Hardware Tiling and Swizzling Details”…”�”}”(hj$Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj!Ãh²hh³hÃh´MubhÚ)�”}”(hŒæThe idea behind tiling is to increase cache hit rates by rearranging pixel data so that a group of pixel accesses are in the same cacheline. Performance improvement from doing this on the back/depth buffer are on the order of 30%.”h]”hŒæThe idea behind tiling is to increase cache hit rates by rearranging pixel data so that a group of pixel accesses are in the same cacheline. Performance improvement from doing this on the back/depth buffer are on the order of 30%.”…”�”}”(hj2Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:282: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M hj!Ãh²hubhÚ)�”}”(hXMIntel architectures make this somewhat more complicated, though, by adjustments made to addressing of data when the memory is in interleaved mode (matched pairs of DIMMS) to improve memory bandwidth. For interleaved memory, the CPU sends every sequential 64 bytes to an alternate memory channel so it can get the bandwidth from both.”h]”hXMIntel architectures make this somewhat more complicated, though, by adjustments made to addressing of data when the memory is in interleaved mode (matched pairs of DIMMS) to improve memory bandwidth. For interleaved memory, the CPU sends every sequential 64 bytes to an alternate memory channel so it can get the bandwidth from both.”…”�”}”(hjAÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:282: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mhj!Ãh²hubhÚ)�”}”(hXñThe GPU also rearranges its accesses for increased bandwidth to interleaved memory, and it matches what the CPU does for non-tiled. However, when tiled it does it a little differently, since one walks addresses not just in the X direction but also Y. So, along with alternating channels when bit 6 of the address flips, it also alternates when other bits flip -- Bits 9 (every 512 bytes, an X tile scanline) and 10 (every two X tile scanlines) are common to both the 915 and 965-class hardware.”h]”hXñThe GPU also rearranges its accesses for increased bandwidth to interleaved memory, and it matches what the CPU does for non-tiled. However, when tiled it does it a little differently, since one walks addresses not just in the X direction but also Y. So, along with alternating channels when bit 6 of the address flips, it also alternates when other bits flip -- Bits 9 (every 512 bytes, an X tile scanline) and 10 (every two X tile scanlines) are common to both the 915 and 965-class hardware.”…”�”}”(hjPÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:282: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mhj!Ãh²hubhÚ)�”}”(hX*The CPU also sometimes XORs in higher bits as well, to improve bandwidth doing strided access like we do so frequently in graphics. This is called "Channel XOR Randomization" in the MCH documentation. The result is that the CPU is XORing in either bit 11 or bit 17 to bit 6 of its address decode.”h]”hX.The CPU also sometimes XORs in higher bits as well, to improve bandwidth doing strided access like we do so frequently in graphics. This is called “Channel XOR Randomizationâ€� in the MCH documentation. The result is that the CPU is XORing in either bit 11 or bit 17 to bit 6 of its address decode.”…”�”}”(hj_Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:282: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´Mhj!Ãh²hubhÚ)�”}”(hŒ’All of this bit 6 XORing has an effect on our memory management, as we need to make sure that the 3d driver can correctly address object contents.”h]”hŒ’All of this bit 6 XORing has an effect on our memory management, as we need to make sure that the 3d driver can correctly address object contents.”…”�”}”(hjnÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:282: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M"hj!Ãh²hubhÚ)�”}”(hŒUIf we don't have interleaved memory, all tiling is safe and no swizzling is required.”h]”hŒWIf we don’t have interleaved memory, all tiling is safe and no swizzling is required.”…”�”}”(hj}Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:282: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M&hj!Ãh²hubhÚ)�”}”(hŒþWhen bit 17 is XORed in, we simply refuse to tile at all. Bit 17 is not just a page offset, so as we page an object out and back in, individual pages in it will have different bit 17 addresses, resulting in each 64 bytes being swapped with its neighbor!”h]”hŒþWhen bit 17 is XORed in, we simply refuse to tile at all. Bit 17 is not just a page offset, so as we page an object out and back in, individual pages in it will have different bit 17 addresses, resulting in each 64 bytes being swapped with its neighbor!”…”�”}”(hjŒÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:282: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M)hj!Ãh²hubhÚ)�”}”(hX’Otherwise, if interleaved, we have to tell the 3d driver what the address swizzling it needs to do is, since it's writing with the CPU to the pages (bit 6 and potentially bit 11 XORed in), and the GPU is reading from the pages (bit 6, 9, and 10 XORed in), resulting in a cumulative bit swizzling required by the CPU of XORing in bit 6, 9, 10, and potentially 11, in order to match what the GPU expects.”h]”hX”Otherwise, if interleaved, we have to tell the 3d driver what the address swizzling it needs to do is, since it’s writing with the CPU to the pages (bit 6 and potentially bit 11 XORed in), and the GPU is reading from the pages (bit 6, 9, and 10 XORed in), resulting in a cumulative bit swizzling required by the CPU of XORing in bit 6, 9, 10, and potentially 11, in order to match what the GPU expects.”…”�”}”(hj›Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:282: ./drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c”h´M.hj!Ãh²hubeh}”(h]”Œ%hardware-tiling-and-swizzling-details”ah ]”h"]”Œ%hardware tiling and swizzling details”ah$]”h&]”uh1hÄhj±´h²hh³hÃh´Mubeh}”(h]”Œgtt-fences-and-swizzling”ah ]”h"]”Œgtt fences and swizzling”ah$]”h&]”uh1hÄhj.bh²hh³hÃh´M ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒObject Tiling IOCTLs”h]”hŒObject Tiling IOCTLs”…”�”}”(hj½Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjºÃh²hh³hÃh´Mubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ i915_gem_fence_size (C function)”Œc.i915_gem_fence_size”hNt”auh1j¶hjºÃh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒku32 i915_gem_fence_size (struct drm_i915_private *i915, u32 size, unsigned int tiling, unsigned int stride)”h]”jÓ)�”}”(hŒju32 i915_gem_fence_size(struct drm_i915_private *i915, u32 size, unsigned int tiling, unsigned int stride)”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjçÃh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjäÃubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jéÃŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõŒi915_gem_fence_size”sbŒc.i915_gem_fence_size”†”asbuh1hhjàÃh²hh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´K-ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjàÃh²hh³jÄh´K-ubj)�”}”(hŒi915_gem_fence_size”h]”jÜ)�”}”(hjÄh]”hŒi915_gem_fence_size”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÄubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjàÃh²hh³jÄh´K-ubj8)�”}”(hŒS(struct drm_i915_private *i915, u32 size, unsigned int tiling, unsigned int stride)”h]”(j>)�”}”(hŒstruct drm_i915_private *i915”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj6Äh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj2Äubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCÄh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj2Äubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hjTÄh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjQÄubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jVÄŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jÄŒc.i915_gem_fence_size”†”asbuh1hhj2Äubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrÄh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj2Äubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj€Äh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj2ÄubjÜ)�”}”(hŒi915”h]”hŒi915”…”�”}”(hj�Äh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj2Äubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj.Äubj>)�”}”(hŒu32 size”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj©Äh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¦Äubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j«ÄŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jÄŒc.i915_gem_fence_size”†”asbuh1hhj¢Äubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇÄh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¢ÄubjÜ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjÕÄh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¢Äubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj.Äubj>)�”}”(hŒunsigned int tiling”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjîÄh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjêÄubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüÄh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjêÄubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hj Åh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjêÄubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjêÄubjÜ)�”}”(hŒtiling”h]”hŒtiling”…”�”}”(hj&Åh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjêÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj.Äubj>)�”}”(hŒunsigned int stride”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj?Åh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj;Åubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMÅh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj;Åubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hj[Åh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj;Åubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiÅh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj;ÅubjÜ)�”}”(hŒstride”h]”hŒstride”…”�”}”(hjwÅh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj;Åubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj.Äubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjàÃh²hh³jÄh´K-ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÜÃh²hh³jÄh´K-ubah}”(h]”j×Ãah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÄh´K-hjÙÃh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ$required global GTT size for a fence”h]”hŒ$required global GTT size for a fence”…”�”}”(hj¡Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´K-hjžÅh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÙÃh²hh³jÄh´K-ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój¹Åjôj¹Åjõ‰jö‰j÷‰uh1jÇh²hhjºÃh³Nh´Nubjù)�”}”(hX=**Parameters** ``struct drm_i915_private *i915`` i915 device ``u32 size`` object size ``unsigned int tiling`` tiling mode ``unsigned int stride`` tiling stride **Description** Return the required global GTT size for a fence (view of a tiled object), taking into account potential fence register mapping.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÃÅh]”hŒ Parameters”…”�”}”(hjÅÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´K1hj½Åubj)�”}”(hhh]”(j)�”}”(hŒ.``struct drm_i915_private *i915`` i915 device ”h]”(j$)�”}”(hŒ!``struct drm_i915_private *i915``”h]”j*)�”}”(hjâÅh]”hŒstruct drm_i915_private *i915”…”�”}”(hjäÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjàÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´K.hjÜÅubj@)�”}”(hhh]”hÚ)�”}”(hŒ i915 device”h]”hŒ i915 device”…”�”}”(hjûÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j÷Åh´K.hjøÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÜÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j÷Åh´K.hjÙÅubj)�”}”(hŒ``u32 size`` object size ”h]”(j$)�”}”(hŒ ``u32 size``”h]”j*)�”}”(hjÆh]”hŒu32 size”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´K/hjÆubj@)�”}”(hhh]”hÚ)�”}”(hŒ object size”h]”hŒ object size”…”�”}”(hj4Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j0Æh´K/hj1Æubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j0Æh´K/hjÙÅubj)�”}”(hŒ$``unsigned int tiling`` tiling mode ”h]”(j$)�”}”(hŒ``unsigned int tiling``”h]”j*)�”}”(hjTÆh]”hŒunsigned int tiling”…”�”}”(hjVÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjRÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´K0hjNÆubj@)�”}”(hhh]”hÚ)�”}”(hŒ tiling mode”h]”hŒ tiling mode”…”�”}”(hjmÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jiÆh´K0hjjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjNÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jiÆh´K0hjÙÅubj)�”}”(hŒ&``unsigned int stride`` tiling stride ”h]”(j$)�”}”(hŒ``unsigned int stride``”h]”j*)�”}”(hj�Æh]”hŒunsigned int stride”…”�”}”(hj�Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj‹Æubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´K1hj‡Æubj@)�”}”(hhh]”hÚ)�”}”(hŒ tiling stride”h]”hŒ tiling stride”…”�”}”(hj¦Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¢Æh´K1hj£Æubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj‡Æubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¢Æh´K1hjÙÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj½ÅubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjÈÆh]”hŒ Description”…”�”}”(hjÊÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆÆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´K3hj½ÅubhÚ)�”}”(hŒReturn the required global GTT size for a fence (view of a tiled object), taking into account potential fence register mapping.”h]”hŒReturn the required global GTT size for a fence (view of a tiled object), taking into account potential fence register mapping.”…”�”}”(hjÞÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´K2hj½Åubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjºÃh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ%i915_gem_fence_alignment (C function)”Œc.i915_gem_fence_alignment”hNt”auh1j¶hjºÃh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒpu32 i915_gem_fence_alignment (struct drm_i915_private *i915, u32 size, unsigned int tiling, unsigned int stride)”h]”jÓ)�”}”(hŒou32 i915_gem_fence_alignment(struct drm_i915_private *i915, u32 size, unsigned int tiling, unsigned int stride)”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj Çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÇŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõŒi915_gem_fence_alignment”sbŒc.i915_gem_fence_alignment”†”asbuh1hhj Çh²hh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´KUubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2Çh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj Çh²hh³j1Çh´KUubj)�”}”(hŒi915_gem_fence_alignment”h]”jÜ)�”}”(hj.Çh]”hŒi915_gem_fence_alignment”…”�”}”(hjDÇh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj@Çubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj Çh²hh³j1Çh´KUubj8)�”}”(hŒS(struct drm_i915_private *i915, u32 size, unsigned int tiling, unsigned int stride)”h]”(j>)�”}”(hŒstruct drm_i915_private *i915”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj_Çh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj[Çubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlÇh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj[Çubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hj}Çh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjzÇubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÇŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j,ÇŒc.i915_gem_fence_alignment”†”asbuh1hhj[Çubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›Çh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj[Çubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj©Çh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj[ÇubjÜ)�”}”(hŒi915”h]”hŒi915”…”�”}”(hj¶Çh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj[Çubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjWÇubj>)�”}”(hŒu32 size”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjÒÇh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÏÇubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÔÇŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j,ÇŒc.i915_gem_fence_alignment”†”asbuh1hhjËÇubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðÇh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjËÇubjÜ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjþÇh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjËÇubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjWÇubj>)�”}”(hŒunsigned int tiling”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÈubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Èh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÈubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hj3Èh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÈubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAÈh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÈubjÜ)�”}”(hŒtiling”h]”hŒtiling”…”�”}”(hjOÈh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjWÇubj>)�”}”(hŒunsigned int stride”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjhÈh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjdÈubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvÈh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjdÈubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hj„Èh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjdÈubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’Èh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjdÈubjÜ)�”}”(hŒstride”h]”hŒstride”…”�”}”(hj Èh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjdÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjWÇubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj Çh²hh³j1Çh´KUubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÇh²hh³j1Çh´KUubah}”(h]”jÇah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j1Çh´KUhjÇh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ)required global GTT alignment for a fence”h]”hŒ)required global GTT alignment for a fence”…”�”}”(hjÊÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´KUhjÇÈh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÇh²hh³j1Çh´KUubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójâÈjôjâÈjõ‰jö‰j÷‰uh1jÇh²hhjºÃh³Nh´Nubjù)�”}”(hXD**Parameters** ``struct drm_i915_private *i915`` i915 device ``u32 size`` object size ``unsigned int tiling`` tiling mode ``unsigned int stride`` tiling stride **Description** Return the required global GTT alignment for a fence (a view of a tiled object), taking into account potential fence register mapping.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjìÈh]”hŒ Parameters”…”�”}”(hjîÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjêÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´KYhjæÈubj)�”}”(hhh]”(j)�”}”(hŒ.``struct drm_i915_private *i915`` i915 device ”h]”(j$)�”}”(hŒ!``struct drm_i915_private *i915``”h]”j*)�”}”(hj Éh]”hŒstruct drm_i915_private *i915”…”�”}”(hj Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´KVhjÉubj@)�”}”(hhh]”hÚ)�”}”(hŒ i915 device”h]”hŒ i915 device”…”�”}”(hj$Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j Éh´KVhj!Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Éh´KVhjÉubj)�”}”(hŒ``u32 size`` object size ”h]”(j$)�”}”(hŒ ``u32 size``”h]”j*)�”}”(hjDÉh]”hŒu32 size”…”�”}”(hjFÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjBÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´KWhj>Éubj@)�”}”(hhh]”hÚ)�”}”(hŒ object size”h]”hŒ object size”…”�”}”(hj]Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jYÉh´KWhjZÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj>Éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jYÉh´KWhjÉubj)�”}”(hŒ$``unsigned int tiling`` tiling mode ”h]”(j$)�”}”(hŒ``unsigned int tiling``”h]”j*)�”}”(hj}Éh]”hŒunsigned int tiling”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj{Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´KXhjwÉubj@)�”}”(hhh]”hÚ)�”}”(hŒ tiling mode”h]”hŒ tiling mode”…”�”}”(hj–Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j’Éh´KXhj“Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjwÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j’Éh´KXhjÉubj)�”}”(hŒ&``unsigned int stride`` tiling stride ”h]”(j$)�”}”(hŒ``unsigned int stride``”h]”j*)�”}”(hj¶Éh]”hŒunsigned int stride”…”�”}”(hj¸Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj´Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´KYhj°Éubj@)�”}”(hhh]”hÚ)�”}”(hŒ tiling stride”h]”hŒ tiling stride”…”�”}”(hjÏÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jËÉh´KYhjÌÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj°Éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jËÉh´KYhjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjæÈubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjñÉh]”hŒ Description”…”�”}”(hjóÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjïÉubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´K[hjæÈubhÚ)�”}”(hŒ†Return the required global GTT alignment for a fence (a view of a tiled object), taking into account potential fence register mapping.”h]”hŒ†Return the required global GTT alignment for a fence (a view of a tiled object), taking into account potential fence register mapping.”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´KZhjæÈubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjºÃh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ&i915_gem_set_tiling_ioctl (C function)”Œc.i915_gem_set_tiling_ioctl”hNt”auh1j¶hjºÃh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒYint i915_gem_set_tiling_ioctl (struct drm_device *dev, void *data, struct drm_file *file)”h]”jÓ)�”}”(hŒXint i915_gem_set_tiling_ioctl(struct drm_device *dev, void *data, struct drm_file *file)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj6Êh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj2Êh²hh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´MIubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj2Êh²hh³jDÊh´MIubj)�”}”(hŒi915_gem_set_tiling_ioctl”h]”jÜ)�”}”(hŒi915_gem_set_tiling_ioctl”h]”hŒi915_gem_set_tiling_ioctl”…”�”}”(hjWÊh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjSÊubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj2Êh²hh³jDÊh´MIubj8)�”}”(hŒ;(struct drm_device *dev, void *data, struct drm_file *file)”h]”(j>)�”}”(hŒstruct drm_device *dev”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjsÊh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjoÊubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€Êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjoÊubh)�”}”(hhh]”jÜ)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hj‘Êh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŽÊubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j“ÊŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjYÊsbŒc.i915_gem_set_tiling_ioctl”†”asbuh1hhjoÊubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±Êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjoÊubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¿Êh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjoÊubjÜ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÌÊh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjoÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjkÊubj>)�”}”(hŒ void *data”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjåÊh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjáÊubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjáÊubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjáÊubjÜ)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjáÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjkÊubj>)�”}”(hŒstruct drm_file *file”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj'Ëh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj#Ëubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4Ëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj#Ëubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_file”h]”hŒdrm_file”…”�”}”(hjEËh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjBËubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jGËŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j­ÊŒc.i915_gem_set_tiling_ioctl”†”asbuh1hhj#Ëubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcËh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj#Ëubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjqËh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj#ËubjÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj~Ëh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj#Ëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjkÊubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj2Êh²hh³jDÊh´MIubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj.Êh²hh³jDÊh´MIubah}”(h]”j)Êah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jDÊh´MIhj+Êh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ IOCTL handler to set tiling mode”h]”hŒ IOCTL handler to set tiling mode”…”�”}”(hj¨Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´MIhj¥Ëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj+Êh²hh³jDÊh´MIubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójÀËjôjÀËjõ‰jö‰j÷‰uh1jÇh²hhjºÃh³Nh´Nubjù)�”}”(hXp**Parameters** ``struct drm_device *dev`` DRM device ``void *data`` data pointer for the ioctl ``struct drm_file *file`` DRM file for the ioctl call **Description** Sets the tiling mode of an object, returning the required swizzling of bit 6 of addresses in the object. Called by the user via ioctl. **Return** Zero on success, negative errno on failure.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÊËh]”hŒ Parameters”…”�”}”(hjÌËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈËubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´MMhjÄËubj)�”}”(hhh]”(j)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j$)�”}”(hŒ``struct drm_device *dev``”h]”j*)�”}”(hjéËh]”hŒstruct drm_device *dev”…”�”}”(hjëËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjçËubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´MJhjãËubj@)�”}”(hhh]”hÚ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jþËh´MJhjÿËubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjãËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jþËh´MJhjàËubj)�”}”(hŒ*``void *data`` data pointer for the ioctl ”h]”(j$)�”}”(hŒ``void *data``”h]”j*)�”}”(hj"Ìh]”hŒ void *data”…”�”}”(hj$Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´MKhjÌubj@)�”}”(hhh]”hÚ)�”}”(hŒdata pointer for the ioctl”h]”hŒdata pointer for the ioctl”…”�”}”(hj;Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j7Ìh´MKhj8Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7Ìh´MKhjàËubj)�”}”(hŒ6``struct drm_file *file`` DRM file for the ioctl call ”h]”(j$)�”}”(hŒ``struct drm_file *file``”h]”j*)�”}”(hj[Ìh]”hŒstruct drm_file *file”…”�”}”(hj]Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjYÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´MLhjUÌubj@)�”}”(hhh]”hÚ)�”}”(hŒDRM file for the ioctl call”h]”hŒDRM file for the ioctl call”…”�”}”(hjtÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jpÌh´MLhjqÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjUÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jpÌh´MLhjàËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄËubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj–Ìh]”hŒ Description”…”�”}”(hj˜Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´MNhjÄËubhÚ)�”}”(hŒhSets the tiling mode of an object, returning the required swizzling of bit 6 of addresses in the object.”h]”hŒhSets the tiling mode of an object, returning the required swizzling of bit 6 of addresses in the object.”…”�”}”(hj¬Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´MMhjÄËubhÚ)�”}”(hŒCalled by the user via ioctl.”h]”hŒCalled by the user via ioctl.”…”�”}”(hj»Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´MPhjÄËubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjÌÌh]”hŒReturn”…”�”}”(hjÎÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊÌubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´MRhjÄËubhÚ)�”}”(hŒ+Zero on success, negative errno on failure.”h]”hŒ+Zero on success, negative errno on failure.”…”�”}”(hjâÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´MShjÄËubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjºÃh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ&i915_gem_get_tiling_ioctl (C function)”Œc.i915_gem_get_tiling_ioctl”hNt”auh1j¶hjºÃh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒYint i915_gem_get_tiling_ioctl (struct drm_device *dev, void *data, struct drm_file *file)”h]”jÓ)�”}”(hŒXint i915_gem_get_tiling_ioctl(struct drm_device *dev, void *data, struct drm_file *file)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj Íh²hh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´M�ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj Íh²hh³jÍh´M�ubj)�”}”(hŒi915_gem_get_tiling_ioctl”h]”jÜ)�”}”(hŒi915_gem_get_tiling_ioctl”h]”hŒi915_gem_get_tiling_ioctl”…”�”}”(hj2Íh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj.Íubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj Íh²hh³jÍh´M�ubj8)�”}”(hŒ;(struct drm_device *dev, void *data, struct drm_file *file)”h]”(j>)�”}”(hŒstruct drm_device *dev”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjNÍh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjJÍubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjJÍubh)�”}”(hhh]”jÜ)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjlÍh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjiÍubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jnÍŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj4ÍsbŒc.i915_gem_get_tiling_ioctl”†”asbuh1hhjJÍubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjJÍubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjšÍh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjJÍubjÜ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj§Íh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjJÍubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjFÍubj>)�”}”(hŒ void *data”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÀÍh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj¼Íubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¼Íubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÜÍh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj¼ÍubjÜ)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjéÍh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¼Íubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjFÍubj>)�”}”(hŒstruct drm_file *file”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjþÍubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjþÍubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_file”h]”hŒdrm_file”…”�”}”(hj Îh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÎubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j"ÎŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jˆÍŒc.i915_gem_get_tiling_ioctl”†”asbuh1hhjþÍubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>Îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjþÍubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjLÎh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjþÍubjÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjYÎh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjþÍubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjFÍubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj Íh²hh³jÍh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj Íh²hh³jÍh´M�ubah}”(h]”jÍah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÍh´M�hjÍh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ IOCTL handler to get tiling mode”h]”hŒ IOCTL handler to get tiling mode”…”�”}”(hjƒÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´M�hj€Îh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÍh²hh³jÍh´M�ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój›Îjôj›Îjõ‰jö‰j÷‰uh1jÇh²hhjºÃh³Nh´Nubjù)�”}”(hXT**Parameters** ``struct drm_device *dev`` DRM device ``void *data`` data pointer for the ioctl ``struct drm_file *file`` DRM file for the ioctl call **Description** Returns the current tiling mode and required bit 6 swizzling for the object. Called by the user via ioctl. **Return** Zero on success, negative errno on failure.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¥Îh]”hŒ Parameters”…”�”}”(hj§Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£Îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´M¡hjŸÎubj)�”}”(hhh]”(j)�”}”(hŒ&``struct drm_device *dev`` DRM device ”h]”(j$)�”}”(hŒ``struct drm_device *dev``”h]”j*)�”}”(hjÄÎh]”hŒstruct drm_device *dev”…”�”}”(hjÆÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÂÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´Mžhj¾Îubj@)�”}”(hhh]”hÚ)�”}”(hŒ DRM device”h]”hŒ DRM device”…”�”}”(hjÝÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÙÎh´MžhjÚÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¾Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÙÎh´Mžhj»Îubj)�”}”(hŒ*``void *data`` data pointer for the ioctl ”h]”(j$)�”}”(hŒ``void *data``”h]”j*)�”}”(hjýÎh]”hŒ void *data”…”�”}”(hjÿÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjûÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´MŸhj÷Îubj@)�”}”(hhh]”hÚ)�”}”(hŒdata pointer for the ioctl”h]”hŒdata pointer for the ioctl”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÏh´MŸhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj÷Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏh´MŸhj»Îubj)�”}”(hŒ6``struct drm_file *file`` DRM file for the ioctl call ”h]”(j$)�”}”(hŒ``struct drm_file *file``”h]”j*)�”}”(hj6Ïh]”hŒstruct drm_file *file”…”�”}”(hj8Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj4Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´M hj0Ïubj@)�”}”(hhh]”hÚ)�”}”(hŒDRM file for the ioctl call”h]”hŒDRM file for the ioctl call”…”�”}”(hjOÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jKÏh´M hjLÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj0Ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jKÏh´M hj»Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸÎubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjqÏh]”hŒ Description”…”�”}”(hjsÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoÏubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´M¢hjŸÎubhÚ)�”}”(hŒLReturns the current tiling mode and required bit 6 swizzling for the object.”h]”hŒLReturns the current tiling mode and required bit 6 swizzling for the object.”…”�”}”(hj‡Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´M¡hjŸÎubhÚ)�”}”(hŒCalled by the user via ioctl.”h]”hŒCalled by the user via ioctl.”…”�”}”(hj–Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´M£hjŸÎubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj§Ïh]”hŒReturn”…”�”}”(hj©Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´M¥hjŸÎubhÚ)�”}”(hŒ+Zero on success, negative errno on failure.”h]”hŒ+Zero on success, negative errno on failure.”…”�”}”(hj½Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:288: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´M¦hjŸÎubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjºÃh²hh³Nh´NubhÚ)�”}”(hŒ~i915_gem_set_tiling_ioctl() and i915_gem_get_tiling_ioctl() is the userspace interface to declare fence register requirements.”h]”hŒ~i915_gem_set_tiling_ioctl() and i915_gem_get_tiling_ioctl() is the userspace interface to declare fence register requirements.”…”�”}”(hjÓÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:291: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´KhjºÃh²hubhÚ)�”}”(hŒ£In principle GEM doesn't care at all about the internal data layout of an object, and hence it also doesn't care about tiling or swizzling. There's two exceptions:”h]”hŒ©In principle GEM doesn’t care at all about the internal data layout of an object, and hence it also doesn’t care about tiling or swizzling. There’s two exceptions:”…”�”}”(hjâÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:291: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´KhjºÃh²hubj°:)�”}”(hhh]”(jµ:)�”}”(hXFor X and Y tiling the hardware provides detilers for CPU access, so called fences. Since there's only a limited amount of them the kernel must manage these, and therefore userspace must tell the kernel the object tiling if it wants to use fences for detiling.”h]”hÚ)�”}”(hXFor X and Y tiling the hardware provides detilers for CPU access, so called fences. Since there's only a limited amount of them the kernel must manage these, and therefore userspace must tell the kernel the object tiling if it wants to use fences for detiling.”h]”hXFor X and Y tiling the hardware provides detilers for CPU access, so called fences. Since there’s only a limited amount of them the kernel must manage these, and therefore userspace must tell the kernel the object tiling if it wants to use fences for detiling.”…”�”}”(hjøÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:291: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´KhjôÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjñÏubjµ:)�”}”(hX·On gen3 and gen4 platforms have a swizzling pattern for tiled objects which depends upon the physical page frame number. When swapping such objects the page frame number might change and the kernel must be able to fix this up and hence now the tiling. Note that on a subset of platforms with asymmetric memory channel population the swizzling pattern changes in an unknown way, and for those the kernel simply forbids swapping completely. ”h]”hÚ)�”}”(hX¶On gen3 and gen4 platforms have a swizzling pattern for tiled objects which depends upon the physical page frame number. When swapping such objects the page frame number might change and the kernel must be able to fix this up and hence now the tiling. Note that on a subset of platforms with asymmetric memory channel population the swizzling pattern changes in an unknown way, and for those the kernel simply forbids swapping completely.”h]”hX¶On gen3 and gen4 platforms have a swizzling pattern for tiled objects which depends upon the physical page frame number. When swapping such objects the page frame number might change and the kernel must be able to fix this up and hence now the tiling. Note that on a subset of platforms with asymmetric memory channel population the swizzling pattern changes in an unknown way, and for those the kernel simply forbids swapping completely.”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:291: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´Khj Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjñÏubeh}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³jÐh´KhjºÃh²hubhÚ)�”}”(hŒïSince neither of this applies for new tiling layouts on modern platforms like W, Ys and Yf tiling GEM only allows object tiling to be set to X or Y tiled. Anything else can be handled in userspace entirely without the kernel's involvement.”h]”hŒñSince neither of this applies for new tiling layouts on modern platforms like W, Ys and Yf tiling GEM only allows object tiling to be set to X or Y tiled. Anything else can be handled in userspace entirely without the kernel’s involvement.”…”�”}”(hj,Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:291: ./drivers/gpu/drm/i915/gem/i915_gem_tiling.c”h´K$hjºÃh²hubeh}”(h]”Œobject-tiling-ioctls”ah ]”h"]”Œobject tiling ioctls”ah$]”h&]”uh1hÄhj.bh²hh³hÃh´MubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒProtected Objects”h]”hŒProtected Objects”…”�”}”(hjFÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjCÐh²hh³hÃh´M'ubhÚ)�”}”(hŒÚPXP (Protected Xe Path) is a feature available in Gen12 and newer platforms. It allows execution and flip to display of protected (i.e. encrypted) objects. The SW support is enabled via the CONFIG_DRM_I915_PXP kconfig.”h]”hŒÚPXP (Protected Xe Path) is a feature available in Gen12 and newer platforms. It allows execution and flip to display of protected (i.e. encrypted) objects. The SW support is enabled via the CONFIG_DRM_I915_PXP kconfig.”…”�”}”(hjTÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/i915:297: ./drivers/gpu/drm/i915/pxp/intel_pxp.c”h´KhjCÐh²hubhÚ)�”}”(hXRObjects can opt-in to PXP encryption at creation time via the I915_GEM_CREATE_EXT_PROTECTED_CONTENT create_ext flag. For objects to be correctly protected they must be used in conjunction with a context created with the I915_CONTEXT_PARAM_PROTECTED_CONTENT flag. See the documentation of those two uapi flags for details and restrictions.”h]”hXRObjects can opt-in to PXP encryption at creation time via the I915_GEM_CREATE_EXT_PROTECTED_CONTENT create_ext flag. For objects to be correctly protected they must be used in conjunction with a context created with the I915_CONTEXT_PARAM_PROTECTED_CONTENT flag. See the documentation of those two uapi flags for details and restrictions.”…”�”•}”(hjcÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/i915:297: ./drivers/gpu/drm/i915/pxp/intel_pxp.c”h´KhjCÐh²hubhÚ)�”}”(hXHProtected objects are tied to a pxp session; currently we only support one session, which i915 manages and whose index is available in the uapi (I915_PROTECTED_CONTENT_DEFAULT_SESSION) for use in instructions targeting protected objects. The session is invalidated by the HW when certain events occur (e.g. suspend/resume). When this happens, all the objects that were used with the session are marked as invalid and all contexts marked as using protected content are banned. Any further attempt at using them in an execbuf call is rejected, while flips are converted to black frames.”h]”hXHProtected objects are tied to a pxp session; currently we only support one session, which i915 manages and whose index is available in the uapi (I915_PROTECTED_CONTENT_DEFAULT_SESSION) for use in instructions targeting protected objects. The session is invalidated by the HW when certain events occur (e.g. suspend/resume). When this happens, all the objects that were used with the session are marked as invalid and all contexts marked as using protected content are banned. Any further attempt at using them in an execbuf call is rejected, while flips are converted to black frames.”…”�”}”(hjrÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/i915:297: ./drivers/gpu/drm/i915/pxp/intel_pxp.c”h´K#hjCÐh²hubhÚ)�”}”(hŒ¾Some of the PXP setup operations are performed by the Management Engine, which is handled by the mei driver; communication between i915 and mei is performed via the mei_pxp component module.”h]”hŒ¾Some of the PXP setup operations are performed by the Management Engine, which is handled by the mei driver; communication between i915 and mei is performed via the mei_pxp component module.”…”�”}”(hj�Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ^/var/lib/git/docbuild/linux/Documentation/gpu/i915:297: ./drivers/gpu/drm/i915/pxp/intel_pxp.c”h´K-hjCÐh²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒintel_pxp (C struct)”Œ c.intel_pxp”hNt”auh1j¶hjCÐh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ intel_pxp”h]”jÓ)�”}”(hŒstruct intel_pxp”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj©Ðh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj¥Ðh²hh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´Kubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·Ðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¥Ðh²hh³j¶Ðh´Kubj)�”}”(hŒ intel_pxp”h]”jÜ)�”}”(hj£Ðh]”hŒ intel_pxp”…”�”}”(hjÉÐh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÅÐubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj¥Ðh²hh³j¶Ðh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj¡Ðh²hh³j¶Ðh´Kubah}”(h]”jœÐah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j¶Ðh´KhjžÐh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ pxp state”h]”hŒ pxp state”…”�”}”(hjëÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KhjèÐh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjžÐh²hh³j¶Ðh´Kubeh}”(h]”h ]”(jóŒstruct”eh"]”h$]”h&]”jòjójójÑjôjÑjõ‰jö‰j÷‰uh1jÇh²hhjCÐh³Nh´Nubjù)�”}”(hXŽ **Definition**:: struct intel_pxp { struct intel_gt *ctrl_gt; bool platform_cfg_is_bad; u32 kcr_base; struct gsccs_session_resources { u64 host_session_handle; struct intel_context *ce; struct i915_vma *pkt_vma; void *pkt_vaddr; struct i915_vma *bb_vma; void *bb_vaddr; } gsccs_res; struct i915_pxp_component *pxp_component; struct device_link *dev_link; bool pxp_component_added; struct intel_context *ce; struct mutex arb_mutex; bool arb_is_valid; u32 key_instance; struct mutex tee_mutex; struct { struct drm_i915_gem_object *obj; void *vaddr; } stream_cmd; bool hw_state_invalidated; bool irq_enabled; struct completion termination; struct work_struct session_work; u32 session_events; #define PXP_TERMINATION_REQUEST BIT(0); #define PXP_TERMINATION_COMPLETE BIT(1); #define PXP_INVAL_REQUIRED BIT(2); #define PXP_EVENT_TYPE_IRQ BIT(3); }; **Members** ``ctrl_gt`` pointer to the tile that owns the controls for PXP subsystem assets that the VDBOX, the KCR engine (and GSC CS depending on the platform) ``platform_cfg_is_bad`` used to track if any prior arb session creation resulted in a failure that was caused by a platform configuration issue, meaning that failure will not get resolved without a change to the platform (not kernel) such as BIOS configuration, firwmware update, etc. This bool gets reflected when GET_PARAM:I915_PARAM_PXP_STATUS is called. ``kcr_base`` base mmio offset for the KCR engine which is different on legacy platforms vs newer platforms where the KCR is inside the media-tile. ``gsccs_res`` resources for request submission for platforms that have a GSC engine. ``pxp_component`` i915_pxp_component struct of the bound mei_pxp module. Only set and cleared inside component bind/unbind functions, which are protected by :c:type:`tee_mutex`. ``dev_link`` Enforce module relationship for power management ordering. ``pxp_component_added`` track if the pxp component has been added. Set and cleared in tee init and fini functions respectively. ``ce`` kernel-owned context used for PXP operations ``arb_mutex`` protects arb session start ``arb_is_valid`` tracks arb session status. After a teardown, the arb session can still be in play on the HW even if the keys are gone, so we can't rely on the HW state of the session to know if it's valid and need to track the status in SW. ``key_instance`` tracks which key instance we're on, so we can use it to determine if an object was created using the current key or a previous one. ``tee_mutex`` protects the tee channel binding and messaging. ``stream_cmd`` LMEM obj used to send stream PXP commands to the GSC ``hw_state_invalidated`` if the HW perceives an attack on the integrity of the encryption it will invalidate the keys and expect SW to re-initialize the session. We keep track of this state to make sure we only re-start the arb session when required. ``irq_enabled`` tracks the status of the kcr irqs ``termination`` tracks the status of a pending termination. Only re-initialized under gt->irq_lock and completed in :c:type:`session_work`. ``session_work`` worker that manages session events. ``session_events`` pending session events, protected with gt->irq_lock.”h]”(hÚ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ÑubhŒ:”…”�”}”(hj Ñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KhjÑubjA#)�”}”(hX×struct intel_pxp { struct intel_gt *ctrl_gt; bool platform_cfg_is_bad; u32 kcr_base; struct gsccs_session_resources { u64 host_session_handle; struct intel_context *ce; struct i915_vma *pkt_vma; void *pkt_vaddr; struct i915_vma *bb_vma; void *bb_vaddr; } gsccs_res; struct i915_pxp_component *pxp_component; struct device_link *dev_link; bool pxp_component_added; struct intel_context *ce; struct mutex arb_mutex; bool arb_is_valid; u32 key_instance; struct mutex tee_mutex; struct { struct drm_i915_gem_object *obj; void *vaddr; } stream_cmd; bool hw_state_invalidated; bool irq_enabled; struct completion termination; struct work_struct session_work; u32 session_events; #define PXP_TERMINATION_REQUEST BIT(0); #define PXP_TERMINATION_COMPLETE BIT(1); #define PXP_INVAL_REQUIRED BIT(2); #define PXP_EVENT_TYPE_IRQ BIT(3); };”h]”hX×struct intel_pxp { struct intel_gt *ctrl_gt; bool platform_cfg_is_bad; u32 kcr_base; struct gsccs_session_resources { u64 host_session_handle; struct intel_context *ce; struct i915_vma *pkt_vma; void *pkt_vaddr; struct i915_vma *bb_vma; void *bb_vaddr; } gsccs_res; struct i915_pxp_component *pxp_component; struct device_link *dev_link; bool pxp_component_added; struct intel_context *ce; struct mutex arb_mutex; bool arb_is_valid; u32 key_instance; struct mutex tee_mutex; struct { struct drm_i915_gem_object *obj; void *vaddr; } stream_cmd; bool hw_state_invalidated; bool irq_enabled; struct completion termination; struct work_struct session_work; u32 session_events; #define PXP_TERMINATION_REQUEST BIT(0); #define PXP_TERMINATION_COMPLETE BIT(1); #define PXP_INVAL_REQUIRED BIT(2); #define PXP_EVENT_TYPE_IRQ BIT(3); };”…”�”}”hj(Ñsbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KhjÑubhÚ)�”}”(hŒ **Members**”h]”j)�”}”(hj9Ñh]”hŒMembers”…”�”}”(hj;Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´K=hjÑubj)�”}”(hhh]”(j)�”}”(hŒ–``ctrl_gt`` pointer to the tile that owns the controls for PXP subsystem assets that the VDBOX, the KCR engine (and GSC CS depending on the platform) ”h]”(j$)�”}”(hŒ ``ctrl_gt``”h]”j*)�”}”(hjXÑh]”hŒctrl_gt”…”�”}”(hjZÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjVÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KhjRÑubj@)�”}”(hhh]”hÚ)�”}”(hŒ‰pointer to the tile that owns the controls for PXP subsystem assets that the VDBOX, the KCR engine (and GSC CS depending on the platform)”h]”hŒ‰pointer to the tile that owns the controls for PXP subsystem assets that the VDBOX, the KCR engine (and GSC CS depending on the platform)”…”�”}”(hjqÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KhjnÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjRÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jmÑh´KhjOÑubj)�”}”(hXf``platform_cfg_is_bad`` used to track if any prior arb session creation resulted in a failure that was caused by a platform configuration issue, meaning that failure will not get resolved without a change to the platform (not kernel) such as BIOS configuration, firwmware update, etc. This bool gets reflected when GET_PARAM:I915_PARAM_PXP_STATUS is called. ”h]”(j$)�”}”(hŒ``platform_cfg_is_bad``”h]”j*)�”}”(hj’Ñh]”hŒplatform_cfg_is_bad”…”�”}”(hj”Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj�Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´K#hjŒÑubj@)�”}”(hhh]”hÚ)�”}”(hXMused to track if any prior arb session creation resulted in a failure that was caused by a platform configuration issue, meaning that failure will not get resolved without a change to the platform (not kernel) such as BIOS configuration, firwmware update, etc. This bool gets reflected when GET_PARAM:I915_PARAM_PXP_STATUS is called.”h]”hXMused to track if any prior arb session creation resulted in a failure that was caused by a platform configuration issue, meaning that failure will not get resolved without a change to the platform (not kernel) such as BIOS configuration, firwmware update, etc. This bool gets reflected when GET_PARAM:I915_PARAM_PXP_STATUS is called.”…”�”}”(hj«Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´Khj¨Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjŒÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j§Ñh´K#hjOÑubj)�”}”(hŒ“``kcr_base`` base mmio offset for the KCR engine which is different on legacy platforms vs newer platforms where the KCR is inside the media-tile. ”h]”(j$)�”}”(hŒ ``kcr_base``”h]”j*)�”}”(hjÌÑh]”hŒkcr_base”…”�”}”(hjÎÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÊÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´K)hjÆÑubj@)�”}”(hhh]”hÚ)�”}”(hŒ…base mmio offset for the KCR engine which is different on legacy platforms vs newer platforms where the KCR is inside the media-tile.”h]”hŒ…base mmio offset for the KCR engine which is different on legacy platforms vs newer platforms where the KCR is inside the media-tile.”…”�”}”(hjåÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´K(hjâÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÆÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jáÑh´K)hjOÑubj)�”}”(hŒU``gsccs_res`` resources for request submission for platforms that have a GSC engine. ”h]”(j$)�”}”(hŒ ``gsccs_res``”h]”j*)�”}”(hjÒh]”hŒ gsccs_res”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´K.hjÒubj@)�”}”(hhh]”hÚ)�”}”(hŒFresources for request submission for platforms that have a GSC engine.”h]”hŒFresources for request submission for platforms that have a GSC engine.”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÒh´K.hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒh´K.hjOÑubj)�”}”(hŒ²``pxp_component`` i915_pxp_component struct of the bound mei_pxp module. Only set and cleared inside component bind/unbind functions, which are protected by :c:type:`tee_mutex`. ”h]”(j$)�”}”(hŒ``pxp_component``”h]”j*)�”}”(hj?Òh]”hŒ pxp_component”…”�”}”(hjAÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj=Òubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´K>hj9Òubj@)�”}”(hhh]”hÚ)�”}”(hŒŸi915_pxp_component struct of the bound mei_pxp module. Only set and cleared inside component bind/unbind functions, which are protected by :c:type:`tee_mutex`.”h]”(hŒ‹i915_pxp_component struct of the bound mei_pxp module. Only set and cleared inside component bind/unbind functions, which are protected by ”…”�”}”(hjXÒh²hh³Nh´Nubh)�”}”(hŒ:c:type:`tee_mutex`”h]”j*)�”}”(hjbÒh]”hŒ tee_mutex”…”�”}”(hjdÒh²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hj`Òubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jùj’jŒ tee_mutex”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KhjOÑubj)�”}”(hŒH``dev_link`` Enforce module relationship for power management ordering. ”h]”(j$)�”}”(hŒ ``dev_link``”h]”j*)�”}”(hjœÒh]”hŒdev_link”…”�”}”(hjžÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjšÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KChj–Òubj@)�”}”(hhh]”hÚ)�”}”(hŒ:Enforce module relationship for power management ordering.”h]”hŒ:Enforce module relationship for power management ordering.”…”�”}”(hjµÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j±Òh´KChj²Òubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj–Òubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±Òh´KChjOÑubj)�”}”(hŒ€``pxp_component_added`` track if the pxp component has been added. Set and cleared in tee init and fini functions respectively. ”h]”(j$)�”}”(hŒ``pxp_component_added``”h]”j*)�”}”(hjÕÒh]”hŒpxp_component_added”…”�”}”(hj×Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÓÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KHhjÏÒubj@)�”}”(hhh]”hÚ)�”}”(hŒgtrack if the pxp component has been added. Set and cleared in tee init and fini functions respectively.”h]”hŒgtrack if the pxp component has been added. Set and cleared in tee init and fini functions respectively.”…”�”}”(hjîÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KGhjëÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÏÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêÒh´KHhjOÑubj)�”}”(hŒ4``ce`` kernel-owned context used for PXP operations ”h]”(j$)�”}”(hŒ``ce``”h]”j*)�”}”(hjÓh]”hŒce”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj Óubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KLhj Óubj@)�”}”(hhh]”hÚ)�”}”(hŒ,kernel-owned context used for PXP operations”h]”hŒ,kernel-owned context used for PXP operations”…”�”}”(hj(Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j$Óh´KLhj%Óubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj Óubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$Óh´KLhjOÑubj)�”}”(hŒ)``arb_mutex`` protects arb session start ”h]”(j$)�”}”(hŒ ``arb_mutex``”h]”j*)�”}”(hjHÓh]”hŒ arb_mutex”…”�”}”(hjJÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjFÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KOhjBÓubj@)�”}”(hhh]”hÚ)�”}”(hŒprotects arb session start”h]”hŒprotects arb session start”…”�”}”(hjaÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j]Óh´KOhj^Óubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjBÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j]Óh´KOhjOÑubj)�”}”(hŒò``arb_is_valid`` tracks arb session status. After a teardown, the arb session can still be in play on the HW even if the keys are gone, so we can't rely on the HW state of the session to know if it's valid and need to track the status in SW. ”h]”(j$)�”}”(hŒ``arb_is_valid``”h]”j*)�”}”(hj�Óh]”hŒ arb_is_valid”…”�”}”(hjƒÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KUhj{Óubj@)�”}”(hhh]”hÚ)�”}”(hŒàtracks arb session status. After a teardown, the arb session can still be in play on the HW even if the keys are gone, so we can't rely on the HW state of the session to know if it's valid and need to track the status in SW.”h]”hŒätracks arb session status. After a teardown, the arb session can still be in play on the HW even if the keys are gone, so we can’t rely on the HW state of the session to know if it’s valid and need to track the status in SW.”…”�”}”(hjšÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KRhj—Óubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj{Óubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–Óh´KUhjOÑubj)�”}”(hŒ•``key_instance`` tracks which key instance we're on, so we can use it to determine if an object was created using the current key or a previous one. ”h]”(j$)�”}”(hŒ``key_instance``”h]”j*)�”}”(hj»Óh]”hŒ key_instance”…”�”}”(hj½Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¹Óubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´K\hjµÓubj@)�”}”(hhh]”hÚ)�”}”(hŒƒtracks which key instance we're on, so we can use it to determine if an object was created using the current key or a previous one.”h]”hŒ…tracks which key instance we’re on, so we can use it to determine if an object was created using the current key or a previous one.”…”�”}”(hjÔÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KZhjÑÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjµÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÐÓh´K\hjOÑubj)�”}”(hŒ>``tee_mutex`` protects the tee channel binding and messaging. ”h]”(j$)�”}”(hŒ ``tee_mutex``”h]”j*)�”}”(hjõÓh]”hŒ tee_mutex”…”�”}”(hj÷Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjóÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´K`hjïÓubj@)�”}”(hhh]”hÚ)�”}”(hŒ/protects the tee channel binding and messaging.”h]”hŒ/protects the tee channel binding and messaging.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j Ôh´K`hj Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjïÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Ôh´K`hjOÑubj)�”}”(hŒD``stream_cmd`` LMEM obj used to send stream PXP commands to the GSC ”h]”(j$)�”}”(hŒ``stream_cmd``”h]”j*)�”}”(hj.Ôh]”hŒ stream_cmd”…”�”}”(hj0Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj,Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´Kchj(Ôubj@)�”}”(hhh]”hÚ)�”}”(hŒ4LMEM obj used to send stream PXP commands to the GSC”h]”hŒ4LMEM obj used to send stream PXP commands to the GSC”…”�”}”(hjGÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jCÔh´KchjDÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj(Ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jCÔh´KchjOÑubj)�”}”(hŒû``hw_state_invalidated`` if the HW perceives an attack on the integrity of the encryption it will invalidate the keys and expect SW to re-initialize the session. We keep track of this state to make sure we only re-start the arb session when required. ”h]”(j$)�”}”(hŒ``hw_state_invalidated``”h]”j*)�”}”(hjgÔh]”hŒhw_state_invalidated”…”�”}”(hjiÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjeÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KmhjaÔubj@)�”}”(hhh]”hÚ)�”}”(hŒáif the HW perceives an attack on the integrity of the encryption it will invalidate the keys and expect SW to re-initialize the session. We keep track of this state to make sure we only re-start the arb session when required.”h]”hŒáif the HW perceives an attack on the integrity of the encryption it will invalidate the keys and expect SW to re-initialize the session. We keep track of this state to make sure we only re-start the arb session when required.”…”�”}”(hj€Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´Kjhj}Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjaÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j|Ôh´KmhjOÑubj)�”}”(hŒ2``irq_enabled`` tracks the status of the kcr irqs ”h]”(j$)�”}”(hŒ``irq_enabled``”h]”j*)�”}”(hj¡Ôh]”hŒ irq_enabled”…”�”}”(hj£Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjŸÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´Kqhj›Ôubj@)�”}”(hhh]”hÚ)�”}”(hŒ!tracks the status of the kcr irqs”h]”hŒ!tracks the status of the kcr irqs”…”�”}”(hjºÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¶Ôh´Kqhj·Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj›Ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶Ôh´KqhjOÑubj)�”}”(hŒŒ``termination`` tracks the status of a pending termination. Only re-initialized under gt->irq_lock and completed in :c:type:`session_work`. ”h]”(j$)�”}”(hŒ``termination``”h]”j*)�”}”(hjÚÔh]”hŒ termination”…”�”}”(hjÜÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjØÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KuhjÔÔubj@)�”}”(hhh]”hÚ)�”}”(hŒ{tracks the status of a pending termination. Only re-initialized under gt->irq_lock and completed in :c:type:`session_work`.”h]”(hŒdtracks the status of a pending termination. Only re-initialized under gt->irq_lock and completed in ”…”�”}”(hjóÔh²hh³Nh´Nubh)�”}”(hŒ:c:type:`session_work`”h]”j*)�”}”(hjýÔh]”hŒ session_work”…”�”}”(hjÿÔh²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjûÔubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jùj’jŒ session_work”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KthjóÔubhŒ.”…”�”}”(hjóÔh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÕh´KthjðÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÔÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jïÔh´KuhjOÑubj)�”}”(hŒ5``session_work`` worker that manages session events. ”h]”(j$)�”}”(hŒ``session_work``”h]”j*)�”}”(hj7Õh]”hŒ session_work”…”�”}”(hj9Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj5Õubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´Kyhj1Õubj@)�”}”(hhh]”hÚ)�”}”(hŒ#worker that manages session events.”h]”hŒ#worker that manages session events.”…”�”}”(hjPÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jLÕh´KyhjMÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj1Õubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jLÕh´KyhjOÑubj)�”}”(hŒG``session_events`` pending session events, protected with gt->irq_lock.”h]”(j$)�”}”(hŒ``session_events``”h]”j*)�”}”(hjpÕh]”hŒsession_events”…”�”}”(hjrÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjnÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´KzhjjÕubj@)�”}”(hhh]”hÚ)�”}”(hŒ4pending session events, protected with gt->irq_lock.”h]”hŒ4pending session events, protected with gt->irq_lock.”…”�”}”(hj‰Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œd/var/lib/git/docbuild/linux/Documentation/gpu/i915:300: ./drivers/gpu/drm/i915/pxp/intel_pxp_types.h”h´K{hj†Õubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j…Õh´KzhjOÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjCÐh²hh³Nh´Nubeh}”(h]”Œprotected-objects”ah ]”h"]”Œprotected objects”ah$]”h&]”uh1hÄhj.bh²hh³hÃh´M'ubeh}”(h]”Œ(memory-management-and-command-submission”ah ]”h"]”Œ(memory management and command submission”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´KVubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒMicrocontrollers”h]”hŒMicrocontrollers”…”�”}”(hjÄÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjÁÕh²hh³hÃh´M/ubhÚ)�”}”(hXyStarting from gen9, three microcontrollers are available on the HW: the graphics microcontroller (GuC), the HEVC/H.265 microcontroller (HuC) and the display microcontroller (DMC). The driver is responsible for loading the firmwares on the microcontrollers; the GuC and HuC firmwares are transferred to WOPCM using the DMA engine, while the DMC firmware is written through MMIO.”h]”hXyStarting from gen9, three microcontrollers are available on the HW: the graphics microcontroller (GuC), the HEVC/H.265 microcontroller (HuC) and the display microcontroller (DMC). The driver is responsible for loading the firmwares on the microcontrollers; the GuC and HuC firmwares are transferred to WOPCM using the DMA engine, while the DMC firmware is written through MMIO.”…”�”}”(hjÒÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´M1hjÁÕh²hubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒWOPCM”h]”hŒWOPCM”…”�”}”(hjãÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjàÕh²hh³hÃh´M8ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ WOPCM Layout”h]”hŒ WOPCM Layout”…”�”}”(hjôÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjñÕh²hh³hÃh´M;ubhÚ)�”}”(hŒÜThe layout of the WOPCM will be fixed after writing to GuC WOPCM size and offset registers whose values are calculated and determined by HuC/GuC firmware size and set of hardware requirements/restrictions as shown below:”h]”hŒÜThe layout of the WOPCM will be fixed after writing to GuC WOPCM size and offset registers whose values are calculated and determined by HuC/GuC firmware size and set of hardware requirements/restrictions as shown below:”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:317: ./drivers/gpu/drm/i915/gt/intel_wopcm.c”h´K hjñÕh²hubjA#)�”}”(hX +=========> +====================+ <== WOPCM Top ^ | HW contexts RSVD | | +===> +====================+ <== GuC WOPCM Top | ^ | | | | | | | | | | | GuC | | | WOPCM | | | Size +--------------------+ WOPCM | | GuC FW RSVD | | | +--------------------+ | | | GuC Stack RSVD | | | +------------------- + | v | GuC WOPCM RSVD | | +===> +====================+ <== GuC WOPCM base | | WOPCM RSVD | | +------------------- + <== HuC Firmware Top v | HuC FW | +=========> +====================+ <== WOPCM Base”h]”hX +=========> +====================+ <== WOPCM Top ^ | HW contexts RSVD | | +===> +====================+ <== GuC WOPCM Top | ^ | | | | | | | | | | | GuC | | | WOPCM | | | Size +--------------------+ WOPCM | | GuC FW RSVD | | | +--------------------+ | | | GuC Stack RSVD | | | +------------------- + | v | GuC WOPCM RSVD | | +===> +====================+ <== GuC WOPCM base | | WOPCM RSVD | | +------------------- + <== HuC Firmware Top v | HuC FW | +=========> +====================+ <== WOPCM Base”…”�”}”hjÖsbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:317: ./drivers/gpu/drm/i915/gt/intel_wopcm.c”h´KhjñÕh²hubhÚ)�”}”(hŒ˜GuC accessible WOPCM starts at GuC WOPCM base and ends at GuC WOPCM top. The top part of the WOPCM is reserved for hardware contexts (e.g. RC6 context).”h]”hŒ˜GuC accessible WOPCM starts at GuC WOPCM base and ends at GuC WOPCM top. The top part of the WOPCM is reserved for hardware contexts (e.g. RC6 context).”…”�”}”(hj Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ_/var/lib/git/docbuild/linux/Documentation/gpu/i915:317: ./drivers/gpu/drm/i915/gt/intel_wopcm.c”h´K&hjñÕh²hubeh}”(h]”Œ wopcm-layout”ah ]”h"]”Œ wopcm layout”ah$]”h&]”uh1hÄhjàÕh²hh³hÃh´M;ubeh}”(h]”Œwopcm”ah ]”h"]”Œwopcm”ah$]”h&]”uh1hÄhjÁÕh²hh³hÃh´M8ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒGuC”h]”hŒGuC”…”�”}”(hjBÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj?Öh²hh³hÃh´MAubhÚ)�”}”(hŒØThe GuC is a microcontroller inside the GT HW, introduced in gen9. The GuC is designed to offload some of the functionality usually performed by the host driver; currently the main operations it can take care of are:”h]”hŒØThe GuC is a microcontroller inside the GT HW, introduced in gen9. The GuC is designed to offload some of the functionality usually performed by the host driver; currently the main operations it can take care of are:”…”�”}”(hjPÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:323: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´Khj?Öh²hubj°:)�”}”(hhh]”(jµ:)�”}”(hŒGAuthentication of the HuC, which is required to fully enable HuC usage.”h]”hÚ)�”}”(hjdÖh]”hŒGAuthentication of the HuC, which is required to fully enable HuC usage.”…”�”}”(hjfÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:323: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´KhjbÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj_Öubjµ:)�”}”(hŒ@Low latency graphics context scheduling (a.k.a. GuC submission).”h]”hÚ)�”}”(hj|Öh]”hŒ@Low latency graphics context scheduling (a.k.a. GuC submission).”…”�”}”(hj~Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:323: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´KhjzÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj_Öubjµ:)�”}”(hŒGT Power management. ”h]”hÚ)�”}”(hŒGT Power management.”h]”hŒGT Power management.”…”�”}”(hj–Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:323: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´Khj’Öubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj_Öubeh}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³jsÖh´Khj?Öh²hubhÚ)�”}”(hŒ¬The enable_guc module parameter can be used to select which of those operations to enable within GuC. Note that not all the operations are supported on all gen9+ platforms.”h]”hŒ¬The enable_guc module parameter can be used to select which of those operations to enable within GuC. Note that not all the operations are supported on all gen9+ platforms.”…”�”}”(hj±Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:323: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´K hj?Öh²hubhÚ)�”}”(hX Enabling the GuC is not mandatory and therefore the firmware is only loaded if at least one of the operations is selected. However, not loading the GuC might result in the loss of some features that do require the GuC (currently just the HuC, but more are expected to land in the future).”h]”hX Enabling the GuC is not mandatory and therefore the firmware is only loaded if at least one of the operations is selected. However, not loading the GuC might result in the loss of some features that do require the GuC (currently just the HuC, but more are expected to land in the future).”…”�”}”(hjÀÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:323: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´K$hj?Öh²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒintel_guc (C struct)”Œ c.intel_guc”hNt”auh1j¶hj?Öh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ intel_guc”h]”jÓ)�”}”(hŒstruct intel_guc”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjèÖh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjäÖh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Kubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjäÖh²hh³jõÖh´Kubj)�”}”(hŒ intel_guc”h]”jÜ)�”}”(hjâÖh]”hŒ intel_guc”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj×ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjäÖh²hh³jõÖh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjàÖh²hh³jõÖh´Kubah}”(h]”jÛÖah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jõÖh´KhjÝÖh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒTop level structure of GuC.”h]”hŒTop level structure of GuC.”…”�”}”(hj*×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Khj'×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÝÖh²hh³jõÖh´Kubeh}”(h]”h ]”(jóŒstruct”eh"]”h$]”h&]”jòjójójB×jôjB×jõ‰jö‰j÷‰uh1jÇh²hhj?Öh³Nh´Nubjù)�”}”(hX« **Definition**:: struct intel_guc { struct intel_uc_fw fw; struct intel_guc_log log; struct intel_guc_ct ct; struct intel_guc_slpc slpc; struct intel_guc_state_capture *capture; struct dentry *dbgfs_node; struct i915_sched_engine *sched_engine; struct i915_request *stalled_request; enum { STALL_NONE, STALL_REGISTER_CONTEXT, STALL_MOVE_LRC_TAIL, STALL_ADD_REQUEST, } submission_stall_reason; spinlock_t irq_lock; unsigned int msg_enabled_mask; atomic_t outstanding_submission_g2h; struct xarray tlb_lookup; u32 serial_slot; u32 next_seqno; struct { bool enabled; void (*reset)(struct intel_guc *guc); void (*enable)(struct intel_guc *guc); void (*disable)(struct intel_guc *guc); } interrupts; struct { spinlock_t lock; struct ida guc_ids; int num_guc_ids; unsigned long *guc_ids_bitmap; struct list_head guc_id_list; unsigned int guc_ids_in_use; struct list_head destroyed_contexts; struct work_struct destroyed_worker; struct work_struct reset_fail_worker; intel_engine_mask_t reset_fail_mask; unsigned int sched_disable_delay_ms; unsigned int sched_disable_gucid_threshold; } submission_state; bool submission_supported; bool submission_selected; bool submission_initialized; struct intel_uc_fw_ver submission_version; bool rc_supported; bool rc_selected; struct i915_vma *ads_vma; struct iosys_map ads_map; u32 ads_regset_size; u32 ads_regset_count[I915_NUM_ENGINES]; struct guc_mmio_reg *ads_regset; u32 ads_golden_ctxt_size; u32 ads_waklv_size; u32 ads_capture_size; struct i915_vma *lrc_desc_pool_v69; void *lrc_desc_pool_vaddr_v69; struct xarray context_lookup; u32 params[GUC_CTL_MAX_DWORDS]; struct { u32 base; unsigned int count; enum forcewake_domains fw_domains; } send_regs; i915_reg_t notify_reg; u32 mmio_msg; struct mutex send_mutex; struct { spinlock_t lock; u64 gt_stamp; unsigned long ping_delay; struct delayed_work work; u32 shift; unsigned long last_stat_jiffies; } timestamp; struct work_struct dead_guc_worker; unsigned long last_dead_guc_jiffies; #ifdef CONFIG_DRM_I915_SELFTEST; int number_guc_id_stolen; u32 fast_response_selftest; #endif; }; **Members** ``fw`` the GuC firmware ``log`` sub-structure containing GuC log related data and objects ``ct`` the command transport communication channel ``slpc`` sub-structure containing SLPC related data and objects ``capture`` the error-state-capture module's data and objects ``dbgfs_node`` debugfs node ``sched_engine`` Global engine used to submit requests to GuC ``stalled_request`` if GuC can't process a request for any reason, we save it until GuC restarts processing. No other request can be submitted until the stalled request is processed. ``submission_stall_reason`` reason why submission is stalled ``irq_lock`` protects GuC irq state ``msg_enabled_mask`` mask of events that are processed when receiving an INTEL_GUC_ACTION_DEFAULT G2H message. ``outstanding_submission_g2h`` number of outstanding GuC to Host responses related to GuC submission, used to determine if the GT is idle ``tlb_lookup`` xarray to store all pending TLB invalidation requests ``serial_slot`` id to the initial waiter created in tlb_lookup, which is used only when failed to allocate new waiter. ``next_seqno`` the next id (sequence number) to allocate. ``interrupts`` pointers to GuC interrupt-managing functions. ``submission_state`` sub-structure for submission state protected by single lock ``submission_state.lock`` protects everything in submission_state, ce->guc_id.id, and ce->guc_id.ref when transitioning in and out of zero ``submission_state.guc_ids`` used to allocate new guc_ids, single-lrc ``submission_state.num_guc_ids`` Number of guc_ids, selftest feature to be able to reduce this number while testing. ``submission_state.guc_ids_bitmap`` used to allocate new guc_ids, multi-lrc ``submission_state.guc_id_list`` list of intel_context with valid guc_ids but no refs ``submission_state.guc_ids_in_use`` Number single-lrc guc_ids in use ``submission_state.destroyed_contexts`` list of contexts waiting to be destroyed (deregistered with the GuC) ``submission_state.destroyed_worker`` worker to deregister contexts, need as we need to take a GT PM reference and can't from destroy function as it might be in an atomic context (no sleeping) ``submission_state.reset_fail_worker`` worker to trigger a GT reset after an engine reset fails ``submission_state.reset_fail_mask`` mask of engines that failed to reset ``submission_state.sched_disable_delay_ms`` schedule disable delay, in ms, for contexts ``submission_state.sched_disable_gucid_threshold`` threshold of min remaining available guc_ids before we start bypassing the schedule disable delay ``submission_supported`` tracks whether we support GuC submission on the current platform ``submission_selected`` tracks whether the user enabled GuC submission ``submission_initialized`` tracks whether GuC submission has been initialised ``submission_version`` Submission API version of the currently loaded firmware ``rc_supported`` tracks whether we support GuC rc on the current platform ``rc_selected`` tracks whether the user enabled GuC rc ``ads_vma`` object allocated to hold the GuC ADS ``ads_map`` contents of the GuC ADS ``ads_regset_size`` size of the save/restore regsets in the ADS ``ads_regset_count`` number of save/restore registers in the ADS for each engine ``ads_regset`` save/restore regsets in the ADS ``ads_golden_ctxt_size`` size of the golden contexts in the ADS ``ads_waklv_size`` size of workaround KLVs ``ads_capture_size`` size of register lists in the ADS used for error capture ``lrc_desc_pool_v69`` object allocated to hold the GuC LRC descriptor pool ``lrc_desc_pool_vaddr_v69`` contents of the GuC LRC descriptor pool ``context_lookup`` used to resolve intel_context from guc_id, if a context is present in this structure it is registered with the GuC ``params`` Control params for fw initialization ``send_regs`` GuC's FW specific registers used for sending MMIO H2G ``notify_reg`` register used to send interrupts to the GuC FW ``mmio_msg`` notification bitmask that the GuC writes in one of its registers when the CT channel is disabled, to be processed when the channel is back up. ``send_mutex`` used to serialize the intel_guc_send actions ``timestamp`` GT timestamp object that stores a copy of the timestamp and adjusts it for overflow using a worker. ``timestamp.lock`` Lock protecting the below fields and the engine stats. ``timestamp.gt_stamp`` 64-bit extended value of the GT timestamp. ``timestamp.ping_delay`` Period for polling the GT timestamp for overflow. ``timestamp.work`` Periodic work to adjust GT timestamp, engine and context usage for overflows. ``timestamp.shift`` Right shift value for the gpm timestamp ``timestamp.last_stat_jiffies`` jiffies at last actual stats collection time. We use this timestamp to ensure we don't oversample the stats because runtime power management events can trigger stats collection at much higher rates than required. ``dead_guc_worker`` Asynchronous worker thread for forcing a GuC reset. Specifically used when the G2H handler wants to issue a reset. Resets require flushing the G2H queue. So, the G2H processing itself must not trigger a reset directly. Instead, go via this worker. ``last_dead_guc_jiffies`` timestamp of previous 'dead guc' occurrence used to prevent a fundamentally broken system from continuously reloading the GuC. ``number_guc_id_stolen`` The number of guc_ids that have been stolen ``fast_response_selftest`` Backdoor to CT handler for fast response selftest”h]”(hÚ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjN×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjJ×ubhŒ:”…”�”}”(hjJ×h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K hjF×ubjA#)�”}”(hX² struct intel_guc { struct intel_uc_fw fw; struct intel_guc_log log; struct intel_guc_ct ct; struct intel_guc_slpc slpc; struct intel_guc_state_capture *capture; struct dentry *dbgfs_node; struct i915_sched_engine *sched_engine; struct i915_request *stalled_request; enum { STALL_NONE, STALL_REGISTER_CONTEXT, STALL_MOVE_LRC_TAIL, STALL_ADD_REQUEST, } submission_stall_reason; spinlock_t irq_lock; unsigned int msg_enabled_mask; atomic_t outstanding_submission_g2h; struct xarray tlb_lookup; u32 serial_slot; u32 next_seqno; struct { bool enabled; void (*reset)(struct intel_guc *guc); void (*enable)(struct intel_guc *guc); void (*disable)(struct intel_guc *guc); } interrupts; struct { spinlock_t lock; struct ida guc_ids; int num_guc_ids; unsigned long *guc_ids_bitmap; struct list_head guc_id_list; unsigned int guc_ids_in_use; struct list_head destroyed_contexts; struct work_struct destroyed_worker; struct work_struct reset_fail_worker; intel_engine_mask_t reset_fail_mask; unsigned int sched_disable_delay_ms; unsigned int sched_disable_gucid_threshold; } submission_state; bool submission_supported; bool submission_selected; bool submission_initialized; struct intel_uc_fw_ver submission_version; bool rc_supported; bool rc_selected; struct i915_vma *ads_vma; struct iosys_map ads_map; u32 ads_regset_size; u32 ads_regset_count[I915_NUM_ENGINES]; struct guc_mmio_reg *ads_regset; u32 ads_golden_ctxt_size; u32 ads_waklv_size; u32 ads_capture_size; struct i915_vma *lrc_desc_pool_v69; void *lrc_desc_pool_vaddr_v69; struct xarray context_lookup; u32 params[GUC_CTL_MAX_DWORDS]; struct { u32 base; unsigned int count; enum forcewake_domains fw_domains; } send_regs; i915_reg_t notify_reg; u32 mmio_msg; struct mutex send_mutex; struct { spinlock_t lock; u64 gt_stamp; unsigned long ping_delay; struct delayed_work work; u32 shift; unsigned long last_stat_jiffies; } timestamp; struct work_struct dead_guc_worker; unsigned long last_dead_guc_jiffies; #ifdef CONFIG_DRM_I915_SELFTEST; int number_guc_id_stolen; u32 fast_response_selftest; #endif; };”h]”hX² struct intel_guc { struct intel_uc_fw fw; struct intel_guc_log log; struct intel_guc_ct ct; struct intel_guc_slpc slpc; struct intel_guc_state_capture *capture; struct dentry *dbgfs_node; struct i915_sched_engine *sched_engine; struct i915_request *stalled_request; enum { STALL_NONE, STALL_REGISTER_CONTEXT, STALL_MOVE_LRC_TAIL, STALL_ADD_REQUEST, } submission_stall_reason; spinlock_t irq_lock; unsigned int msg_enabled_mask; atomic_t outstanding_submission_g2h; struct xarray tlb_lookup; u32 serial_slot; u32 next_seqno; struct { bool enabled; void (*reset)(struct intel_guc *guc); void (*enable)(struct intel_guc *guc); void (*disable)(struct intel_guc *guc); } interrupts; struct { spinlock_t lock; struct ida guc_ids; int num_guc_ids; unsigned long *guc_ids_bitmap; struct list_head guc_id_list; unsigned int guc_ids_in_use; struct list_head destroyed_contexts; struct work_struct destroyed_worker; struct work_struct reset_fail_worker; intel_engine_mask_t reset_fail_mask; unsigned int sched_disable_delay_ms; unsigned int sched_disable_gucid_threshold; } submission_state; bool submission_supported; bool submission_selected; bool submission_initialized; struct intel_uc_fw_ver submission_version; bool rc_supported; bool rc_selected; struct i915_vma *ads_vma; struct iosys_map ads_map; u32 ads_regset_size; u32 ads_regset_count[I915_NUM_ENGINES]; struct guc_mmio_reg *ads_regset; u32 ads_golden_ctxt_size; u32 ads_waklv_size; u32 ads_capture_size; struct i915_vma *lrc_desc_pool_v69; void *lrc_desc_pool_vaddr_v69; struct xarray context_lookup; u32 params[GUC_CTL_MAX_DWORDS]; struct { u32 base; unsigned int count; enum forcewake_domains fw_domains; } send_regs; i915_reg_t notify_reg; u32 mmio_msg; struct mutex send_mutex; struct { spinlock_t lock; u64 gt_stamp; unsigned long ping_delay; struct delayed_work work; u32 shift; unsigned long last_stat_jiffies; } timestamp; struct work_struct dead_guc_worker; unsigned long last_dead_guc_jiffies; #ifdef CONFIG_DRM_I915_SELFTEST; int number_guc_id_stolen; u32 fast_response_selftest; #endif; };”…”�”}”hjg×sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K"hjF×ubhÚ)�”}”(hŒ **Members**”h]”j)�”}”(hjx×h]”hŒMembers”…”�”}”(hjz×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjv×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KuhjF×ubj)�”}”(hhh]”(j)�”}”(hŒ``fw`` the GuC firmware ”h]”(j$)�”}”(hŒ``fw``”h]”j*)�”}”(hj—×h]”hŒfw”…”�”}”(hj™×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj•×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K#hj‘×ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe GuC firmware”h]”hŒthe GuC firmware”…”�”}”(hj°×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¬×h´K#hj­×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj‘×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¬×h´K#hjŽ×ubj)�”}”(hŒB``log`` sub-structure containing GuC log related data and objects ”h]”(j$)�”}”(hŒ``log``”h]”j*)�”}”(hjÐ×h]”hŒlog”…”�”}”(hjÒ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÎ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K%hjÊ×ubj@)�”}”(hhh]”hÚ)�”}”(hŒ9sub-structure containing GuC log related data and objects”h]”hŒ9sub-structure containing GuC log related data and objects”…”�”}”(hjé×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jå×h´K%hjæ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÊ×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jå×h´K%hjŽ×ubj)�”}”(hŒ3``ct`` the command transport communication channel ”h]”(j$)�”}”(hŒ``ct``”h]”j*)�”}”(hj Øh]”hŒct”…”�”}”(hj Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjØubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K'hjØubj@)�”}”(hhh]”hÚ)�”}”(hŒ+the command transport communication channel”h]”hŒ+the command transport communication channel”…”�”}”(hj"Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jØh´K'hjØubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØh´K'hjŽ×ubj)�”}”(hŒ@``slpc`` sub-structure containing SLPC related data and objects ”h]”(j$)�”}”(hŒ``slpc``”h]”j*)�”}”(hjBØh]”hŒslpc”…”�”}”(hjDØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj@Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K)hj<Øubj@)�”}”(hhh]”hÚ)�”}”(hŒ6sub-structure containing SLPC related data and objects”h]”hŒ6sub-structure containing SLPC related data and objects”…”�”}”(hj[Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jWØh´K)hjXØubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj<Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jWØh´K)hjŽ×ubj)�”}”(hŒ>``capture`` the error-state-capture module's data and objects ”h]”(j$)�”}”(hŒ ``capture``”h]”j*)�”}”(hj{Øh]”hŒcapture”…”�”}”(hj}Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjyØubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K+hjuØubj@)�”}”(hhh]”hÚ)�”}”(hŒ1the error-state-capture module's data and objects”h]”hŒ3the error-state-capture module’s data and objects”…”�”}”(hj”Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j�Øh´K+hj‘Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjuØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�Øh´K+hjŽ×ubj)�”}”(hŒ``dbgfs_node`` debugfs node ”h]”(j$)�”}”(hŒ``dbgfs_node``”h]”j*)�”}”(hj´Øh]”hŒ dbgfs_node”…”�”}”(hj¶Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj²Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K.hj®Øubj@)�”}”(hhh]”hÚ)�”}”(hŒ debugfs node”h]”hŒ debugfs node”…”�”}”(hjÍØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÉØh´K.hjÊØubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj®Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÉØh´K.hjŽ×ubj)�”}”(hŒ>``sched_engine`` Global engine used to submit requests to GuC ”h]”(j$)�”}”(hŒ``sched_engine``”h]”j*)�”}”(hjíØh]”hŒ sched_engine”…”�”}”(hjïØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjëØubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K1hjçØubj@)�”}”(hhh]”hÚ)�”}”(hŒ,Global engine used to submit requests to GuC”h]”hŒ,Global engine used to submit requests to GuC”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÙh´K1hjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjçØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÙh´K1hjŽ×ubj)�”}”(hŒ·``stalled_request`` if GuC can't process a request for any reason, we save it until GuC restarts processing. No other request can be submitted until the stalled request is processed. ”h]”(j$)�”}”(hŒ``stalled_request``”h]”j*)�”}”(hj&Ùh]”hŒstalled_request”…”�”}”(hj(Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj$Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K6hj Ùubj@)�”}”(hhh]”hÚ)�”}”(hŒ¢if GuC can't process a request for any reason, we save it until GuC restarts processing. No other request can be submitted until the stalled request is processed.”h]”hŒ¤if GuC can’t process a request for any reason, we save it until GuC restarts processing. No other request can be submitted until the stalled request is processed.”…”�”}”(hj?Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K4hj<Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj Ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;Ùh´K6hjŽ×ubj)�”}”(hŒ=``submission_stall_reason`` reason why submission is stalled ”h]”(j$)�”}”(hŒ``submission_stall_reason``”h]”j*)�”}”(hj`Ùh]”hŒsubmission_stall_reason”…”�”}”(hjbÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj^Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K:hjZÙubj@)�”}”(hhh]”hÚ)�”}”(hŒ reason why submission is stalled”h]”hŒ reason why submission is stalled”…”�”}”(hjyÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³juÙh´K:hjvÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjZÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³juÙh´K:hjŽ×ubj)�”}”(hŒ$``irq_lock`` protects GuC irq state ”h]”(j$)�”}”(hŒ ``irq_lock``”h]”j*)�”}”(hj™Ùh]”hŒirq_lock”…”�”}”(hj›Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj—Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KDhj“Ùubj@)�”}”(hhh]”hÚ)�”}”(hŒprotects GuC irq state”h]”hŒprotects GuC irq state”…”�”}”(hj²Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j®Ùh´KDhj¯Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj“Ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j®Ùh´KDhjŽ×ubj)�”}”(hŒo``msg_enabled_mask`` mask of events that are processed when receiving an INTEL_GUC_ACTION_DEFAULT G2H message. ”h]”(j$)�”}”(hŒ``msg_enabled_mask``”h]”j*)�”}”(hjÒÙh]”hŒmsg_enabled_mask”…”�”}”(hjÔÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÐÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KHhjÌÙubj@)�”}”(hhh]”hÚ)�”}”(hŒYmask of events that are processed when receiving an INTEL_GUC_ACTION_DEFAULT G2H message.”h]”hŒYmask of events that are processed when receiving an INTEL_GUC_ACTION_DEFAULT G2H message.”…”�”}”(hjëÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KGhjèÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÌÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jçÙh´KHhjŽ×ubj)�”}”(hŒŠ``outstanding_submission_g2h`` number of outstanding GuC to Host responses related to GuC submission, used to determine if the GT is idle ”h]”(j$)�”}”(hŒ``outstanding_submission_g2h``”h]”j*)�”}”(hj Úh]”hŒoutstanding_submission_g2h”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KOhjÚubj@)�”}”(hhh]”hÚ)�”}”(hŒjnumber of outstanding GuC to Host responses related to GuC submission, used to determine if the GT is idle”h]”hŒjnumber of outstanding GuC to Host responses related to GuC submission, used to determine if the GT is idle”…”�”}”(hj%Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KMhj"Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!Úh´KOhjŽ×ubj)�”}”(hŒE``tlb_lookup`` xarray to store all pending TLB invalidation requests ”h]”(j$)�”}”(hŒ``tlb_lookup``”h]”j*)�”}”(hjFÚh]”hŒ tlb_lookup”…”�”}”(hjHÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjDÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KShj@Úubj@)�”}”(hhh]”hÚ)�”}”(hŒ5xarray to store all pending TLB invalidation requests”h]”hŒ5xarray to store all pending TLB invalidation requests”…”�”}”(hj_Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j[Úh´KShj\Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj@Úubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[Úh´KShjŽ×ubj)�”}”(hŒw``serial_slot`` id to the initial waiter created in tlb_lookup, which is used only when failed to allocate new waiter. ”h]”(j$)�”}”(hŒ``serial_slot``”h]”j*)�”}”(hjÚh]”hŒ serial_slot”…”�”}”(hj�Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj}Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KXhjyÚubj@)�”}”(hhh]”hÚ)�”}”(hŒfid to the initial waiter created in tlb_lookup, which is used only when failed to allocate new waiter.”h]”hŒfid to the initial waiter created in tlb_lookup, which is used only when failed to allocate new waiter.”…”�”}”(hj˜Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KWhj•Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjyÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j”Úh´KXhjŽ×ubj)�”}”(hŒ:``next_seqno`` the next id (sequence number) to allocate. ”h]”(j$)�”}”(hŒ``next_seqno``”h]”j*)�”}”(hj¹Úh]”hŒ next_seqno”…”�”}”(hj»Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj·Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K\hj³Úubj@)�”}”(hhh]”hÚ)�”}”(hŒ*the next id (sequence number) to allocate.”h]”hŒ*the next id (sequence number) to allocate.”…”�”}”(hjÒÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÎÚh´K\hjÏÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj³Úubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÎÚh´K\hjŽ×ubj)�”}”(hŒ=``interrupts`` pointers to GuC interrupt-managing functions. ”h]”(j$)�”}”(hŒ``interrupts``”h]”j*)�”}”(hjòÚh]”hŒ interrupts”…”�”}”(hjôÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjðÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K_hjìÚubj@)�”}”(hhh]”hÚ)�”}”(hŒ-pointers to GuC interrupt-managing functions.”h]”hŒ-pointers to GuC interrupt-managing functions.”…”�”}”(hj Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÛh´K_hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjìÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÛh´K_hjŽ×ubj)�”}”(hŒQ``submission_state`` sub-structure for submission state protected by single lock ”h]”(j$)�”}”(hŒ``submission_state``”h]”j*)�”}”(hj+Ûh]”hŒsubmission_state”…”�”}”(hj-Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj)Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Kihj%Ûubj@)�”}”(hhh]”hÚ)�”}”(hŒ;sub-structure for submission state protected by single lock”h]”hŒ;sub-structure for submission state protected by single lock”…”�”}”(hjDÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KhhjAÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj%Ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@Ûh´KihjŽ×ubj)�”}”(hŒ‹``submission_state.lock`` protects everything in submission_state, ce->guc_id.id, and ce->guc_id.ref when transitioning in and out of zero ”h]”(j$)�”}”(hŒ``submission_state.lock``”h]”j*)�”}”(hjeÛh]”hŒsubmission_state.lock”…”�”}”(hjgÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjcÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Kohj_Ûubj@)�”}”(hhh]”hÚ)�”}”(hŒpprotects everything in submission_state, ce->guc_id.id, and ce->guc_id.ref when transitioning in and out of zero”h]”hŒpprotects everything in submission_state, ce->guc_id.id, and ce->guc_id.ref when transitioning in and out of zero”…”�”}”(hj~Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Kmhj{Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj_Ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jzÛh´KohjŽ×ubj)�”}”(hŒF``submission_state.guc_ids`` used to allocate new guc_ids, single-lrc ”h]”(j$)�”}”(hŒ``submission_state.guc_ids``”h]”j*)�”}”(hjŸÛh]”hŒsubmission_state.guc_ids”…”�”}”(hj¡Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj�Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Kthj™Ûubj@)�”}”(hhh]”hÚ)�”}”(hŒ(used to allocate new guc_ids, single-lrc”h]”hŒ(used to allocate new guc_ids, single-lrc”…”�”}”(hj¸Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KshjµÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj™Ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´Ûh´KthjŽ×ubj)�”}”(hŒu``submission_state.num_guc_ids`` Number of guc_ids, selftest feature to be able to reduce this number while testing. ”h]”(j$)�”}”(hŒ ``submission_state.num_guc_ids``”h]”j*)�”}”(hjÙÛh]”hŒsubmission_state.num_guc_ids”…”�”}”(hjÛÛh²hh³Nh´Nubah}”(•h]”h ]”h"]”h$]”h&]”uh1j)hj×Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KyhjÓÛubj@)�”}”(hhh]”hÚ)�”}”(hŒSNumber of guc_ids, selftest feature to be able to reduce this number while testing.”h]”hŒSNumber of guc_ids, selftest feature to be able to reduce this number while testing.”…”�”}”(hjòÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KxhjïÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÓÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jîÛh´KyhjŽ×ubj)�”}”(hŒL``submission_state.guc_ids_bitmap`` used to allocate new guc_ids, multi-lrc ”h]”(j$)�”}”(hŒ#``submission_state.guc_ids_bitmap``”h]”j*)�”}”(hjÜh]”hŒsubmission_state.guc_ids_bitmap”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K~hj Üubj@)�”}”(hhh]”hÚ)�”}”(hŒ'used to allocate new guc_ids, multi-lrc”h]”hŒ'used to allocate new guc_ids, multi-lrc”…”�”}”(hj,Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K}hj)Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(Üh´K~hjŽ×ubj)�”}”(hŒV``submission_state.guc_id_list`` list of intel_context with valid guc_ids but no refs ”h]”(j$)�”}”(hŒ ``submission_state.guc_id_list``”h]”j*)�”}”(hjMÜh]”hŒsubmission_state.guc_id_list”…”�”}”(hjOÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjKÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KƒhjGÜubj@)�”}”(hhh]”hÚ)�”}”(hŒ4list of intel_context with valid guc_ids but no refs”h]”hŒ4list of intel_context with valid guc_ids but no refs”…”�”}”(hjfÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K‚hjcÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjGÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jbÜh´KƒhjŽ×ubj)�”}”(hŒE``submission_state.guc_ids_in_use`` Number single-lrc guc_ids in use ”h]”(j$)�”}”(hŒ#``submission_state.guc_ids_in_use``”h]”j*)�”}”(hj‡Üh]”hŒsubmission_state.guc_ids_in_use”…”�”}”(hj‰Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj…Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Kˆhj�Üubj@)�”}”(hhh]”hÚ)�”}”(hŒ Number single-lrc guc_ids in use”h]”hŒ Number single-lrc guc_ids in use”…”�”}”(hj Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K‡hj�Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj�Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jœÜh´KˆhjŽ×ubj)�”}”(hŒm``submission_state.destroyed_contexts`` list of contexts waiting to be destroyed (deregistered with the GuC) ”h]”(j$)�”}”(hŒ'``submission_state.destroyed_contexts``”h]”j*)�”}”(hjÁÜh]”hŒ#submission_state.destroyed_contexts”…”�”}”(hjÃÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¿Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K�hj»Üubj@)�”}”(hhh]”hÚ)�”}”(hŒDlist of contexts waiting to be destroyed (deregistered with the GuC)”h]”hŒDlist of contexts waiting to be destroyed (deregistered with the GuC)”…”�”}”(hjÚÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KŒhj×Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj»Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÖÜh´K�hjŽ×ubj)�”}”(hŒÁ``submission_state.destroyed_worker`` worker to deregister contexts, need as we need to take a GT PM reference and can't from destroy function as it might be in an atomic context (no sleeping) ”h]”(j$)�”}”(hŒ%``submission_state.destroyed_worker``”h]”j*)�”}”(hjûÜh]”hŒ!submission_state.destroyed_worker”…”�”}”(hjýÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjùÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K”hjõÜubj@)�”}”(hhh]”hÚ)�”}”(hŒšworker to deregister contexts, need as we need to take a GT PM reference and can't from destroy function as it might be in an atomic context (no sleeping)”h]”hŒœworker to deregister contexts, need as we need to take a GT PM reference and can’t from destroy function as it might be in an atomic context (no sleeping)”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K‘hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjõÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝh´K”hjŽ×ubj)�”}”(hŒ```submission_state.reset_fail_worker`` worker to trigger a GT reset after an engine reset fails ”h]”(j$)�”}”(hŒ&``submission_state.reset_fail_worker``”h]”j*)�”}”(hj5Ýh]”hŒ"submission_state.reset_fail_worker”…”�”}”(hj7Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj3Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K™hj/Ýubj@)�”}”(hhh]”hÚ)�”}”(hŒ8worker to trigger a GT reset after an engine reset fails”h]”hŒ8worker to trigger a GT reset after an engine reset fails”…”�”}”(hjNÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K˜hjKÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj/Ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jJÝh´K™hjŽ×ubj)�”}”(hŒJ``submission_state.reset_fail_mask`` mask of engines that failed to reset ”h]”(j$)�”}”(hŒ$``submission_state.reset_fail_mask``”h]”j*)�”}”(hjoÝh]”hŒ submission_state.reset_fail_mask”…”�”}”(hjqÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjmÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KžhjiÝubj@)�”}”(hhh]”hÚ)�”}”(hŒ$mask of engines that failed to reset”h]”hŒ$mask of engines that failed to reset”…”�”}”(hjˆÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K�hj…Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjiÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j„Ýh´KžhjŽ×ubj)�”}”(hŒX``submission_state.sched_disable_delay_ms`` schedule disable delay, in ms, for contexts ”h]”(j$)�”}”(hŒ+``submission_state.sched_disable_delay_ms``”h]”j*)�”}”(hj©Ýh]”hŒ'submission_state.sched_disable_delay_ms”…”�”}”(hj«Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj§Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K£hj£Ýubj@)�”}”(hhh]”hÚ)�”}”(hŒ+schedule disable delay, in ms, for contexts”h]”hŒ+schedule disable delay, in ms, for contexts”…”�”}”(hjÂÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K¢hj¿Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj£Ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¾Ýh´K£hjŽ×ubj)�”}”(hŒ•``submission_state.sched_disable_gucid_threshold`` threshold of min remaining available guc_ids before we start bypassing the schedule disable delay ”h]”(j$)�”}”(hŒ2``submission_state.sched_disable_gucid_threshold``”h]”j*)�”}”(hjãÝh]”hŒ.submission_state.sched_disable_gucid_threshold”…”�”}”(hjåÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjáÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K¨hjÝÝubj@)�”}”(hhh]”hÚ)�”}”(hŒathreshold of min remaining available guc_ids before we start bypassing the schedule disable delay”h]”hŒathreshold of min remaining available guc_ids before we start bypassing the schedule disable delay”…”�”}”(hjüÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K§hjùÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÝÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jøÝh´K¨hjŽ×ubj)�”}”(hŒZ``submission_supported`` tracks whether we support GuC submission on the current platform ”h]”(j$)�”}”(hŒ``submission_supported``”h]”j*)�”}”(hjÞh]”hŒsubmission_supported”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K°hjÞubj@)�”}”(hhh]”hÚ)�”}”(hŒ@tracks whether we support GuC submission on the current platform”h]”hŒ@tracks whether we support GuC submission on the current platform”…”�”}”(hj6Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K¯hj3Þubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j2Þh´K°hjŽ×ubj)�”}”(hŒG``submission_selected`` tracks whether the user enabled GuC submission ”h]”(j$)�”}”(hŒ``submission_selected``”h]”j*)�”}”(hjWÞh]”hŒsubmission_selected”…”�”}”(hjYÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjUÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K³hjQÞubj@)�”}”(hhh]”hÚ)�”}”(hŒ.tracks whether the user enabled GuC submission”h]”hŒ.tracks whether the user enabled GuC submission”…”�”}”(hjpÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jlÞh´K³hjmÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjQÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jlÞh´K³hjŽ×ubj)�”}”(hŒN``submission_initialized`` tracks whether GuC submission has been initialised ”h]”(j$)�”}”(hŒ``submission_initialized``”h]”j*)�”}”(hj�Þh]”hŒsubmission_initialized”…”�”}”(hj’Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjŽÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KµhjŠÞubj@)�”}”(hhh]”hÚ)�”}”(hŒ2tracks whether GuC submission has been initialised”h]”hŒ2tracks whether GuC submission has been initialised”…”�”}”(hj©Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¥Þh´Kµhj¦Þubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjŠÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥Þh´KµhjŽ×ubj)�”}”(hŒO``submission_version`` Submission API version of the currently loaded firmware ”h]”(j$)�”}”(hŒ``submission_version``”h]”j*)�”}”(hjÉÞh]”hŒsubmission_version”…”�”}”(hjËÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÇÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K·hjÃÞubj@)�”}”(hhh]”hÚ)�”}”(hŒ7Submission API version of the currently loaded firmware”h]”hŒ7Submission API version of the currently loaded firmware”…”�”}”(hjâÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÞÞh´K·hjßÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÃÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÞÞh´K·hjŽ×ubj)�”}”(hŒJ``rc_supported`` tracks whether we support GuC rc on the current platform ”h]”(j$)�”}”(hŒ``rc_supported``”h]”j*)�”}”(hjßh]”hŒ rc_supported”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K»hjüÞubj@)�”}”(hhh]”hÚ)�”}”(hŒ8tracks whether we support GuC rc on the current platform”h]”hŒ8tracks whether we support GuC rc on the current platform”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jßh´K»hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjüÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jßh´K»hjŽ×ubj)�”}”(hŒ7``rc_selected`` tracks whether the user enabled GuC rc ”h]”(j$)�”}”(hŒ``rc_selected``”h]”j*)�”}”(hj;ßh]”hŒ rc_selected”…”�”}”(hj=ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj9ßubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K¾hj5ßubj@)�”}”(hhh]”hÚ)�”}”(hŒ&tracks whether the user enabled GuC rc”h]”hŒ&tracks whether the user enabled GuC rc”…”�”}”(hjTßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jPßh´K¾hjQßubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj5ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jPßh´K¾hjŽ×ubj)�”}”(hŒ1``ads_vma`` object allocated to hold the GuC ADS ”h]”(j$)�”}”(hŒ ``ads_vma``”h]”j*)�”}”(hjtßh]”hŒads_vma”…”�”}”(hjvßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjrßubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KÁhjnßubj@)�”}”(hhh]”hÚ)�”}”(hŒ$object allocated to hold the GuC ADS”h]”hŒ$object allocated to hold the GuC ADS”…”�”}”(hj�ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j‰ßh´KÁhjŠßubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjnßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‰ßh´KÁhjŽ×ubj)�”}”(hŒ$``ads_map`` contents of the GuC ADS ”h]”(j$)�”}”(hŒ ``ads_map``”h]”j*)�”}”(hj­ßh]”hŒads_map”…”�”}”(hj¯ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj«ßubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KÃhj§ßubj@)�”}”(hhh]”hÚ)�”}”(hŒcontents of the GuC ADS”h]”hŒcontents of the GuC ADS”…”�”}”(hjÆßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÂßh´KÃhjÃßubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj§ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÂßh´KÃhjŽ×ubj)�”}”(hŒ@``ads_regset_size`` size of the save/restore regsets in the ADS ”h]”(j$)�”}”(hŒ``ads_regset_size``”h]”j*)�”}”(hjæßh]”hŒads_regset_size”…”�”}”(hjèßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjäßubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KÅhjàßubj@)�”}”(hhh]”hÚ)�”}”(hŒ+size of the save/restore regsets in the ADS”h]”hŒ+size of the save/restore regsets in the ADS”…”�”}”(hjÿßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jûßh´KÅhjüßubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjàßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jûßh´KÅhjŽ×ubj)�”}”(hŒQ``ads_regset_count`` number of save/restore registers in the ADS for each engine ”h]”(j$)�”}”(hŒ``ads_regset_count``”h]”j*)�”}”(hjàh]”hŒads_regset_count”…”�”}”(hj!àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KÉhjàubj@)�”}”(hhh]”hÚ)�”}”(hŒ;number of save/restore registers in the ADS for each engine”h]”hŒ;number of save/restore registers in the ADS for each engine”…”�”}”(hj8àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KÈhj5àubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j4àh´KÉhjŽ×ubj)�”}”(hŒ/``ads_regset`` save/restore regsets in the ADS ”h]”(j$)�”}”(hŒ``ads_regset``”h]”j*)�”}”(hjYàh]”hŒ ads_regset”…”�”}”(hj[àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjWàubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KÌhjSàubj@)�”}”(hhh]”hÚ)�”}”(hŒsave/restore regsets in the ADS”h]”hŒsave/restore regsets in the ADS”…”�”}”(hjràh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jnàh´KÌhjoàubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjSàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jnàh´KÌhjŽ×ubj)�”}”(hŒ@``ads_golden_ctxt_size`` size of the golden contexts in the ADS ”h]”(j$)�”}”(hŒ``ads_golden_ctxt_size``”h]”j*)�”}”(hj’àh]”hŒads_golden_ctxt_size”…”�”}”(hj”àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj�àubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KÎhjŒàubj@)�”}”(hhh]”hÚ)�”}”(hŒ&size of the golden contexts in the ADS”h]”hŒ&size of the golden contexts in the ADS”…”�”}”(hj«àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j§àh´KÎhj¨àubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjŒàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j§àh´KÎhjŽ×ubj)�”}”(hŒ+``ads_waklv_size`` size of workaround KLVs ”h]”(j$)�”}”(hŒ``ads_waklv_size``”h]”j*)�”}”(hjËàh]”hŒads_waklv_size”…”�”}”(hjÍàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÉàubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KÐhjÅàubj@)�”}”(hhh]”hÚ)�”}”(hŒsize of workaround KLVs”h]”hŒsize of workaround KLVs”…”�”}”(hjäàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jààh´KÐhjáàubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÅàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jààh´KÐhjŽ×ubj)�”}”(hŒN``ads_capture_size`` size of register lists in the ADS used for error capture ”h]”(j$)�”}”(hŒ``ads_capture_size``”h]”j*)�”}”(hjáh]”hŒads_capture_size”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KÒhjþàubj@)�”}”(hhh]”hÚ)�”}”(hŒ8size of register lists in the ADS used for error capture”h]”hŒ8size of register lists in the ADS used for error capture”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jáh´KÒhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjþàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jáh´KÒhjŽ×ubj)�”}”(hŒK``lrc_desc_pool_v69`` object allocated to hold the GuC LRC descriptor pool ”h]”(j$)�”}”(hŒ``lrc_desc_pool_v69``”h]”j*)�”}”(hj=áh]”hŒlrc_desc_pool_v69”…”�”}”(hj?áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj;áubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KÕhj7áubj@)�”}”(hhh]”hÚ)�”}”(hŒ4object allocated to hold the GuC LRC descriptor pool”h]”hŒ4object allocated to hold the GuC LRC descriptor pool”…”�”}”(hjVáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jRáh´KÕhjSáubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj7áubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jRáh´KÕhjŽ×ubj)�”}”(hŒD``lrc_desc_pool_vaddr_v69`` contents of the GuC LRC descriptor pool ”h]”(j$)�”}”(hŒ``lrc_desc_pool_vaddr_v69``”h]”j*)�”}”(hjváh]”hŒlrc_desc_pool_vaddr_v69”…”�”}”(hjxáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjtáubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´K×hjpáubj@)�”}”(hhh]”hÚ)�”}”(hŒ'contents of the GuC LRC descriptor pool”h]”hŒ'contents of the GuC LRC descriptor pool”…”�”}”(hj�áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j‹áh´K×hjŒáubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjpáubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‹áh´K×hjŽ×ubj)�”}”(hŒ†``context_lookup`` used to resolve intel_context from guc_id, if a context is present in this structure it is registered with the GuC ”h]”(j$)�”}”(hŒ``context_lookup``”h]”j*)�”}”(hj¯áh]”hŒcontext_lookup”…”�”}”(hj±áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj­áubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KÜhj©áubj@)�”}”(hhh]”hÚ)�”}”(hŒrused to resolve intel_context from guc_id, if a context is present in this structure it is registered with the GuC”h]”hŒrused to resolve intel_context from guc_id, if a context is present in this structure it is registered with the GuC”…”�”}”(hjÈáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KÛhjÅáubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj©áubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÄáh´KÜhjŽ×ubj)�”}”(hŒ0``params`` Control params for fw initialization ”h]”(j$)�”}”(hŒ ``params``”h]”j*)�”}”(hjéáh]”hŒparams”…”�”}”(hjëáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjçáubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Kàhjãáubj@)�”}”(hhh]”hÚ)�”}”(hŒ$Control params for fw initialization”h]”hŒ$Control params for fw initialization”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jþáh´Kàhjÿáubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjãáubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jþáh´KàhjŽ×ubj)�”}”(hŒD``send_regs`` GuC's FW specific registers used for sending MMIO H2G ”h]”(j$)�”}”(hŒ ``send_regs``”h]”j*)�”}”(hj"âh]”hŒ send_regs”…”�”}”(hj$âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj âubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Kãhjâubj@)�”}”(hhh]”hÚ)�”}”(hŒ5GuC's FW specific registers used for sending MMIO H2G”h]”hŒ7GuC’s FW specific registers used for sending MMIO H2G”…”�”}”(hj;âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j7âh´Kãhj8âubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7âh´KãhjŽ×ubj)�”}”(hŒ>``notify_reg`` register used to send interrupts to the GuC FW ”h]”(j$)�”}”(hŒ``notify_reg``”h]”j*)�”}”(hj[âh]”hŒ notify_reg”…”�”}”(hj]âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjYâubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KêhjUâubj@)�”}”(hhh]”hÚ)�”}”(hŒ.register used to send interrupts to the GuC FW”h]”hŒ.register used to send interrupts to the GuC FW”…”�”}”(hjtâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jpâh´Kêhjqâubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjUâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jpâh´KêhjŽ×ubj)�”}”(hŒœ``mmio_msg`` notification bitmask that the GuC writes in one of its registers when the CT channel is disabled, to be processed when the channel is back up. ”h]”(j$)�”}”(hŒ ``mmio_msg``”h]”j*)�”}”(hj”âh]”hŒmmio_msg”…”�”}”(hj–âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj’âubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KðhjŽâubj@)�”}”(hhh]”hÚ)�”}”(hŒŽnotification bitmask that the GuC writes in one of its registers when the CT channel is disabled, to be processed when the channel is back up.”h]”hŒŽnotification bitmask that the GuC writes in one of its registers when the CT channel is disabled, to be processed when the channel is back up.”…”�”}”(hj­âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Kîhjªâubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjŽâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©âh´KðhjŽ×ubj)�”}”(hŒ<``send_mutex`` used to serialize the intel_guc_send actions ”h]”(j$)�”}”(hŒ``send_mutex``”h]”j*)�”}”(hjÎâh]”hŒ send_mutex”…”�”}”(hjÐâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÌâubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KôhjÈâubj@)�”}”(hhh]”hÚ)�”}”(hŒ,used to serialize the intel_guc_send actions”h]”hŒ,used to serialize the intel_guc_send actions”…”�”}”(hjçâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jãâh´Kôhjäâubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÈâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jãâh´KôhjŽ×ubj)�”}”(hŒr``timestamp`` GT timestamp object that stores a copy of the timestamp and adjusts it for overflow using a worker. ”h]”(j$)�”}”(hŒ ``timestamp``”h]”j*)�”}”(hjãh]”hŒ timestamp”…”�”}”(hj ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Kùhjãubj@)�”}”(hhh]”hÚ)�”}”(hŒcGT timestamp object that stores a copy of the timestamp and adjusts it for overflow using a worker.”h]”hŒcGT timestamp object that stores a copy of the timestamp and adjusts it for overflow using a worker.”…”�”}”(hj ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Køhjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jãh´KùhjŽ×ubj)�”}”(hŒJ``timestamp.lock`` Lock protecting the below fields and the engine stats. ”h]”(j$)�”}”(hŒ``timestamp.lock``”h]”j*)�”}”(hjAãh]”hŒtimestamp.lock”…”�”}”(hjCãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj?ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Kþhj;ãubj@)�”}”(hhh]”hÚ)�”}”(hŒ6Lock protecting the below fields and the engine stats.”h]”hŒ6Lock protecting the below fields and the engine stats.”…”�”}”(hjZãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´KýhjWãubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj;ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jVãh´KþhjŽ×ubj)�”}”(hŒB``timestamp.gt_stamp`` 64-bit extended value of the GT timestamp. ”h]”(j$)�”}”(hŒ``timestamp.gt_stamp``”h]”j*)�”}”(hj{ãh]”hŒtimestamp.gt_stamp”…”�”}”(hj}ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjyãubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Mhjuãubj@)�”}”(hhh]”hÚ)�”}”(hŒ*64-bit extended value of the GT timestamp.”h]”hŒ*64-bit extended value of the GT timestamp.”…”�”}”(hj”ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Mhj‘ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjuãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�ãh´MhjŽ×ubj)�”}”(hŒK``timestamp.ping_delay`` Period for polling the GT timestamp for overflow. ”h]”(j$)�”}”(hŒ``timestamp.ping_delay``”h]”j*)�”}”(hjµãh]”hŒtimestamp.ping_delay”…”�”}”(hj·ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj³ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M hj¯ãubj@)�”}”(hhh]”hÚ)�”}”(hŒ1Period for polling the GT timestamp for overflow.”h]”hŒ1Period for polling the GT timestamp for overflow.”…”�”}”(hjÎãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M hjËãubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¯ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÊãh´M hjŽ×ubj)�”}”(hŒa``timestamp.work`` Periodic work to adjust GT timestamp, engine and context usage for overflows. ”h]”(j$)�”}”(hŒ``timestamp.work``”h]”j*)�”}”(hjïãh]”hŒtimestamp.work”…”�”}”(hjñãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjíãubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Mhjéãubj@)�”}”(hhh]”hÚ)�”}”(hŒMPeriodic work to adjust GT timestamp, engine and context usage for overflows.”h]”hŒMPeriodic work to adjust GT timestamp, engine and context usage for overflows.”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Mhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjéãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jäh´MhjŽ×ubj)�”}”(hŒ<``timestamp.shift`` Right shift value for the gpm timestamp ”h]”(j$)�”}”(hŒ``timestamp.shift``”h]”j*)�”}”(hj)äh]”hŒtimestamp.shift”…”�”}”(hj+äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj'äubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Mhj#äubj@)�”}”(hhh]”hÚ)�”}”(hŒ'Right shift value for the gpm timestamp”h]”hŒ'Right shift value for the gpm timestamp”…”�”}”(hjBäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j>äh´Mhj?äubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj#äubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j>äh´MhjŽ×ubj)�”}”(hŒõ``timestamp.last_stat_jiffies`` jiffies at last actual stats collection time. We use this timestamp to ensure we don't oversample the stats because runtime power management events can trigger stats collection at much higher rates than required. ”h]”(j$)�”}”(hŒ``timestamp.last_stat_jiffies``”h]”j*)�”}”(hjbäh]”hŒtimestamp.last_stat_jiffies”…”�”}”(hjdäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj`äubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Mhj\äubj@)�”}”(hhh]”hÚ)�”}”(hŒÔjiffies at last actual stats collection time. We use this timestamp to ensure we don't oversample the stats because runtime power management events can trigger stats collection at much higher rates than required.”h]”hŒÖjiffies at last actual stats collection time. We use this timestamp to ensure we don’t oversample the stats because runtime power management events can trigger stats collection at much higher rates than required.”…”�”}”(hj{äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Mhjxäubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj\äubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jwäh´MhjŽ×ubj)�”}”(hX ``dead_guc_worker`` Asynchronous worker thread for forcing a GuC reset. Specifically used when the G2H handler wants to issue a reset. Resets require flushing the G2H queue. So, the G2H processing itself must not trigger a reset directly. Instead, go via this worker. ”h]”(j$)�”}”(hŒ``dead_guc_worker``”h]”j*)�”}”(hjœäh]”hŒdead_guc_worker”…”�”}”(hjžäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjšäubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M'hj–äubj@)�”}”(hhh]”hÚ)�”}”(hŒ÷Asynchronous worker thread for forcing a GuC reset. Specifically used when the G2H handler wants to issue a reset. Resets require flushing the G2H queue. So, the G2H processing itself must not trigger a reset directly. Instead, go via this worker.”h]”hŒ÷Asynchronous worker thread for forcing a GuC reset. Specifically used when the G2H handler wants to issue a reset. Resets require flushing the G2H queue. So, the G2H processing itself must not trigger a reset directly. Instead, go via this worker.”…”�”}”(hjµäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M$hj²äubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj–äubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±äh´M'hjŽ×ubj)�”}”(hŒ™``last_dead_guc_jiffies`` timestamp of previous 'dead guc' occurrence used to prevent a fundamentally broken system from continuously reloading the GuC. ”h]”(j$)�”}”(hŒ``last_dead_guc_jiffies``”h]”j*)�”}”(hjÖäh]”hŒlast_dead_guc_jiffies”…”�”}”(hjØäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÔäubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M-hjÐäubj@)�”}”(hhh]”hÚ)�”}”(hŒ~timestamp of previous 'dead guc' occurrence used to prevent a fundamentally broken system from continuously reloading the GuC.”h]”hŒ‚timestamp of previous ‘dead guc’ occurrence used to prevent a fundamentally broken system from continuously reloading the GuC.”…”�”}”(hjïäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M+hjìäubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÐäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jëäh´M-hjŽ×ubj)�”}”(hŒE``number_guc_id_stolen`` The number of guc_ids that have been stolen ”h]”(j$)�”}”(hŒ``number_guc_id_stolen``”h]”j*)�”}”(hjåh]”hŒnumber_guc_id_stolen”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M3hj åubj@)�”}”(hhh]”hÚ)�”}”(hŒ+The number of guc_ids that have been stolen”h]”hŒ+The number of guc_ids that have been stolen”…”�”}”(hj)åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j%åh´M3hj&åubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj åubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j%åh´M3hjŽ×ubj)�”}”(hŒL``fast_response_selftest`` Backdoor to CT handler for fast response selftest”h]”(j$)�”}”(hŒ``fast_response_selftest``”h]”j*)�”}”(hjIåh]”hŒfast_response_selftest”…”�”}”(hjKåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjGåubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M6hjCåubj@)�”}”(hhh]”hÚ)�”}”(hŒ1Backdoor to CT handler for fast response selftest”h]”hŒ1Backdoor to CT handler for fast response selftest”…”�”}”(hjbåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M7hj_åubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjCåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j^åh´M6hjŽ×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjF×ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj?Öh²hh³Nh´NubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjŒåh]”hŒ Description”…”�”}”(hjŽåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠåubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M:hj?Öh²hubhÚ)�”}”(hŒhIt handles firmware loading and manages client pool. intel_guc owns an i915_sched_engine for submission.”h]”hŒhIt handles firmware loading and manages client pool. intel_guc owns an i915_sched_engine for submission.”…”�”}”(hj¢åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Khj?Öh²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ"intel_guc_ggtt_offset (C function)”Œc.intel_guc_ggtt_offset”hNt”auh1j¶hj?Öh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒGu32 intel_guc_ggtt_offset (struct intel_guc *guc, struct i915_vma *vma)”h]”jÓ)�”}”(hŒFu32 intel_guc_ggtt_offset(struct intel_guc *guc, struct i915_vma *vma)”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjÍåh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÊåubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÏåŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõŒintel_guc_ggtt_offset”sbŒc.intel_guc_ggtt_offset”†”asbuh1hhjÆåh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M”ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïåh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÆåh²hh³jîåh´M”ubj)�”}”(hŒintel_guc_ggtt_offset”h]”jÜ)�”}”(hjëåh]”hŒintel_guc_ggtt_offset”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjýåubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÆåh²hh³jîåh´M”ubj8)�”}”(hŒ-(struct intel_guc *guc, struct i915_vma *vma)”h]”(j>)�”}”(hŒstruct intel_guc *guc”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjæubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)æh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjæubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_guc”h]”hŒ intel_guc”…”�”}”(hj:æh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj7æubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j<æŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jéåŒc.intel_guc_ggtt_offset”†”asbuh1hhjæubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXæh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjæubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjfæh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjæubjÜ)�”}”(hŒguc”h]”hŒguc”…”�”}”(hjsæh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjæubj>)�”}”(hŒstruct i915_vma *vma”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjŒæh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjˆæubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™æh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjˆæubh)�”}”(hhh]”jÜ)�”}”(hŒi915_vma”h]”hŒi915_vma”…”�”}”(hjªæh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj§æubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j¬æŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jéåŒc.intel_guc_ggtt_offset”†”asbuh1hhjˆæubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈæh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjˆæubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÖæh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjˆæubjÜ)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjãæh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjˆæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjæubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÆåh²hh³jîåh´M”ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÂåh²hh³jîåh´M”ubah}”(h]”j½åah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jîåh´M”hj¿åh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ+Get and validate the GGTT offset of **vma**”h]”(hŒ$Get and validate the GGTT offset of ”…”�”}”(hj çh²hh³Nh´Nubj)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj çubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M”hj çh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj¿åh²hh³jîåh´M”ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój3çjôj3çjõ‰jö‰j÷‰uh1jÇh²hhj?Öh³Nh´Nubjù)�”}”(hX**Parameters** ``struct intel_guc *guc`` intel_guc structure. ``struct i915_vma *vma`` i915 graphics virtual memory area. **Description** GuC does not allow any gfx GGTT address that falls into range [0, ggtt.pin_bias), which is reserved for Boot ROM, SRAM and WOPCM. Currently, in order to exclude [0, ggtt.pin_bias) address space from GGTT, all gfx objects used by GuC are allocated with intel_guc_allocate_vma() and pinned with PIN_OFFSET_BIAS along with the value of ggtt.pin_bias. **Return** GGTT offset of the **vma**.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj=çh]”hŒ Parameters”…”�”}”(hj?çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;çubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M˜hj7çubj)�”}”(hhh]”(j)�”}”(hŒ/``struct intel_guc *guc`` intel_guc structure. ”h]”(j$)�”}”(hŒ``struct intel_guc *guc``”h]”j*)�”}”(hj\çh]”hŒstruct intel_guc *guc”…”�”}”(hj^çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjZçubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M•hjVçubj@)�”}”(hhh]”hÚ)�”}”(hŒintel_guc structure.”h]”hŒintel_guc structure.”…”�”}”(hjuçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jqçh´M•hjrçubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjVçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jqçh´M•hjSçubj)�”}”(hŒ<``struct i915_vma *vma`` i915 graphics virtual memory area. ”h]”(j$)�”}”(hŒ``struct i915_vma *vma``”h]”j*)�”}”(hj•çh]”hŒstruct i915_vma *vma”…”�”}”(hj—çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj“çubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M–hj�çubj@)�”}”(hhh]”hÚ)�”}”(hŒ"i915 graphics virtual memory area.”h]”hŒ"i915 graphics virtual memory area.”…”�”}”(hj®çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jªçh´M–hj«çubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj�çubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jªçh´M–hjSçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj7çubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjÐçh]”hŒ Description”…”�”}”(hjÒçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎçubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M˜hj7çubhÚ)�”}”(hX[GuC does not allow any gfx GGTT address that falls into range [0, ggtt.pin_bias), which is reserved for Boot ROM, SRAM and WOPCM. Currently, in order to exclude [0, ggtt.pin_bias) address space from GGTT, all gfx objects used by GuC are allocated with intel_guc_allocate_vma() and pinned with PIN_OFFSET_BIAS along with the value of ggtt.pin_bias.”h]”hX[GuC does not allow any gfx GGTT address that falls into range [0, ggtt.pin_bias), which is reserved for Boot ROM, SRAM and WOPCM. Currently, in order to exclude [0, ggtt.pin_bias) address space from GGTT, all gfx objects used by GuC are allocated with intel_guc_allocate_vma() and pinned with PIN_OFFSET_BIAS along with the value of ggtt.pin_bias.”…”�”}”(hjæçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M—hj7çubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj÷çh]”hŒReturn”…”�”}”(hjùçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõçubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´M�hj7çubhÚ)�”}”(hŒGGTT offset of the **vma**.”h]”(hŒGGTT offset of the ”…”�”}”(hj èh²hh³Nh´Nubj)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj èubhŒ.”…”�”}”(hj èh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:326: ./drivers/gpu/drm/i915/gt/uc/intel_guc.h”h´Mžhj7çubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj?Öh²hh³Nh´NubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒGuC Firmware Layout”h]”hŒGuC Firmware Layout”…”�”}”(hj8èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj5èh²hh³hÃh´MIubhÚ)�”}”(hŒ-The GuC/HuC firmware layout looks like this::”h]”hŒ,The GuC/HuC firmware layout looks like this:”…”�”}”(hjFèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:331: ./drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h”h´K hj5èh²hubjA#)�”}”(hX­+======================================================================+ | Firmware blob | +===============+===============+============+============+============+ | CSS header | uCode | RSA key | modulus | exponent | +===============+===============+============+============+============+ <-header size-> <---header size continued -----------> <--- size -----------------------------------------------------------> <-key size-> <-mod size-> <-exp size->”h]”hX­+======================================================================+ | Firmware blob | +===============+===============+============+============+============+ | CSS header | uCode | RSA key | modulus | exponent | +===============+===============+============+============+============+ <-header size-> <---header size continued -----------> <--- size -----------------------------------------------------------> <-key size-> <-mod size-> <-exp size->”…”�”}”hjUèsbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:331: ./drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h”h´Khj5èh²hubhÚ)�”}”(hXbThe firmware may or may not have modulus key and exponent data. The header, uCode and RSA signature are must-have components that will be used by driver. Length of each components, which is all in dwords, can be found in header. In the case that modulus and exponent are not present in fw, a.k.a truncated image, the length value still appears in header.”h]”hXbThe firmware may or may not have modulus key and exponent data. The header, uCode and RSA signature are must-have components that will be used by driver. Length of each components, which is all in dwords, can be found in header. In the case that modulus and exponent are not present in fw, a.k.a truncated image, the length value still appears in header.”…”�”}”(hjdèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:331: ./drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h”h´Khj5èh²hubhÚ)�”}”(hŒJDriver will do some basic fw size validation based on the following rules:”h]”hŒJDriver will do some basic fw size validation based on the following rules:”…”�”}”(hjsèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:331: ./drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h”h´K hj5èh²hubj”;)�”}”(hhh]”(jµ:)�”}”(hŒ/Header, uCode and RSA are must-have components.”h]”hÚ)�”}”(hj‡èh]”hŒ/Header, uCode and RSA are must-have components.”…”�”}”(hj‰èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:331: ./drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h”h´K"hj…èubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj‚èubjµ:)�”}”(hŒdAll firmware components, if they present, are in the sequence illustrated in the layout table above.”h]”hÚ)�”}”(hŒdAll firmware components, if they present, are in the sequence illustrated in the layout table above.”h]”hŒdAll firmware components, if they present, are in the sequence illustrated in the layout table above.”…”�”}”(hj¡èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:331: ./drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h”h´K#hj�èubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj‚èubjµ:)�”}”(hŒ@Length info of each component can be found in header, in dwords.”h]”hÚ)�”}”(hj¸èh]”hŒ@Length info of each component can be found in header, in dwords.”…”�”}”(hjºèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:331: ./drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h”h´K%hj¶èubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj‚èubjµ:)�”}”(hŒ‡Modulus and exponent key are not required by driver. They may not appear in fw. So driver will load a truncated firmware in this case. ”h]”hÚ)�”}”(hŒ†Modulus and exponent key are not required by driver. They may not appear in fw. So driver will load a truncated firmware in this case.”h]”hŒ†Modulus and exponent key are not required by driver. They may not appear in fw. So driver will load a truncated firmware in this case.”…”�”}”(hjÒèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:331: ./drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h”h´K&hjÎèubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj‚èubeh}”(h]”h ]”h"]”h$]”h&]”jÐ;jÑ;jÒ;hjÓ;jÔ;uh1j“;hj5èh²hh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:331: ./drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h”h´NubhÚ)�”}”(hXStarting from DG2, the HuC is loaded by the GSC instead of i915. The GSC firmware performs all the required integrity checks, we just need to check the version. Note that the header for GSC-managed blobs is different from the CSS used for dma-loaded firmwares.”h]”hXStarting from DG2, the HuC is loaded by the GSC instead of i915. The GSC firmware performs all the required integrity checks, we just need to check the version. Note that the header for GSC-managed blobs is different from the CSS used for dma-loaded firmwares.”…”�”}”(hjîèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œf/var/lib/git/docbuild/linux/Documentation/gpu/i915:331: ./drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h”h´K)hj5èh²hubeh}”(h]”Œguc-firmware-layout”ah ]”h"]”Œguc firmware layout”ah$]”h&]”uh1hÄhj?Öh²hh³hÃh´MIjõdKubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒGuC Memory Management”h]”hŒGuC Memory Management”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjéh²hh³hÃh´MOubhÚ)�”}”(hXçGuC can't allocate any memory for its own usage, so all the allocations must be handled by the host driver. GuC accesses the memory via the GGTT, with the exception of the top and bottom parts of the 4GB address space, which are instead re-mapped by the GuC HW to memory location of the FW itself (WOPCM) or other parts of the HW. The driver must take care not to place objects that the GuC is going to access in these reserved ranges. The layout of the GuC address space is shown below:”h]”hXéGuC can’t allocate any memory for its own usage, so all the allocations must be handled by the host driver. GuC accesses the memory via the GGTT, with the exception of the top and bottom parts of the 4GB address space, which are instead re-mapped by the GuC HW to memory location of the FW itself (WOPCM) or other parts of the HW. The driver must take care not to place objects that the GuC is going to access in these reserved ranges. The layout of the GuC address space is shown below:”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:337: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´MÛhjéh²hubjA#)�”}”(hXš +===========> +====================+ <== FFFF_FFFF ^ | Reserved | | +====================+ <== GUC_GGTT_TOP | | | | | DRAM | GuC | | Address +===> +====================+ <== GuC ggtt_pin_bias Space ^ | | | | | | | GuC | GuC | | WOPCM | WOPCM | | Size | | | | | | v v | | +=======+===> +====================+ <== 0000_0000”h]”hXš +===========> +====================+ <== FFFF_FFFF ^ | Reserved | | +====================+ <== GUC_GGTT_TOP | | | | | DRAM | GuC | | Address +===> +====================+ <== GuC ggtt_pin_bias Space ^ | | | | | | | GuC | GuC | | WOPCM | WOPCM | | Size | | | | | | v v | | +=======+===> +====================+ <== 0000_0000”…”�”}”hj%ésbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:337: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´Måhjéh²hubhÚ)�”}”(hŒÞThe lower part of GuC Address Space [0, ggtt_pin_bias) is mapped to GuC WOPCM while upper part of GuC Address Space [ggtt_pin_bias, GUC_GGTT_TOP) is mapped to DRAM. The value of the GuC ggtt_pin_bias is the GuC WOPCM size.”h]”hŒÞThe lower part of GuC Address Space [0, ggtt_pin_bias) is mapped to GuC WOPCM while upper part of GuC Address Space [ggtt_pin_bias, GUC_GGTT_TOP) is mapped to DRAM. The value of the GuC ggtt_pin_bias is the GuC WOPCM size.”…”�”}”(hj4éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:337: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´Mõhjéh²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ#intel_guc_allocate_vma (C function)”Œc.intel_guc_allocate_vma”hNt”auh1j¶hjéh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒJstruct i915_vma * intel_guc_allocate_vma (struct intel_guc *guc, u32 size)”h]”jÓ)�”}”(hŒHstruct i915_vma *intel_guc_allocate_vma(struct intel_guc *guc, u32 size)”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj\éh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjXéh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:339: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´Mýubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjXéh²hh³jiéh´Mýubh)�”}”(hhh]”jÜ)�”}”(hŒi915_vma”h]”hŒi915_vma”…”�”}”(hj{éh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjxéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j}éŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõŒintel_guc_allocate_vma”sbŒc.intel_guc_allocate_vma”†”asbuh1hhjXéh²hh³jiéh´Mýubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjXéh²hh³jiéh´Mýubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjªéh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjXéh²hh³jiéh´Mýubj)�”}”(hŒintel_guc_allocate_vma”h]”jÜ)�”}”(hj™éh]”hŒintel_guc_allocate_vma”…”�”}”(hj»éh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj·éubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjXéh²hh³jiéh´Mýubj8)�”}”(hŒ!(struct intel_guc *guc, u32 size)”h]”(j>)�”}”(hŒstruct intel_guc *guc”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÖéh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjÒéubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÒéubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_guc”h]”hŒ intel_guc”…”�”}”(hjôéh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjñéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jöéŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j—éŒc.intel_guc_allocate_vma”†”asbuh1hhjÒéubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÒéubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj êh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÒéubjÜ)�”}”(hŒguc”h]”hŒguc”…”�”}”(hj-êh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÒéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÎéubj>)�”}”(hŒu32 size”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjIêh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjFêubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jKêŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j—éŒc.intel_guc_allocate_vma”†”asbuh1hhjBêubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjBêubjÜ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjuêh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjBêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÎéubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjXéh²hh³jiéh´Mýubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjTéh²hh³jiéh´Mýubah}”(h]”jOéah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jiéh´MýhjQéh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ!Allocate a GGTT VMA for GuC usage”h]”hŒ!Allocate a GGTT VMA for GuC usage”…”�”}”(hjŸêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:339: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´Mýhjœêh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjQéh²hh³jiéh´Mýubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój·êjôj·êjõ‰jö‰j÷‰uh1jÇh²hhjéh³Nh´Nubjù)�”}”(hX**Parameters** ``struct intel_guc *guc`` the guc ``u32 size`` size of area to allocate (both virtual space and memory) **Description** This is a wrapper to create an object for use with the GuC. In order to use it inside the GuC, an object needs to be pinned lifetime, so we allocate both some backing storage and a range inside the Global GTT. We must pin it in the GGTT somewhere other than than [0, GUC ggtt_pin_bias) because that range is reserved inside GuC. **Return** A i915_vma if successful, otherwise an ERR_PTR.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÁêh]”hŒ Parameters”…”�”}”(hjÃêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¿êubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:339: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´Mhj»êubj)�”}”(hhh]”(j)�”}”(hŒ"``struct intel_guc *guc`` the guc ”h]”(j$)�”}”(hŒ``struct intel_guc *guc``”h]”j*)�”}”(hjàêh]”hŒstruct intel_guc *guc”…”�”}”(hjâêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÞêubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:339: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´MþhjÚêubj@)�”}”(hhh]”hÚ)�”}”(hŒthe guc”h]”hŒthe guc”…”�”}”(hjùêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jõêh´Mþhjöêubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÚêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõêh´Mþhj×êubj)�”}”(hŒF``u32 size`` size of area to allocate (both virtual space and memory) ”h]”(j$)�”}”(hŒ ``u32 size``”h]”j*)�”}”(hjëh]”hŒu32 size”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:339: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´Mÿhjëubj@)�”}”(hhh]”hÚ)�”}”(hŒ8size of area to allocate (both virtual space and memory)”h]”hŒ8size of area to allocate (both virtual space and memory)”…”�”}”(hj2ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j.ëh´Mÿhj/ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.ëh´Mÿhj×êubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj»êubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjTëh]”hŒ Description”…”�”}”(hjVëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjRëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:339: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´Mhj»êubhÚ)�”}”(hXHThis is a wrapper to create an object for use with the GuC. In order to use it inside the GuC, an object needs to be pinned lifetime, so we allocate both some backing storage and a range inside the Global GTT. We must pin it in the GGTT somewhere other than than [0, GUC ggtt_pin_bias) because that range is reserved inside GuC.”h]”hXHThis is a wrapper to create an object for use with the GuC. In order to use it inside the GuC, an object needs to be pinned lifetime, so we allocate both some backing storage and a range inside the Global GTT. We must pin it in the GGTT somewhere other than than [0, GUC ggtt_pin_bias) because that range is reserved inside GuC.”…”�”}”(hjjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:339: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´Mhj»êubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj{ëh]”hŒReturn”…”�”}”(hj}ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjyëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:339: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´Mhj»êubhÚ)�”}”(hŒ/A i915_vma if successful, otherwise an ERR_PTR.”h]”hŒ/A i915_vma if successful, otherwise an ERR_PTR.”…”�”}”(hj‘ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:339: ./drivers/gpu/drm/i915/gt/uc/intel_guc.c”h´Mhj»êubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjéh²hh³Nh´Nubeh}”(h]”Œguc-memory-management”ah ]”h"]”Œguc memory management”ah$]”h&]”uh1hÄhj?Öh²hh³hÃh´MOubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒGuC-specific firmware loader”h]”hŒGuC-specific firmware loader”…”�”}”(hj²ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj¯ëh²hh³hÃh´MXubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ intel_guc_fw_upload (C function)”Œc.intel_guc_fw_upload”hNt”auh1j¶hj¯ëh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ/int intel_guc_fw_upload (struct intel_guc *guc)”h]”jÓ)�”}”(hŒ.int intel_guc_fw_upload(struct intel_guc *guc)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjÙëh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÕëh²hh³Œc/var/lib/git/docbuild/linux/Documentation/gpu/i915:346: ./drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c”h´Mubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÕëh²hh³jçëh´Mubj)�”}”(hŒintel_guc_fw_upload”h]”jÜ)�”}”(hŒintel_guc_fw_upload”h]”hŒintel_guc_fw_upload”…”�”}”(hjúëh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjöëubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÕëh²hh³jçëh´Mubj8)�”}”(hŒ(struct intel_guc *guc)”h]”j>)�”}”(hŒstruct intel_guc *guc”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjìubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#ìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjìubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_guc”h]”hŒ intel_guc”…”�”}”(hj4ìh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj1ìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j6ìŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjüësbŒc.intel_guc_fw_upload”†”asbuh1hhjìubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjìubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjbìh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjìubjÜ)�”}”(hŒguc”h]”hŒguc”…”�”}”(hjoìh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjìubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÕëh²hh³jçëh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÑëh²hh³jçëh´Mubah}”(h]”jÌëah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jçëh´MhjÎëh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒload GuC uCode to device”h]”hŒload GuC uCode to device”…”�”}”(hj™ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œc/var/lib/git/docbuild/linux/Documentation/gpu/i915:346: ./drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c”h´Mhj–ìh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÎëh²hh³jçëh´Mubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój±ìjôj±ìjõ‰jö‰j÷‰uh1jÇh²hhj¯ëh³Nh´Nubjù)�”}”(hX_**Parameters** ``struct intel_guc *guc`` intel_guc structure **Description** Called from intel_uc_init_hw() during driver load, resume from sleep and after a GPU reset. The firmware image should have already been fetched into memory, so only check that fetch succeeded, and then transfer the image to the h/w. **Return** non-zero code on error”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj»ìh]”hŒ Parameters”…”�”}”(hj½ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹ìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œc/var/lib/git/docbuild/linux/Documentation/gpu/i915:346: ./drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c”h´M"hjµìubj)�”}”(hhh]”j)�”}”(hŒ.``struct intel_guc *guc`` intel_guc structure ”h]”(j$)�”}”(hŒ``struct intel_guc *guc``”h]”j*)�”}”(hjÚìh]”hŒstruct intel_guc *guc”…”�”}”(hjÜìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjØìubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œc/var/lib/git/docbuild/linux/Documentation/gpu/i915:346: ./drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c”h´MhjÔìubj@)�”}”(hhh]”hÚ)�”}”(hŒintel_guc structure”h]”hŒintel_guc structure”…”�”}”(hjóìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jïìh´Mhjðìubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÔìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³•jïìh´MhjÑìubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµìubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjíh]”hŒ Description”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œc/var/lib/git/docbuild/linux/Documentation/gpu/i915:346: ./drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c”h´M!hjµìubhÚ)�”}”(hŒ[Called from intel_uc_init_hw() during driver load, resume from sleep and after a GPU reset.”h]”hŒ[Called from intel_uc_init_hw() during driver load, resume from sleep and after a GPU reset.”…”�”}”(hj+íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œc/var/lib/git/docbuild/linux/Documentation/gpu/i915:346: ./drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c”h´M hjµìubhÚ)�”}”(hŒŒThe firmware image should have already been fetched into memory, so only check that fetch succeeded, and then transfer the image to the h/w.”h]”hŒŒThe firmware image should have already been fetched into memory, so only check that fetch succeeded, and then transfer the image to the h/w.”…”�”}”(hj:íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œc/var/lib/git/docbuild/linux/Documentation/gpu/i915:346: ./drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c”h´M#hjµìubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjKíh]”hŒReturn”…”�”}”(hjMíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIíubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œc/var/lib/git/docbuild/linux/Documentation/gpu/i915:346: ./drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c”h´M&hjµìubhÚ)�”}”(hŒnon-zero code on error”h]”hŒnon-zero code on error”…”�”}”(hjaíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œc/var/lib/git/docbuild/linux/Documentation/gpu/i915:346: ./drivers/gpu/drm/i915/gt/uc/intel_guc_fw.c”h´M'hjµìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj¯ëh²hh³Nh´Nubeh}”(h]”Œguc-specific-firmware-loader”ah ]”h"]”Œguc-specific firmware loader”ah$]”h&]”uh1hÄhj?Öh²hh³hÃh´MXubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒGuC-based command submission”h]”hŒGuC-based command submission”…”�”}”(hj‚íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjíh²hh³hÃh´M^ubhÚ)�”}”(hX—The Scratch registers: There are 16 MMIO-based registers start from 0xC180. The kernel driver writes a value to the action register (SOFT_SCRATCH_0) along with any data. It then triggers an interrupt on the GuC via another register write (0xC4C8). Firmware writes a success/fail code back to the action register after processes the request. The kernel driver polls waiting for this update and then proceeds.”h]”hX—The Scratch registers: There are 16 MMIO-based registers start from 0xC180. The kernel driver writes a value to the action register (SOFT_SCRATCH_0) along with any data. It then triggers an interrupt on the GuC via another register write (0xC4C8). Firmware writes a success/fail code back to the action register after processes the request. The kernel driver polls waiting for this update and then proceeds.”…”�”}”(hj�íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´K'hjíh²hubhÚ)�”}”(hŒ§Command Transport buffers (CTBs): Covered in detail in other sections but CTBs (Host to GuC - H2G, GuC to Host - G2H) are a message interface between the i915 and GuC.”h]”hŒ§Command Transport buffers (CTBs): Covered in detail in other sections but CTBs (Host to GuC - H2G, GuC to Host - G2H) are a message interface between the i915 and GuC.”…”�”}”(hjŸíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´K/hjíh²hubhÚ)�”}”(hX#Context registration: Before a context can be submitted it must be registered with the GuC via a H2G. A unique guc_id is associated with each context. The context is either registered at request creation time (normal operation) or at submission time (abnormal operation, e.g. after a reset).”h]”hX#Context registration: Before a context can be submitted it must be registered with the GuC via a H2G. A unique guc_id is associated with each context. The context is either registered at request creation time (normal operation) or at submission time (abnormal operation, e.g. after a reset).”…”�”}”(hj®íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´K3hjíh²hubhÚ)�”}”(hX’Context submission: The i915 updates the LRC tail value in memory. The i915 must enable the scheduling of the context within the GuC for the GuC to actually consider it. Therefore, the first time a disabled context is submitted we use a schedule enable H2G, while follow up submissions are done via the context submit H2G, which informs the GuC that a previously enabled context has new work available.”h]”hX’Context submission: The i915 updates the LRC tail value in memory. The i915 must enable the scheduling of the context within the GuC for the GuC to actually consider it. Therefore, the first time a disabled context is submitted we use a schedule enable H2G, while follow up submissions are done via the context submit H2G, which informs the GuC that a previously enabled context has new work available.”…”�”}”(hj½íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´K9hjíh²hubhÚ)�”}”(hX7Context unpin: To unpin a context a H2G is used to disable scheduling. When the corresponding G2H returns indicating the scheduling disable operation has completed it is safe to unpin the context. While a disable is in flight it isn't safe to resubmit the context so a fence is used to stall all future requests of that context until the G2H is returned. Because this interaction with the GuC takes a non-zero amount of time we delay the disabling of scheduling after the pin count goes to zero by a configurable period of time (see SCHED_DISABLE_DELAY_MS). The thought is this gives the user a window of time to resubmit something on the context before doing this costly operation. This delay is only done if the context isn't closed and the guc_id usage is less than a threshold (see NUM_SCHED_DISABLE_GUC_IDS_THRESHOLD).”h]”hX;Context unpin: To unpin a context a H2G is used to disable scheduling. When the corresponding G2H returns indicating the scheduling disable operation has completed it is safe to unpin the context. While a disable is in flight it isn’t safe to resubmit the context so a fence is used to stall all future requests of that context until the G2H is returned. Because this interaction with the GuC takes a non-zero amount of time we delay the disabling of scheduling after the pin count goes to zero by a configurable period of time (see SCHED_DISABLE_DELAY_MS). The thought is this gives the user a window of time to resubmit something on the context before doing this costly operation. This delay is only done if the context isn’t closed and the guc_id usage is less than a threshold (see NUM_SCHED_DISABLE_GUC_IDS_THRESHOLD).”…”�”}”(hjÌíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´KAhjíh²hubhÚ)�”}”(hX„Context deregistration: Before a context can be destroyed or if we steal its guc_id we must deregister the context with the GuC via H2G. If stealing the guc_id it isn't safe to submit anything to this guc_id until the deregister completes so a fence is used to stall all requests associated with this guc_id until the corresponding G2H returns indicating the guc_id has been deregistered.”h]”hX†Context deregistration: Before a context can be destroyed or if we steal its guc_id we must deregister the context with the GuC via H2G. If stealing the guc_id it isn’t safe to submit anything to this guc_id until the deregister completes so a fence is used to stall all requests associated with this guc_id until the corresponding G2H returns indicating the guc_id has been deregistered.”…”�”}”(hjÛíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´KNhjíh²hubhÚ)�”}”(hŒÇsubmission_state.guc_ids: Unique number associated with private GuC context data passed in during context registration / submission / deregistration. 64k available. Simple ida is used for allocation.”h]”hŒÇsubmission_state.guc_ids: Unique number associated with private GuC context data passed in during context registration / submission / deregistration. 64k available. Simple ida is used for allocation.”…”�”}”(hjêíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´KUhjíh²hubhÚ)�”}”(hX Stealing guc_ids: If no guc_ids are available they can be stolen from another context at request creation time if that context is unpinned. If a guc_id can't be found we punt this problem to the user as we believe this is near impossible to hit during normal use cases.”h]”hXStealing guc_ids: If no guc_ids are available they can be stolen from another context at request creation time if that context is unpinned. If a guc_id can’t be found we punt this problem to the user as we believe this is near impossible to hit during normal use cases.”…”�”}”(hjùíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´KZhjíh²hubhÚ)�”}”(hŒrLocking: In the GuC submission code we have 3 basic spin locks which protect everything. Details about each below.”h]”hŒrLocking: In the GuC submission code we have 3 basic spin locks which protect everything. Details about each below.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´K`hjíh²hubhÚ)�”}”(hX/sched_engine->lock This is the submission lock for all contexts that share an i915 schedule engine (sched_engine), thus only one of the contexts which share a sched_engine can be submitting at a time. Currently only one sched_engine is used for all of GuC submission but that could change in the future.”h]”hX/sched_engine->lock This is the submission lock for all contexts that share an i915 schedule engine (sched_engine), thus only one of the contexts which share a sched_engine can be submitting at a time. Currently only one sched_engine is used for all of GuC submission but that could change in the future.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´Kdhjíh²hubhÚ)�”}”(hŒnguc->submission_state.lock Global lock for GuC submission state. Protects guc_ids and destroyed contexts list.”h]”hŒnguc->submission_state.lock Global lock for GuC submission state. Protects guc_ids and destroyed contexts list.”…”�”}”(hj&îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´Kjhjíh²hubhÚ)�”}”(hX•ce->guc_state.lock Protects everything under ce->guc_state. Ensures that a context is in the correct state before issuing a H2G. e.g. We don't issue a schedule disable on a disabled context (bad idea), we don't issue a schedule enable when a schedule disable is in flight, etc... Also protects list of inflight requests on the context and the priority management state. Lock is individual to each context.”h]”hX™ce->guc_state.lock Protects everything under ce->guc_state. Ensures that a context is in the correct state before issuing a H2G. e.g. We don’t issue a schedule disable on a disabled context (bad idea), we don’t issue a schedule enable when a schedule disable is in flight, etc... Also protects list of inflight requests on the context and the priority management state. Lock is individual to each context.”…”�”}”(hj5îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´Knhjíh²hubhÚ)�”}”(hŒnLock ordering rules: sched_engine->lock -> ce->guc_state.lock guc->submission_state.lock -> ce->guc_state.lock”h]”hŒnLock ordering rules: sched_engine->lock -> ce->guc_state.lock guc->submission_state.lock -> ce->guc_state.lock”…”�”}”(hjDîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´Kvhjíh²hubhÚ)�”}”(hX�Reset races: When a full GT reset is triggered it is assumed that some G2H responses to H2Gs can be lost as the GuC is also reset. Losing these G2H can prove to be fatal as we do certain operations upon receiving a G2H (e.g. destroy contexts, release guc_ids, etc...). When this occurs we can scrub the context state and cleanup appropriately, however this is quite racey. To avoid races, the reset code must disable submission before scrubbing for the missing G2H, while the submission code must check for submission being disabled and skip sending H2Gs and updating context states when it is. Both sides must also make sure to hold the relevant locks.”h]”hX�Reset races: When a full GT reset is triggered it is assumed that some G2H responses to H2Gs can be lost as the GuC is also reset. Losing these G2H can prove to be fatal as we do certain operations upon receiving a G2H (e.g. destroy contexts, release guc_ids, etc...). When this occurs we can scrub the context state and cleanup appropriately, however this is quite racey. To avoid races, the reset code must disable submission before scrubbing for the missing G2H, while the submission code must check for submission being disabled and skip sending H2Gs and updating context states when it is. Both sides must also make sure to hold the relevant locks.”…”�”}”(hjSîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:352: ./drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c”h´Kzhjíh²hubeh}”(h]”Œguc-based-command-submission”ah ]”h"]”Œguc-based command submission”ah$]”h&]”uh1hÄhj?Öh²hh³hÃh´M^ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒGuC ABI”h]”hŒGuC ABI”…”�”}”(hjmîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjjîh²hh³hÃh´Mdubh¶)�”}”(hŒ.. _HXG Message:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒ hxg-message”uh1hµh´Khjjîh²hh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”jõdKubhÚ)�”}”(hŒ**HXG Message**”h]”j)�”}”(hj‰îh]”hŒ HXG Message”…”�”}”(hj‹îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡îubah}”(h]”j…îah ]”h"]”Œ hxg message”ah$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Khjjîh²hŒexpect_referenced_by_name”}”jœîj{îsŒexpect_referenced_by_id”}”j…îj{îsjõdKubhÚ)�”}”(hŒ‹All messages exchanged with GuC are defined using 32 bit dwords. First dword is treated as a message header. Remaining dwords are optional.”h]”hŒ‹All messages exchanged with GuC are defined using 32 bit dwords. First dword is treated as a message header. Remaining dwords are optional.”…”�”}”(hj¤îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K hjjîh²hubjgd)�”}”(hXÓ+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | | | | | 0 | 31 | **ORIGIN** - originator of the message | | | | - _`GUC_HXG_ORIGIN_HOST` = 0 | | | | - _`GUC_HXG_ORIGIN_GUC` = 1 | | | | | | +-------+--------------------------------------------------------------+ | | 30:28 | **TYPE** - message type | | | | - _`GUC_HXG_TYPE_REQUEST` = 0 | | | | - _`GUC_HXG_TYPE_EVENT` = 1 | | | | - _`GUC_HXG_TYPE_FAST_REQUEST` = 2 | | | | - _`GUC_HXG_TYPE_NO_RESPONSE_BUSY` = 3 | | | | - _`GUC_HXG_TYPE_NO_RESPONSE_RETRY` = 5 | | | | - _`GUC_HXG_TYPE_RESPONSE_FAILURE` = 6 | | | | - _`GUC_HXG_TYPE_RESPONSE_SUCCESS` = 7 | | +-------+--------------------------------------------------------------+ | | 27:0 | **AUX** - auxiliary data (depends on TYPE) | +---+-------+--------------------------------------------------------------+ | 1 | 31:0 | | +---+-------+ | |...| | **PAYLOAD** - optional payload (depends on TYPE) | +---+-------+ | | n | 31:0 | | +---+-------+--------------------------------------------------------------+ ”h]”hŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj¾îubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj¾îubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhj¾îubhŒthead”“”)�”}”(hhh]”hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjèîubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hjùîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Khjöîubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjèîubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jïh´Khjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjèîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjãîubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhj¾îubhŒtbody”“”)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ0”h]”hŒ0”…”�”}”(hj<ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Khj9ïubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhj6ïubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31”h]”hŒ31”…”�”}”(hjUïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jJïh´KhjRïubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj6ïubjìî)�”}”(hhh]”j)�”}”(hhh]”j)�”}”(hŒ`**ORIGIN** - originator of the message - _`GUC_HXG_ORIGIN_HOST` = 0 - _`GUC_HXG_ORIGIN_GUC` = 1 ”h]”(j$)�”}”(hŒ&**ORIGIN** - originator of the message”h]”(j)�”}”(hŒ **ORIGIN**”h]”hŒORIGIN”…”�”}”(hjwïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjsïubhŒ - originator of the message”…”�”}”(hjsïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Khjoïubj@)�”}”(hhh]”j°:)�”}”(hhh]”(jµ:)�”}”(hŒ_`GUC_HXG_ORIGIN_HOST` = 0”h]”hÚ)�”}”(hj˜ïh]”(h¶)�”}”(hŒ_`GUC_HXG_ORIGIN_HOST`”h]”hŒGUC_HXG_ORIGIN_HOST”…”�”}”(hj�ïh²hh³Nh´Nubah}”(h]”Œguc-hxg-origin-host”ah ]”h"]”Œguc_hxg_origin_host”ah$]”h&]”uh1hµhjšïjõdKubhŒ = 0”…”�”}”(hjšïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Khj–ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj“ïubjµ:)�”}”(hŒ_`GUC_HXG_ORIGIN_GUC` = 1 ”h]”hÚ)�”}”(hŒ_`GUC_HXG_ORIGIN_GUC` = 1”h]”(h¶)�”}”(hŒ_`GUC_HXG_ORIGIN_GUC`”h]”hŒGUC_HXG_ORIGIN_GUC”…”�”}”(hjÆïh²hh³Nh´Nubah}”(h]”Œguc-hxg-origin-guc”ah ]”h"]”Œguc_hxg_origin_guc”ah$]”h&]”uh1hµhjÂïjõdKubhŒ = 1”…”�”}”(hjÂïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j�ïh´Khj¾ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj“ïubeh}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³j·ïh´Khj�ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjoïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�ïh´Khjlïubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjiïubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj6ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj3ïubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ30:28”h]”hŒ30:28”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Khj ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj ðubjìî)�”}”(hhh]”j)�”}”(hhh]”j)�”}”(hX**TYPE** - message type - _`GUC_HXG_TYPE_REQUEST` = 0 - _`GUC_HXG_TYPE_EVENT` = 1 - _`GUC_HXG_TYPE_FAST_REQUEST` = 2 - _`GUC_HXG_TYPE_NO_RESPONSE_BUSY` = 3 - _`GUC_HXG_TYPE_NO_RESPONSE_RETRY` = 5 - _`GUC_HXG_TYPE_RESPONSE_FAILURE` = 6 - _`GUC_HXG_TYPE_RESPONSE_SUCCESS` = 7”h]”(j$)�”}”(hŒ**TYPE** - message type”h]”(j)�”}”(hŒ**TYPE**”h]”hŒTYPE”…”�”}”(hj3ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/ðubhŒ - message type”…”�”}”(hj/ðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Khj+ðubj@)�”}”(hhh]”j°:)�”}”(hhh]”(jµ:)�”}”(hŒ_`GUC_HXG_TYPE_REQUEST` = 0”h]”hÚ)�”}”(hjTðh]”(h¶)�”}”(hŒ_`GUC_HXG_TYPE_REQUEST`”h]”hŒGUC_HXG_TYPE_REQUEST”…”�”}”(hjYðh²hh³Nh´Nubah}”(h]”Œguc-hxg-type-request”ah ]”h"]”Œguc_hxg_type_request”ah$]”h&]”uh1hµhjVðjõdKubhŒ = 0”…”�”}”(hjVðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KhjRðubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjOðubjµ:)�”}”(hŒ_`GUC_HXG_TYPE_EVENT` = 1”h]”hÚ)�”}”(hj|ðh]”(h¶)�”}”(hŒ_`GUC_HXG_TYPE_EVENT`”h]”hŒGUC_HXG_TYPE_EVENT”…”�”}”(hj�ðh²hh³Nh´Nubah}”(h]”Œguc-hxg-type-event”ah ]”h"]”Œguc_hxg_type_event”ah$]”h&]”uh1hµhj~ðjõdKubhŒ = 1”…”�”}”(hj~ðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Khjzðubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjOðubjµ:)�”}”(hŒ _`GUC_HXG_TYPE_FAST_REQUEST` = 2”h]”hÚ)�”}”(hj¤ðh]”(h¶)�”}”(hŒ_`GUC_HXG_TYPE_FAST_REQUEST`”h]”hŒGUC_HXG_TYPE_FAST_REQUEST”…”�”}”(hj©ðh²hh³Nh´Nubah}”(h]”Œguc-hxg-type-fast-request”ah ]”h"]”Œguc_hxg_type_fast_request”ah$]”h&]”uh1hµhj¦ðjõdKubhŒ = 2”…”�”}”(hj¦ðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Khj¢ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjOðubjµ:)�”}”(hŒ$_`GUC_HXG_TYPE_NO_RESPONSE_BUSY` = 3”h]”hÚ)�”}”(hjÌðh]”(h¶)�”}”(hŒ _`GUC_HXG_TYPE_NO_RESPONSE_BUSY`”h]”hŒGUC_HXG_TYPE_NO_RESPONSE_BUSY”…”�”}”(hjÑðh²hh³Nh´Nubah}”(h]”Œguc-hxg-type-no-response-busy”ah ]”h"]”Œguc_hxg_type_no_response_busy”ah$]”h&]”uh1hµhjÎðjõdKubhŒ = 3”…”�”}”(hjÎðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KhjÊðubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjOðubjµ:)�”}”(hŒ%_`GUC_HXG_TYPE_NO_RESPONSE_RETRY` = 5”h]”hÚ)�”}”(hjôðh]”(h¶)�”}”(hŒ!_`GUC_HXG_TYPE_NO_RESPONSE_RETRY`”h]”hŒGUC_HXG_TYPE_NO_RESPONSE_RETRY”…”�”}”(hjùðh²hh³Nh´Nubah}”(h]”Œguc-hxg-type-no-response-retry”ah ]”h"]”Œguc_hxg_type_no_response_retry”ah$]”h&]”uh1hµhjöðjõdKubhŒ = 5”…”�”}”(hjöðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Khjòðubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjOðubjµ:)�”}”(hŒ$_`GUC_HXG_TYPE_RESPONSE_FAILURE` = 6”h]”hÚ)�”}”(hjñh]”(h¶)�”}”(hŒ _`GUC_HXG_TYPE_RESPONSE_FAILURE`”h]”hŒGUC_HXG_TYPE_RESPONSE_FAILURE”…”�”}”(hj!ñh²hh³Nh´Nubah}”(h]”Œguc-hxg-type-response-failure”ah ]”h"]”Œguc_hxg_type_response_failure”ah$]”h&]”uh1hµhjñjõdKubhŒ = 6”…”�”}”(hjñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jKðh´Khjñubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjOðubjµ:)�”}”(hŒ$_`GUC_HXG_TYPE_RESPONSE_SUCCESS` = 7”h]”hÚ)�”}”(hjCñh]”(h¶)�”}”(hŒ _`GUC_HXG_TYPE_RESPONSE_SUCCESS`”h]”hŒGUC_HXG_TYPE_RESPONSE_SUCCESS”…”�”}”(hjHñh²hh³Nh´Nubah}”(h]”Œguc-hxg-type-response-success”ah ]”h"]”Œguc_hxg_type_response_success”ah$]”h&]”uh1hµhjEñjõdKubhŒ = 7”…”�”}”(hjEñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KhjAñubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjOðubeh}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³jsðh´KhjLðubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj+ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jKðh´Khj(ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj3ïubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ27:0”h]”hŒ27:0”…”�”}”(hj“ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Khj�ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj�ñubjìî)�”}”(hhh]”hÚ)�”}”(hŒ***AUX** - auxiliary data (depends on TYPE)”h]”(j)�”}”(hŒ**AUX**”h]”hŒAUX”…”�”}”(hj¯ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«ñubhŒ# - auxiliary data (depends on TYPE)”…”�”}”(hj«ñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¡ñh´Khj¨ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj�ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj3ïubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ1”h]”hŒ1”…”�”}”(hjÙñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K!hjÖñubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÓñubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjññh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jçñh´K!hjîñubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÓñubjìî)�”}”(hhh]”hÚ)�”}”(hŒ0**PAYLOAD** - optional payload (depends on TYPE)”h]”(j)�”}”(hŒ **PAYLOAD**”h]”hŒPAYLOAD”…”�”}”(hj òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòubhŒ% - optional payload (depends on TYPE)”…”�”}”(hjòh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K#hjòubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjÓñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj3ïubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ...”h]”hŒ...”…”�”}”(hj8òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j$òh´K#hj5òubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj2òubjìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj2òubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj3ïubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjèh]”hŒn”…”�”}”(hjaòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K%hj^òubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj[òubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjxòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jnòh´K%hjuòubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj[òubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj3ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhj¾îubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhj¹îubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhj³îubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K hjjîh²hubh¶)�”}”(hŒ.. _HXG Request:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒ hxg-request”uh1hµh´K$hjjîh²hh³j†îjõdKubhÚ)�”}”(hŒ**HXG Request**”h]”j)�”}”(hj¹òh]”hŒ HXG Request”…”�”}”(hj»òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·òubah}”(h]”j¶òah ]”h"]”Œ hxg request”ah$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K+hjjîh²hj î}”jÌòj¬òsj¢î}”j¶òj¬òsjõdKubhÚ)�”}”(hŒ}The `HXG Request`_ message should be used to initiate synchronous activity for which confirmation or return data is expected.”h]”(hŒThe ”…”�”}”(hjÒòh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Request`_”h]”hŒ HXG Request”…”�”}”(hjÚòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Request”hÁj¶òuh1jÁ5hjÒòj7;KubhŒk message should be used to initiate synchronous activity for which confirmation or return data is expected.”…”�”}”(hjÒòh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K;hjjîh²hubhÚ)�”}”(hŒ­The recipient of this message shall use `HXG Response`_, `HXG Failure`_ or `HXG Retry`_ message as a definite reply, and may use `HXG Busy`_ message as a intermediate reply.”h]”(hŒ(The recipient of this message shall use ”…”�”}”(hjõòh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Response`_”h]”hŒ HXG Response”…”�”}”(hjýòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Response”hÁŒ hxg-response”uh1jÁ5hjõòj7;KubhŒ, ”…”�”}”(hjõòh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Failure`_”h]”hŒ HXG Failure”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Failure”hÁŒ hxg-failure”uh1jÁ5hjõòj7;KubhŒ or ”…”�”}”(hjõòh²hh³Nh´NubjÂ5)�”}”(hŒ `HXG Retry`_”h]”hŒ HXG Retry”…”�”}”(hj'óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Retry”hÁŒ hxg-retry”uh1jÁ5hjõòj7;KubhŒ* message as a definite reply, and may use ”…”�”}”(hjõòh²hh³Nh´NubjÂ5)�”}”(hŒ `HXG Busy`_”h]”hŒHXG Busy”…”�”}”(hj<óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒHXG Busy”hÁŒhxg-busy”uh1jÁ5hjõòj7;KubhŒ! message as a intermediate reply.”…”�”}”(hjõòh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K>hjjîh²hubhÚ)�”}”(hŒLFormat of **DATA0** and all **DATAn** fields depends on the **ACTION** code.”h]”(hŒ Format of ”…”�”}”(hjXóh²hh³Nh´Nubj)�”}”(hŒ **DATA0**”h]”hŒDATA0”…”�”}”(hj`óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXóubhŒ and all ”…”�”}”(hjXóh²hh³Nh´Nubj)�”}”(hŒ **DATAn**”h]”hŒDATAn”…”�”}”(hjróh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXóubhŒ fields depends on the ”…”�”}”(hjXóh²hh³Nh´Nubj)�”}”(hŒ **ACTION**”h]”hŒACTION”…”�”}”(hj„óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXóubhŒ code.”…”�”}”(hjXóh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KBhjjîh²hubjgd)�”}”(hX+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31 | ORIGIN | | +-------+--------------------------------------------------------------+ | | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_ | | +-------+--------------------------------------------------------------+ | | 27:16 | **DATA0** - request data (depends on ACTION) | | +-------+--------------------------------------------------------------+ | | 15:0 | **ACTION** - requested action code | +---+-------+--------------------------------------------------------------+ | 1 | 31:0 | | +---+-------+ | |...| | **DATAn** - optional data (depends on ACTION) | +---+-------+ | | n | 31:0 | | +---+-------+--------------------------------------------------------------+ ”h]”j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj¤óubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj¤óubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhj¤óubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÈóubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hj×óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KEhjÔóubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÈóubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hjïóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jåóh´KEhjìóubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÈóubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjÅóubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhj¤óubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KGhjôubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjôubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31”h]”hŒ31”…”�”}”(hj0ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j%ôh´KGhj-ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjôubjìî)�”}”(hhh]”hÚ)�”}”(hŒORIGIN”h]”hŒORIGIN”…”�”}”(hjGôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j%ôh´KGhjDôubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjôubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ30:28”h]”hŒ30:28”…”�”}”(hjgôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KIhjdôubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjaôubjìî)�”}”(hhh]”hÚ)�”}”(hŒTYPE = GUC_HXG_TYPE_REQUEST_”h]”(hŒTYPE = ”…”�”}”(hjôh²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_TYPE_REQUEST_”h]”hŒGUC_HXG_TYPE_REQUEST”…”�”}”(hj‡ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_TYPE_REQUEST”hÁjcðuh1jÁ5hjôj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³juôh´KIhj|ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjaôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjôubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ27:16”h]”hŒ27:16”…”�”}”(hj¯ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KKhj¬ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj©ôubjìî)�”}”(hhh]”hÚ)�”}”(hŒ,**DATA0** - request data (depends on ACTION)”h]”(j)�”}”(hŒ **DATA0**”h]”hŒDATA0”…”�”}”(hjËôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇôubhŒ# - request data (depends on ACTION)”…”�”}”(hjÇôh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j½ôh´KKhjÄôubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj©ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjôubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ15:0”h]”hŒ15:0”…”�”}”(hjõôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KMhjòôubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjïôubjìî)�”}”(hhh]”hÚ)�”}”(hŒ"**ACTION** - requested action code”h]”(j)�”}”(hŒ **ACTION**”h]”hŒACTION”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj õubhŒ - requested action code”…”�”}”(hj õh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jõh´KMhj õubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjïôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjôubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjÛñh]”hŒ1”…”�”}”(hj;õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KOhj8õubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj5õubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjRõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jHõh´KOhjOõubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj5õubjìî)�”}”(hhh]”hÚ)�”}”(hŒ-**DATAn** - optional data (depends on ACTION)”h]”(j)�”}”(hŒ **DATAn**”h]”hŒDATAn”…”�”}”(hjmõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjiõubhŒ$ - optional data (depends on ACTION)”…”�”}”(hjiõh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KQhjfõubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhj5õubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjôubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ...”h]”hŒ...”…”�”}”(hj™õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j…õh´KQhj–õubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj“õubjìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj“õubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjôubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjèh]”hŒn”…”�”}”(hjÂõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KShj¿õubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¼õubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjÙõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÏõh´KShjÖõubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¼õubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhj¤óubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhj¡óubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhj�óubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KDhjjîh²hubh¶)�”}”(hŒ.. _HXG Fast Request:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒhxg-fast-request”uh1hµh´KDhjjîh²hh³j†îjõdKubhÚ)�”}”(hŒ**HXG Fast Request**”h]”j)�”}”(hjöh]”hŒHXG Fast Request”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöubah}”(h]”jöah ]”h"]”Œhxg fast request”ah$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KYhjjîh²hj î}”j-öj ösj¢î}”jöj ösjõdKubhÚ)�”}”(hŒ‚The `HXG Request`_ message should be used to initiate asynchronous activity for which confirmation or return data is not expected.”h]”(hŒThe ”…”�”}”(hj3öh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Request`_”h]”hŒ HXG Request”…”�”}”(hj;öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Request”hÁj¶òuh1jÁ5hj3öj7;KubhŒp message should be used to initiate asynchronous activity for which confirmation or return data is not expected.”…”�”}”(hj3öh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K_hjjîh²hubhÚ)�”}”(hŒFIf confirmation is required then `HXG Request`_ shall be used instead.”h]”(hŒ!If confirmation is required then ”…”�”}”(hjVöh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Request`_”h]”hŒ HXG Request”…”�”}”(hj^öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Request”hÁj¶òuh1jÁ5hjVöj7;KubhŒ shall be used instead.”…”�”}”(hjVöh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kbhjjîh²hubhÚ)�”}”(hŒ~The recipient of this message may only use `HXG Failure`_ message if it was unable to accept this request (like invalid data).”h]”(hŒ+The recipient of this message may only use ”…”�”}”(hjyöh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Failure`_”h]”hŒ HXG Failure”…”�”}”(hj�öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Failure”hÁj"óuh1jÁ5hjyöj7;KubhŒE message if it was unable to accept this request (like invalid data).”…”�”}”(hjyöh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kdhjjîh²hubhÚ)�”}”(hŒPFormat of `HXG Fast Request`_ message is same as `HXG Request`_ except **TYPE**.”h]”(hŒ Format of ”…”�”}”(hjœöh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Fast Request`_”h]”hŒHXG Fast Request”…”�”}”(hj¤öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒHXG Fast Request”hÁjöuh1jÁ5hjœöj7;KubhŒ message is same as ”…”�”}”(hjœöh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Request`_”h]”hŒ HXG Request”…”�”}”(hj¸öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Request”hÁj¶òuh1jÁ5hjœöj7;KubhŒ except ”…”�”}”(hjœöh²hh³Nh´Nubj)�”}”(hŒ**TYPE**”h]”hŒTYPE”…”�”}”(hjÌöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjœöubhŒ.”…”�”}”(hjœöh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kghjjîh²hubjgd)�”}”(hXê+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31 | ORIGIN - see `HXG Message`_ | | +-------+--------------------------------------------------------------+ | | 30:28 | TYPE = `GUC_HXG_TYPE_FAST_REQUEST`_ | | +-------+--------------------------------------------------------------+ | | 27:16 | DATA0 - see `HXG Request`_ | | +-------+--------------------------------------------------------------+ | | 15:0 | ACTION - see `HXG Request`_ | +---+-------+--------------------------------------------------------------+ |...| | DATAn - see `HXG Request`_ | +---+-------+--------------------------------------------------------------+ ”h]”j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjìöubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjìöubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhjìöubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj÷ubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kjhj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj÷ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hj7÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j-÷h´Kjhj4÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj ÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhjìöubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hj`÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Klhj]÷ubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjZ÷ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31”h]”hŒ31”…”�”}”(hjx÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jm÷h´Klhju÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjZ÷ubjìî)�”}”(hhh]”hÚ)�”}”(hŒORIGIN - see `HXG Message`_”h]”(hŒ ORIGIN - see ”…”�”}”(hj�÷h²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Message`_”h]”hŒ HXG Message”…”�”}”(hj—÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Message”hÁj…îuh1jÁ5hj�÷j7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jm÷h´KlhjŒ÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjZ÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjW÷ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ30:28”h]”hŒ30:28”…”�”}”(hj¿÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Knhj¼÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¹÷ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ#TYPE = `GUC_HXG_TYPE_FAST_REQUEST`_”h]”(hŒTYPE = ”…”�”}”(hj×÷h²hh³Nh´NubjÂ5)�”}”(hŒ`GUC_HXG_TYPE_FAST_REQUEST`_”h]”hŒGUC_HXG_TYPE_FAST_REQUEST”…”�”}”(hjß÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_TYPE_FAST_REQUEST”hÁj³ðuh1jÁ5hj×÷j7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÍ÷h´KnhjÔ÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¹÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjW÷ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ27:16”h]”hŒ27:16”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kphjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjøubjìî)�”}”(hhh]”hÚ)�”}”(hŒDATA0 - see `HXG Request`_”h]”(hŒ DATA0 - see ”…”�”}”(hjøh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Request`_”h]”hŒ HXG Request”…”�”}”(hj'øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Request”hÁj¶òuh1jÁ5hjøj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jøh´Kphjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjW÷ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ15:0”h]”hŒ15:0”…”�”}”(hjOøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KrhjLøubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjIøubjìî)�”}”(hhh]”hÚ)�”}”(hŒACTION - see `HXG Request`_”h]”(hŒ ACTION - see ”…”�”}”(hjgøh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Request`_”h]”hŒ HXG Request”…”�”}”(hjoøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Request”hÁj¶òuh1jÁ5hjgøj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j]øh´Krhjdøubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjIøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjW÷ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ...”h]”hŒ...”…”�”}”(hj—øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kthj”øubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj‘øubjìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj‘øubjìî)�”}”(hhh]”hÚ)�”}”(hŒDATAn - see `HXG Request`_”h]”(hŒ DATAn - see ”…”�”}”(hj¸øh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Request`_”h]”hŒ HXG Request”…”�”}”(hjÀøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Request”hÁj¶òuh1jÁ5hj¸øj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¥øh´Kthjµøubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj‘øubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjW÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhjìöubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhjéöubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhjåöubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kihjjîh²hubh¶)�”}”(hŒ.. _HXG Event:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒ hxg-event”uh1hµh´Kahjjîh²hh³j†îjõdKubhÚ)�”}”(hŒ **HXG Event**”h]”j)�”}”(hj ùh]”hŒ HXG Event”…”�”}”(hj ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjùubah}”(h]”jùah ]”h"]”Œ hxg event”ah$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kzhjjîh²hj î}”jùjüøsj¢î}”jùjüøsjõdKubhÚ)�”}”(hŒ�The `HXG Event`_ message should be used to initiate asynchronous activity that does not involves immediate confirmation nor data.”h]”(hŒThe ”…”�”}”(hj"ùh²hh³Nh´NubjÂ5)�”}”(hŒ `HXG Event`_”h]”hŒ HXG Event”…”�”}”(hj*ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Event”hÁjùuh1jÁ5hj"ùj7;KubhŒq message should be used to initiate asynchronous activity that does not involves immediate confirmation nor data.”…”�”}”(hj"ùh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K{hjjîh²hubhÚ)�”}”(hŒLFormat of **DATA0** and all **DATAn** fields depends on the **ACTION** code.”h]”(hŒ Format of ”…”�”}”(hjEùh²hh³Nh´Nubj)�”}”(hŒ **DATA0**”h]”hŒDATA0”…”�”}”(hjMùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjEùubhŒ and all ”…”�”}”(hjEùh²hh³Nh´Nubj)�”}”(hŒ **DATAn**”h]”hŒDATAn”…”�”}”(hj_ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjEùubhŒ fields depends on the ”…”�”}”(hjEùh²hh³Nh´Nubj)�”}”(hŒ **ACTION**”h]”hŒACTION”…”�”}”(hjqùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjEùubhŒ code.”…”�”}”(hjEùh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K~hjjîh²hubjgd)�”}”(hX+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31 | ORIGIN | | +-------+--------------------------------------------------------------+ | | 30:28 | TYPE = GUC_HXG_TYPE_EVENT_ | | +-------+--------------------------------------------------------------+ | | 27:16 | **DATA0** - event data (depends on ACTION) | | +-------+--------------------------------------------------------------+ | | 15:0 | **ACTION** - event action code | +---+-------+--------------------------------------------------------------+ | 1 | 31:0 | | +---+-------+ | |...| | **DATAn** - optional event data (depends on ACTION) | +---+-------+ | | n | 31:0 | | +---+-------+--------------------------------------------------------------+ ”h]”j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj‘ùubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj‘ùubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhj‘ùubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjµùubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hjÄùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K�hjÁùubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjµùubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hjÜùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÒùh´K�hjÙùubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjµùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj²ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhj‘ùubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kƒhjúubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjÿùubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31”h]”hŒ31”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³júh´Kƒhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÿùubjìî)�”}”(hhh]”hÚ)�”}”(hŒORIGIN”h]”hŒORIGIN”…”�”}”(hj4úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³júh´Kƒhj1úubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÿùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjüùubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ30:28”h]”hŒ30:28”…”�”}”(hjTúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K…hjQúubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjNúubjìî)�”}”(hhh]”hÚ)�”}”(hŒTYPE = GUC_HXG_TYPE_EVENT_”h]”(hŒTYPE = ”…”�”}”(hjlúh²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_TYPE_EVENT_”h]”hŒGUC_HXG_TYPE_EVENT”…”�”}”(hjtúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_TYPE_EVENT”hÁj‹ðuh1jÁ5hjlúj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jbúh´K…hjiúubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjNúubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjüùubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ27:16”h]”hŒ27:16”…”�”}”(hjœúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K‡hj™úubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj–úubjìî)�”}”(hhh]”hÚ)�”}”(hŒ***DATA0** - event data (depends on ACTION)”h]”(j)�”}”(hŒ **DATA0**”h]”hŒDATA0”…”�”}”(hj¸úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´úubhŒ! - event data (depends on ACTION)”…”�”}”(hj´úh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jªúh´K‡hj±úubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj–úubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjüùubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ15:0”h]”hŒ15:0”…”�”}”(hjâúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K‰hjßúubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÜúubjìî)�”}”(hhh]”hÚ)�”}”(hŒ**ACTION** - event action code”h]”(j)�”}”(hŒ **ACTION**”h]”hŒACTION”…”�”}”(hjþúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjúúubhŒ - event action code”…”�”}”(hjúúh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jðúh´K‰hj÷úubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÜúubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjüùubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjÛñh]”hŒ1”…”�”}”(hj(ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K‹hj%ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj"ûubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hj?ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j5ûh´K‹hj<ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj"ûubjìî)�”}”(hhh]”hÚ)�”}”(hŒ4**DATAn** - optional event data (depends on ACTION)”h]”(j)�”}”(hŒ **DATAn**”h]”hŒDATAn”…”�”}”(hjZûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjVûubhŒ+ - optional event data (depends on ACTION)”…”�”}”(hjVûh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K�hjSûubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhj"ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjüùubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ...”h]”hŒ...”…”�”}”(hj†ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jrûh´K�hjƒûubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj€ûubjìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj€ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjüùubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjèh]”hŒn”…”�”}”(hj¯ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K�hj¬ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj©ûubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjÆûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¼ûh´K�hjÃûubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj©ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjüùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhj‘ùubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhjŽùubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhjŠùubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K€hjjîh²hubh¶)�”}”(hŒ .. _HXG Busy:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁjLóuh1hµh´K}hjjîh²hh³j†îjõdKubhÚ)�”}”(hŒ **HXG Busy**”h]”j)�”}”(hjüh]”hŒHXG Busy”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjüubah}”(h]”jLóah ]”h"]”Œhxg busy”ah$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K•hjjîh²hj î}”jüjúûsj¢î}”jLójúûsjõdKubhÚ)�”}”(hŒ«The `HXG Busy`_ message may be used to acknowledge reception of the `HXG Request`_ message if the recipient expects that it processing will be longer than default timeout.”h]”(hŒThe ”…”�”}”(hjüh²hh³Nh´NubjÂ5)�”}”(hŒ `HXG Busy`_”h]”hŒHXG Busy”…”�”}”(hj'üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒHXG Busy”hÁjLóuh1jÁ5hjüj7;KubhŒ5 message may be used to acknowledge reception of the ”…”�”}”(hjüh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Request`_”h]”hŒ HXG Request”…”�”}”(hj;üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Request”hÁj¶òuh1jÁ5hjüj7;KubhŒY message if the recipient expects that it processing will be longer than default timeout.”…”�”}”(hjüh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K›hjjîh²hubhÚ)�”}”(hŒ:The **COUNTER** field may be used as a progress indicator.”h]”(hŒThe ”…”�”}”(hjVüh²hh³Nh´Nubj)�”}”(hŒ **COUNTER**”h]”hŒCOUNTER”…”�”}”(hj^üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjVüubhŒ+ field may be used as a progress indicator.”…”�”}”(hjVüh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KŸhjjîh²hubjgd)�”}”(hX¶+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31 | ORIGIN | | +-------+--------------------------------------------------------------+ | | 30:28 | TYPE = GUC_HXG_TYPE_NO_RESPONSE_BUSY_ | | +-------+--------------------------------------------------------------+ | | 27:0 | **COUNTER** - progress indicator | +---+-------+--------------------------------------------------------------+ ”h]”j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj~üubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj~üubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhj~üubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¢üubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hj±üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K¢hj®üubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¢üubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hjÉüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¿üh´K¢hjÆüubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¢üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjŸüubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhj~üubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hjòüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K¤hjïüubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjìüubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31”h]”hŒ31”…”�”}”(hj ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÿüh´K¤hjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjìüubjìî)�”}”(hhh]”hÚ)�”}”(hŒORIGIN”h]”hŒORIGIN”…”�”}”(hj!ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÿüh´K¤hjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjìüubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjéüubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ30:28”h]”hŒ30:28”…”�”}”(hjAýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K¦hj>ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj;ýubjìî)�”}”(hhh]”hÚ)�”}”(hŒ%TYPE = GUC_HXG_TYPE_NO_RESPONSE_BUSY_”h]”(hŒTYPE = ”…”�”}”(hjYýh²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_TYPE_NO_RESPONSE_BUSY_”h]”hŒGUC_HXG_TYPE_NO_RESPONSE_BUSY”…”�”}”(hjaýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_TYPE_NO_RESPONSE_BUSY”hÁjÛðuh1jÁ5hjYýj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jOýh´K¦hjVýubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj;ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjéüubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ27:0”h]”hŒ27:0”…”�”}”(hj‰ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K¨hj†ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjƒýubjìî)�”}”(hhh]”hÚ)�”}”(hŒ **COUNTER** - progress indicator”h]”(j)�”}”(hŒ **COUNTER**”h]”hŒCOUNTER”…”�”}”(hj¥ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡ýubhŒ - progress indicator”…”�”}”(hj¡ýh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j—ýh´K¨hjžýubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjƒýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjéüubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhj~üubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhj{üubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhjwüubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K¡hjjîh²hubh¶)�”}”(hŒ.. _HXG Retry:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁj7óuh1hµh´K’hjjîh²hh³j†îjõdKubhÚ)�”}”(hŒ **HXG Retry**”h]”j)�”}”(hjïýh]”hŒ HXG Retry”…”�”}”(hjñýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjíýubah}”(h]”j7óah ]”h"]”Œ hxg retry”ah$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K®hjjîh²hj î}”jþjãýsj¢î}”j7ójãýsjõdKubhÚ)�”}”(hŒ‹The `HXG Retry`_ message should be used by recipient to indicate that the `HXG Request`_ message was dropped and it should be resent again.”h]”(hŒThe ”…”�”}”(hjþh²hh³Nh´NubjÂ5)�”}”(hŒ `HXG Retry`_”h]”hŒ HXG Retry”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Retry”hÁj7óuh1jÁ5hjþj7;KubhŒ: message should be used by recipient to indicate that the ”…”�”}”(hjþh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Request`_”h]”hŒ HXG Request”…”�”}”(hj$þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Request”hÁj¶òuh1jÁ5hjþj7;KubhŒ3 message was dropped and it should be resent again.”…”�”}”(hjþh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K²hjjîh²hubhÚ)�”}”(hŒCThe **REASON** field may be used to provide additional information.”h]”(hŒThe ”…”�”}”(hj?þh²hh³Nh´Nubj)�”}”(hŒ **REASON**”h]”hŒREASON”…”�”}”(hjGþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?þubhŒ5 field may be used to provide additional information.”…”�”}”(hj?þh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kµhjjîh²hubjgd)�”}”(hX+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31 | ORIGIN | | +-------+--------------------------------------------------------------+ | | 30:28 | TYPE = GUC_HXG_TYPE_NO_RESPONSE_RETRY_ | | +-------+--------------------------------------------------------------+ | | 27:0 | **REASON** - reason for retry | | | | - _`GUC_HXG_RETRY_REASON_UNSPECIFIED` = 0 | +---+-------+--------------------------------------------------------------+ ”h]”j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjgþubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjgþubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhjgþubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj‹þubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hjšþh²h••h³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K¸hj—þubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj‹þubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hj²þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¨þh´K¸hj¯þubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj‹þubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjˆþubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhjgþubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hjÛþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KºhjØþubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjÕþubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31”h]”hŒ31”…”�”}”(hjóþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jèþh´Kºhjðþubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÕþubjìî)�”}”(hhh]”hÚ)�”}”(hŒORIGIN”h]”hŒORIGIN”…”�”}”(hj ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jèþh´Kºhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÕþubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjÒþubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ30:28”h]”hŒ30:28”…”�”}”(hj*ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K¼hj'ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj$ÿubjìî)�”}”(hhh]”hÚ)�”}”(hŒ&TYPE = GUC_HXG_TYPE_NO_RESPONSE_RETRY_”h]”(hŒTYPE = ”…”�”}”(hjBÿh²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_TYPE_NO_RESPONSE_RETRY_”h]”hŒGUC_HXG_TYPE_NO_RESPONSE_RETRY”…”�”}”(hjJÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_TYPE_NO_RESPONSE_RETRY”hÁjñuh1jÁ5hjBÿj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j8ÿh´K¼hj?ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj$ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjÒþubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ27:0”h]”hŒ27:0”…”�”}”(hjrÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K¾hjoÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjlÿubjìî)�”}”(hhh]”j)�”}”(hhh]”j)�”}”(hŒG**REASON** - reason for retry - _`GUC_HXG_RETRY_REASON_UNSPECIFIED` = 0”h]”(j$)�”}”(hŒ**REASON** - reason for retry”h]”(j)�”}”(hŒ **REASON**”h]”hŒREASON”…”�”}”(hj•ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘ÿubhŒ - reason for retry”…”�”}”(hj‘ÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#h³j€ÿh´K¾hj�ÿubj@)�”}”(hhh]”j°:)�”}”(hhh]”jµ:)�”}”(hŒ'_`GUC_HXG_RETRY_REASON_UNSPECIFIED` = 0”h]”hÚ)�”}”(hjµÿh]”(h¶)�”}”(hŒ#_`GUC_HXG_RETRY_REASON_UNSPECIFIED`”h]”hŒ GUC_HXG_RETRY_REASON_UNSPECIFIED”…”�”}”(hjºÿh²hh³Nh´Nubah}”(h]”Œ guc-hxg-retry-reason-unspecified”ah ]”h"]”Œ guc_hxg_retry_reason_unspecified”ah$]”h&]”uh1hµhj·ÿubhŒ = 0”…”�”}”(hj·ÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K¿hj³ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj°ÿubah}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³jÔÿh´K¿hj­ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj�ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j€ÿh´K¾hjŠÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjlÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjÒþubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhjgþubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhjdþubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhj`þubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´K·hjjîh²hubh¶)�”}”(hŒ.. _HXG Failure:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁj"óuh1hµh´K§hjjîh²hh³j†îjõdKubhÚ)�”}”(hŒ**HXG Failure**”h]”j)�”}”(hj%h]”hŒ HXG Failure”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#ubah}”(h]”j"óah ]”h"]”Œ hxg failure”ah$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KÅhjjîh²hj î}”j8jsj¢î}”j"ójsjõdKubhÚ)�”}”(hŒ~The `HXG Failure`_ message shall be used as a reply to the `HXG Request`_ message that could not be processed due to an error.”h]”(hŒThe ”…”�”}”(hj>h²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Failure`_”h]”hŒ HXG Failure”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Failure”hÁj"óuh1jÁ5hj>j7;KubhŒ) message shall be used as a reply to the ”…”�”}”(hj>h²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Request`_”h]”hŒ HXG Request”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Request”hÁj¶òuh1jÁ5hj>j7;KubhŒ5 message that could not be processed due to an error.”…”�”}”(hj>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KÊhjjîh²hubjgd)�”}”(hXP+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31 | ORIGIN | | +-------+--------------------------------------------------------------+ | | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_FAILURE_ | | +-------+--------------------------------------------------------------+ | | 27:16 | **HINT** - additional error hint | | +-------+--------------------------------------------------------------+ | | 15:0 | **ERROR** - error/result code | +---+-------+--------------------------------------------------------------+ ”h]”j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj|ubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj|ubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhj|ubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj ubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KÎhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j½h´KÎhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhj|ubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KÐhjíubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjêubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31”h]”hŒ31”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jýh´KÐhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjêubjìî)�”}”(hhh]”hÚ)�”}”(hŒORIGIN”h]”hŒORIGIN”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jýh´KÐhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjçubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ30:28”h]”hŒ30:28”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KÒhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj9ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ%TYPE = GUC_HXG_TYPE_RESPONSE_FAILURE_”h]”(hŒTYPE = ”…”�”}”(hjWh²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_TYPE_RESPONSE_FAILURE_”h]”hŒGUC_HXG_TYPE_RESPONSE_FAILURE”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_TYPE_RESPONSE_FAILURE”hÁj+ñuh1jÁ5hjWj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jMh´KÒhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjçubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ27:16”h]”hŒ27:16”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KÔhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj�ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ **HINT** - additional error hint”h]”(j)�”}”(hŒ**HINT**”h]”hŒHINT”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸubhŒ - additional error hint”…”�”}”(hjŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j•h´KÔhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjçubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ15:0”h]”hŒ15:0”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KÖhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÇubjìî)�”}”(hhh]”hÚ)�”}”(hŒ**ERROR** - error/result code”h]”(j)�”}”(hŒ **ERROR**”h]”hŒERROR”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjåubhŒ - error/result code”…”�”}”(hjåh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÛh´KÖhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhj|ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KÍhjjîh²hubh¶)�”}”(hŒ.. _HXG Response:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁj óuh1hµh´K»hjjîh²hh³j†îjõdKubhÚ)�”}”(hŒ**HXG Response**”h]”j)�”}”(hj3h]”hŒ HXG Response”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1ubah}”(h]”j óah ]”h"]”Œ hxg response”ah$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KÜhjjîh²hj î}”jFj'sj¢î}”j ój'sjõdKubhÚ)�”}”(hŒ„The `HXG Response`_ message shall be used as a reply to the `HXG Request`_ message that was successfully processed without an error.”h]”(hŒThe ”…”�”}”(hjLh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Response`_”h]”hŒ HXG Response”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Response”hÁj óuh1jÁ5hjLj7;KubhŒ) message shall be used as a reply to the ”…”�”}”(hjLh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Request`_”h]”hŒ HXG Request”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Request”hÁj¶òuh1jÁ5hjLj7;KubhŒ: message that was successfully processed without an error.”…”�”}”(hjLh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Káhjjîh²hubjgd)�”}”(hX„+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31 | ORIGIN | | +-------+--------------------------------------------------------------+ | | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_ | | +-------+--------------------------------------------------------------+ | | 27:0 | **DATA0** - data (depends on ACTION from `HXG Request`_) | +---+-------+--------------------------------------------------------------+ | 1 | 31:0 | | +---+-------+ | |...| | **DATAn** - data (depends on ACTION from `HXG Request`_) | +---+-------+ | | n | 31:0 | | +---+-------+--------------------------------------------------------------+ ”h]”j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjŠubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjŠubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhjŠubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj®ubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kåhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj®ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jËh´KåhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhjŠubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kçhjûubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjøubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31”h]”hŒ31”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j h´Kçhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjøubjìî)�”}”(hhh]”hÚ)�”}”(hŒORIGIN”h]”hŒORIGIN”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j h´Kçhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjõubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ30:28”h]”hŒ30:28”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´KéhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjGubjìî)�”}”(hhh]”hÚ)�”}”(hŒ%TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_”h]”(hŒTYPE = ”…”�”}”(hjeh²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_TYPE_RESPONSE_SUCCESS_”h]”hŒGUC_HXG_TYPE_RESPONSE_SUCCESS”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_TYPE_RESPONSE_SUCCESS”hÁjRñuh1jÁ5hjej7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j[h´Kéhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjõubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ27:0”h]”hŒ27:0”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Këhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj�ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ8**DATA0** - data (depends on ACTION from `HXG Request`_)”h]”(j)�”}”(hŒ **DATA0**”h]”hŒDATA0”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­ubhŒ - data (depends on ACTION from ”…”�”}”(hj­h²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Request`_”h]”hŒ HXG Request”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Request”hÁj¶òuh1jÁ5hj­j7;KubhŒ)”…”�”}”(hj­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j£h´Këhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjõubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjÛñh]”hŒ1”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kíhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjéubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jüh´Kíhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjéubjìî)�”}”(hhh]”hÚ)�”}”(hŒ8**DATAn** - data (depends on ACTION from `HXG Request`_)”h]”(j)�”}”(hŒ **DATAn**”h]”hŒDATAn”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ - data (depends on ACTION from ”…”�”}”(hjh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Request`_”h]”hŒ HXG Request”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Request”hÁj¶òuh1jÁ5hjj7;KubhŒ)”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kïhjubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjéubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjõubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ...”h]”hŒ...”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jMh´Kïhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj[ubjìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjõubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjèh]”hŒn”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kñhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj„ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j—h´Kñhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhjŠubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”h´Kähjjîh²hubh¶)�”}”(hŒ!.. _GuC MMIO based communication:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒguc-mmio-based-communication”uh1hµh´Khjjîh²hh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”ubhÚ)�”}”(hŒ **GuC MMIO based communication**”h]”j)�”}”(hjãh]”hŒGuC MMIO based communication”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáubah}”(h]”jßah ]”h"]”Œguc mmio based communication”ah$]”h&]”uh1hÙh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”h´Khjjîh²hj î}”jöjÕsj¢î}”jßjÕsubhÚ)�”}”(hŒ£The MMIO based communication between Host and GuC relies on special hardware registers which format could be defined by the software (so called scratch registers).”h]”hŒ£The MMIO based communication between Host and GuC relies on special hardware registers which format could be defined by the software (so called scratch registers).”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”h´K hjjîh²hubhÚ)�”}”(hŒÈEach MMIO based message, both Host to GuC (H2G) and GuC to Host (G2H) messages, which maximum length depends on number of available scratch registers, is directly written into those scratch registers.”h]”hŒÈEach MMIO based message, both Host to GuC (H2G) and GuC to Host (G2H) messages, which maximum length depends on number of available scratch registers, is directly written into those scratch registers.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”h´Khjjîh²hubhÚ)�”}”(hŒ¿For Gen9+, there are 16 software scratch registers 0xC180-0xC1B8, but no H2G command takes more than 4 parameters and the GuC firmware itself uses an 4-element array to store the H2G message.”h]”hŒ¿For Gen9+, there are 16 software scratch registers 0xC180-0xC1B8, but no H2G command takes more than 4 parameters and the GuC firmware itself uses an 4-element array to store the H2G message.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”h´Khjjîh²hubhÚ)�”}”(hŒ�For Gen11+, there are additional 4 registers 0x190240-0x19024C, which are, regardless on lower count, preferred over legacy ones.”h]”hŒ�For Gen11+, there are additional 4 registers 0x190240-0x19024C, which are, regardless on lower count, preferred over legacy ones.”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”h´Khjjîh²hubhÚ)�”}”(hŒ”The MMIO based communication is mainly used during driver initialization phase to setup the `CTB based communication`_ that will be used afterwards.”h]”(hŒ\The MMIO based communication is mainly used during driver initialization phase to setup the ”…”�”}”(hj8h²hh³Nh´NubjÂ5)�”}”(hŒ`CTB based communication`_”h]”hŒCTB based communication”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒCTB based communication”hÁŒctb-based-communication”uh1jÁ5hj8j7;KubhŒ that will be used afterwards.”…”�”}”(hj8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”h´Khjjîh²hubh¶)�”}”(hŒ.. _MMIO HXG Message:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒmmio-hxg-message”uh1hµh´Khjjîh²hh³jàjõdKubhÚ)�”}”(hŒ**MMIO HXG Message**”h]”j)�”}”(hjih]”hŒMMIO HXG Message”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjgubah}”(h]”jfah ]”h"]”Œmmio hxg message”ah$]”h&]”uh1hÙh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”h´Khjjîh²hj î}”j|j\sj¢î}”jfj\sjõdKubhÚ)�”}”(hŒBFormat of the MMIO messages follows definitions of `HXG Message`_.”h]”(hŒ3Format of the MMIO messages follows definitions of ”…”�”}”(hj‚h²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Message`_”h]”hŒ HXG Message”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Message”hÁj…îuh1jÁ5hj‚j7;KubhŒ.”…”�”}”(hj‚h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”h´K"hjjîh²hubjgd)�”}”(hX¶+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31:0 | | +---+-------+ | |...| | [Embedded `HXG Message`_] | +---+-------+ | | n | 31:0 | | +---+-------+--------------------------------------------------------------+ ”h]”j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj¬ubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj¬ubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhj¬ubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÐubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”h´K%hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÐubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jíh´K%hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhj¬ubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”h´K'hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j-h´K'hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubjìî)�”}”(hhh]”hÚ)�”}”(hŒ[Embedded `HXG Message`_]”h]”(hŒ [Embedded ”…”�”}”(hjNh²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Message`_”h]”hŒ HXG Message”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Message”hÁj…îuh1jÁ5hjNj7;KubhŒ]”…”�”}”(hjNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”h´K)hjKubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ...”h]”hŒ...”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jph´K)hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj~ubjìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjèh]”hŒn”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”h´K+hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj§ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jºh´K+hjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhj¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”h´K$hjjîh²hubh¶)�”}”(hŒ.. _CT Buffer:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒ ct-buffer”uh1hµh´Khjjîh²hh³NjõdKubhÚ)�”}”(hŒ **CT Buffer**”h]”j)�”}”(hjh]”hŒ CT Buffer”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”jah ]”h"]”Œ ct buffer”ah$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´Khjjîh²hj î}”jjøsj¢î}”jjøsjõdKubhÚ)�”}”(hŒ+Circular buffer used to send `CTB Message`_”h]”(hŒCircular buffer used to send ”…”�”}”(hjh²hh³Nh´NubjÂ5)�”}”(hŒ`CTB Message`_”h]”hŒ CTB Message”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ CTB Message”hÁŒ ctb-message”uh1jÁ5hjj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´Khjjîh²hubh¶)�”}”(hŒ.. _CTB Descriptor:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒctb-descriptor”uh1hµh´Khjjîh²hh³NjõdKubhÚ)�”}”(hŒ**CTB Descriptor**”h]”j)�”}”(hjKh]”hŒCTB Descriptor”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubah}”(h]”jHah ]”h"]”Œctb descriptor”ah$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´Khjjîh²hj î}”j^j>sj¢î}”jHj>sjõdKubjgd)�”}”(hXì+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31:0 | **HEAD** - offset (in dwords) to the last dword that was | | | | read from the `CT Buffer`_. | | | | It can only be updated by the receiver. | +---+-------+--------------------------------------------------------------+ | 1 | 31:0 | **TAIL** - offset (in dwords) to the last dword that was | | | | written to the `CT Buffer`_. | | | | It can only be updated by the sender. | +---+-------+--------------------------------------------------------------+ | 2 | 31:0 | **STATUS** - status of the CTB | | | | | | | | - _`GUC_CTB_STATUS_NO_ERROR` = 0 (normal operation) | | | | - _`GUC_CTB_STATUS_OVERFLOW` = 1 (head/tail too large) | | | | - _`GUC_CTB_STATUS_UNDERFLOW` = 2 (truncated message) | | | | - _`GUC_CTB_STATUS_MISMATCH` = 4 (head/tail modified) | | | | - _`GUC_CTB_STATUS_UNUSED` = 8 (CTB is not in use) | +---+-------+--------------------------------------------------------------+ |...| | RESERVED = MBZ | +---+-------+--------------------------------------------------------------+ | 15| 31:0 | RESERVED = MBZ | +---+-------+--------------------------------------------------------------+ ”h]”j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjkubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjkubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhjkubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj�ubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´Khj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj�ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¬h´Khj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhjkubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´KhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÙubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jìh´Khjóubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÙubjìî)�”}”(hhh]”hÚ)�”}”(hŒ|**HEAD** - offset (in dwords) to the last dword that was read from the `CT Buffer`_. It can only be updated by the receiver.”h]”(j)�”}”(hŒ**HEAD**”h]”hŒHEAD”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ? - offset (in dwords) to the last dword that was read from the ”…”�”}”(hj h²hh³Nh´NubjÂ5)�”}”(hŒ `CT Buffer`_”h]”hŒ CT Buffer”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ CT Buffer”hÁjuh1jÁ5hj j7;KubhŒ). It can only be updated by the receiver.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jìh´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjÖubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjÛñh]”hŒ1”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´KhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjIubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j\h´Khjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjIubjìî)�”}”(hhh]”hÚ)�”}”(hŒ{**TAIL** - offset (in dwords) to the last dword that was written to the `CT Buffer`_. It can only be updated by the sender.”h]”(j)�”}”(hŒ**TAIL**”h]”hŒTAIL”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}ubhŒ@ - offset (in dwords) to the last dword that was written to the ”…”�”}”(hj}h²hh³Nh´NubjÂ5)�”}”(hŒ `CT Buffer`_”h]”hŒ CT Buffer”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ CT Buffer”hÁjuh1jÁ5hj}j7;KubhŒ'. It can only be updated by the sender.”…”�”}”(hj}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j\h´Khjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjÖubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ2”h]”hŒ2”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K hj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¹ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÍh´K hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¹ubjìî)�”}”(hhh]”(hÚ)�”}”(hŒ**STATUS** - status of the CTB”h]”(j)�”}”(hŒ **STATUS**”h]”hŒSTATUS”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjîubhŒ - status of the CTB”…”�”}”(hjîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÍh´K hjëubjgd)�”}”(hX - _`GUC_CTB_STATUS_NO_ERROR` = 0 (normal operation) - _`GUC_CTB_STATUS_OVERFLOW` = 1 (head/tail too large) - _`GUC_CTB_STATUS_UNDERFLOW` = 2 (truncated message) - _`GUC_CTB_STATUS_MISMATCH` = 4 (head/tail modified) - _`GUC_CTB_STATUS_UNUSED` = 8 (CTB is not in use)”h]”j°:)�”}”(hhh]”(jµ:)�”}”(hŒ1_`GUC_CTB_STATUS_NO_ERROR` = 0 (normal operation)”h]”hÚ)�”}”(hj h]”(h¶)�”}”(hŒ_`GUC_CTB_STATUS_NO_ERROR`”h]”hŒGUC_CTB_STATUS_NO_ERROR”…”�”}”(hj h²hh³Nh´Nubah}”(h]”Œguc-ctb-status-no-error”ah ]”h"]”Œguc_ctb_status_no_error”ah$]”h&]”uh1hµhj ubhŒ = 0 (normal operation)”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K"hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj ubjµ:)�”}”(hŒ4_`GUC_CTB_STATUS_OVERFLOW` = 1 (head/tail too large)”h]”hÚ)�”}”(hj; h]”(h¶)�”}”(hŒ_`GUC_CTB_STATUS_OVERFLOW`”h]”hŒGUC_CTB_STATUS_OVERFLOW”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”Œguc-ctb-status-overflow”ah ]”h"]”Œguc_ctb_status_overflow”ah$]”h&]”uh1hµhj= ubhŒ = 1 (head/tail too large)”…”�”}”(hj= h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K#hj9 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj ubjµ:)�”}”(hŒ3_`GUC_CTB_STATUS_UNDERFLOW` = 2 (truncated message)”h]”hÚ)�”}”(hjc h]”(h¶)�”}”(hŒ_`GUC_CTB_STATUS_UNDERFLOW`”h]”hŒGUC_CTB_STATUS_UNDERFLOW”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”Œguc-ctb-status-underflow”ah ]”h"]”Œguc_ctb_status_underflow”ah$]”h&]”uh1hµhje ubhŒ = 2 (truncated message)”…”�”}”(hje h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K$hja ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj ubjµ:)�”}”(hŒ3_`GUC_CTB_STATUS_MISMATCH` = 4 (head/tail modified)”h]”hÚ)�”}”(hj‹ h]”(h¶)�”}”(hŒ_`GUC_CTB_STATUS_MISMATCH`”h]”hŒGUC_CTB_STATUS_MISMATCH”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”Œguc-ctb-status-mismatch”ah ]”h"]”Œguc_ctb_status_mismatch”ah$]”h&]”uh1hµhj� ubhŒ = 4 (head/tail modified)”…”�”}”(hj� h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K%hj‰ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj ubjµ:)�”}”(hŒ0_`GUC_CTB_STATUS_UNUSED` = 8 (CTB is not in use)”h]”hÚ)�”}”(hj³ h]”(h¶)�”}”(hŒ_`GUC_CTB_STATUS_UNUSED`”h]”hŒGUC_CTB_STATUS_UNUSED”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”Œguc-ctb-status-unused”ah ]”h"]”Œguc_ctb_status_unused”ah$]”h&]”uh1hµhjµ ubhŒ = 8 (CTB is not in use)”…”�”}”(hjµ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K&hj± ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj ubeh}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³j2 h´K"hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³j2 h´K"hjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjÖubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ...”h]”hŒ...”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K(hjô ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjñ ubjìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjñ ubjìî)�”}”(hhh]”hÚ)�”}”(hŒRESERVED = MBZ”h]”hŒRESERVED = MBZ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j h´K(hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjñ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjÖubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ15”h]”hŒ15”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K*hj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj2 ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jF h´K*hjM ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj2 ubjìî)�”}”(hhh]”hÚ)�”}”(hŒRESERVED = MBZ”h]”hŒRESERVED = MBZ”…”�”}”(hjg h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jF h´K*hjd ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj2 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhjkubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´Khjjîh²hubh¶)�”}”(hŒ.. _CTB Message:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁj6uh1hµh´K%hjjîh²hh³NjõdKubhÚ)�”}”(hŒ**CTB Message**”h]”j)�”}”(hj§ h]”hŒ CTB Message”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥ ubah}”(h]”j6ah ]”h"]”Œ ctb message”ah$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K0hjjîh²hj î}”jº j› sj¢î}”j6j› sjõdKubjgd)�”}”(hXk+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31:16 | **FENCE** - message identifier | | +-------+--------------------------------------------------------------+ | | 15:12 | **FORMAT** - format of the CTB message | | | | - _`GUC_CTB_FORMAT_HXG` = 0 - see `CTB HXG Message`_ | | +-------+--------------------------------------------------------------+ | | 11:8 | **RESERVED** | | +-------+--------------------------------------------------------------+ | | 7:0 | **NUM_DWORDS** - length of the CTB message (w/o header) | +---+-------+--------------------------------------------------------------+ | 1 | 31:0 | optional (depends on FORMAT) | +---+-------+ | |...| | | +---+-------+ | | n | 31:0 | | +---+-------+--------------------------------------------------------------+ ”h]”j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjÇ ubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjÇ ubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhjÇ ubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjë ubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K?hj÷ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjë ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j h´K?hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjë ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjè ubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhjÇ ubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´KAhj8 ubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhj5 ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:16”h]”hŒ31:16”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jH h´KAhjP ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj5 ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ**FENCE** - message identifier”h]”(j)�”}”(hŒ **FENCE**”h]”hŒFENCE”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjj ubhŒ - message identifier”…”�”}”(hjj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jH h´KAhjg ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj5 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj2 ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ15:12”h]”hŒ15:12”…”�”}”(hj˜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´KChj• ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj’ ubjìî)�”}”(hhh]”j)�”}”(hhh]”j)�”}”(hŒ[**FORMAT** - format of the CTB message - _`GUC_CTB_FORMAT_HXG` = 0 - see `CTB HXG Message`_”h]”(j$)�”}”(hŒ&**FORMAT** - format of the CTB message”h]”(j)�”}”(hŒ **FORMAT**”h]”hŒFORMAT”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj· ubhŒ - format of the CTB message”…”�”}”(hj· h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#h³j¦ h´KChj³ ubj@)�”}”(hhh]”j°:)�”}”(hhh]”jµ:)�”}”(hŒ2_`GUC_CTB_FORMAT_HXG` = 0 - see `CTB HXG Message`_”h]”hÚ)�”}”(hjÛ h]”(h¶)�”}”(hŒ_`GUC_CTB_FORMAT_HXG`”h]”hŒGUC_CTB_FORMAT_HXG”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”Œguc-ctb-format-hxg”ah ]”h"]”Œguc_ctb_format_hxg”ah$]”h&]”uh1hµhjÝ jõdKubhŒ = 0 - see ”…”�”}”(hjÝ h²hh³Nh´NubjÂ5)�”}”(hŒ`CTB HXG Message`_”h]”hŒCTB HXG Message”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒCTB HXG Message”hÁŒctb-hxg-message”uh1jÁ5hjÝ j7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´KDhjÙ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjÖ ubah}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³j h´KDhjÓ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj³ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¦ h´KChj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj’ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj2 ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ11:8”h]”hŒ11:8”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´KFhj9 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj6 ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ **RESERVED**”h]”j)�”}”(hjV h]”hŒRESERVED”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jJ h´KFhjQ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj6 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj2 ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ7:0”h]”hŒ7:0”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´KHhjz ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjw ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ7**NUM_DWORDS** - length of the CTB message (w/o header)”h]”(j)�”}”(hŒ**NUM_DWORDS**”h]”hŒ NUM_DWORDS”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj• ubhŒ) - length of the CTB message (w/o header)”…”�”}”(hj• h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j‹ h´KHhj’ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjw ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj2 ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjÛñh]”hŒ1”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´KJhjÀ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj½ ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÐ h´KJhj× ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj½ ubjìî)�”}”(hhh]”hÚ)�”}”(hŒoptional (depends on FORMAT)”h]”hŒoptional (depends on FORMAT)”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÐ h´KJhjî ubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhj½ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj2 ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ...”h]”hŒ...”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´KLhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj ubjìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj2 ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjèh]”hŒn”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´KNhj9 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj6 ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jI h´KNhjP ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj6 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj2 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhjÇ ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhjÄ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhjÀ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K>hjjîh²hubh¶)�”}”(hŒ.. _CTB HXG Message:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁj uh1hµh´K=hjjîh²hh³NjõdKubhÚ)�”}”(hŒ**CTB HXG Message**”h]”j)�”}”(hj“ h]”hŒCTB HXG Message”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘ ubah}”(h]”j ah ]”h"]”Œctb hxg message”ah$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´KThjjîh²hj î}”j¦ j‡ sj¢î}”j j‡ sjõdKubjgd)�”}”(hX+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31:16 | FENCE | | +-------+--------------------------------------------------------------+ | | 15:12 | FORMAT = GUC_CTB_FORMAT_HXG_ | | +-------+--------------------------------------------------------------+ | | 11:8 | RESERVED = MBZ | | +-------+--------------------------------------------------------------+ | | 7:0 | NUM_DWORDS = length (in dwords) of the embedded HXG message | +---+-------+--------------------------------------------------------------+ | 1 | 31:0 | | +---+-------+ | |...| | [Embedded `HXG Message`_] | +---+-------+ | | n | 31:0 | | +---+-------+--------------------------------------------------------------+ ”h]”j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj³ ubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhj³ ubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhj³ ubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj× ubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K_hjã ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj× ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jô h´K_hjû ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj× ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjÔ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhj³ ubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´Kahj$ubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhj!ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:16”h]”hŒ31:16”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j4h´Kahj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj!ubjìî)�”}”(hhh]”hÚ)�”}”(hŒFENCE”h]”hŒFENCE”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j4h´KahjSubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ15:12”h]”hŒ15:12”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´Kchjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjpubjìî)�”}”(hhh]”hÚ)�”}”(hŒFORMAT = GUC_CTB_FORMAT_HXG_”h]”(hŒ FORMAT = ”…”�”}”(hjŽh²hh³Nh´NubjÂ5)�”}”(hŒGUC_CTB_FORMAT_HXG_”h]”hŒGUC_CTB_FORMAT_HXG”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_CTB_FORMAT_HXG”hÁjê uh1jÁ5hjŽj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j„h´Kchj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ11:8”h]”hŒ11:8”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´Kehj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¸ubjìî)�”}”(hhh]”hÚ)�”}”(hŒRESERVED = MBZ”h]”hŒRESERVED = MBZ”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÌh´KehjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ7:0”h]”hŒ7:0”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´Kghjóubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjðubjìî)�”}”(hhh]”hÚ)�”}”(hŒ;NUM_DWORDS = length (in dwords) of the embedded HXG message”h]”hŒ;NUM_DWORDS = length (in dwords) of the embedded HXG message”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jh´Kghj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjÛñh]”hŒ1”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´Kihj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj(ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j;h´KihjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj(ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ[Embedded `HXG Message`_]”h]”(hŒ [Embedded ”…”�”}”(hj\h²hh³Nh´NubjÂ5)�”}”(hŒ`HXG Message`_”h]”hŒ HXG Message”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ HXG Message”hÁj…îuh1jÁ5hj\j7;KubhŒ]”…”�”}”(hj\h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´KkhjYubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ...”h]”hŒ...”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j~h´Kkhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjŒubjìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjèh]”hŒn”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´Kmhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjµubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÈh´KmhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhj³ ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhj¬ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K^hjjîh²hubh¶)�”}”(hŒ.. _CTB based communication:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁjPuh1hµh´KThjjîh²hh³NjõdKubhÚ)�”}”(hŒ**CTB based communication**”h]”j)�”}”(hjh]”hŒCTB based communication”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”jPah ]”h"]”Œctb based communication”ah$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´Kshjjîh²hj î}”j%jsj¢î}”jPjsjõdKubhÚ)�”}”(hŒØThe CTB (command transport buffer) communication between Host and GuC is based on u32 data stream written to the shared buffer. One buffer can be used to transmit data only in one direction (one-directional channel).”h]”hŒØThe CTB (command transport buffer) communication between Host and GuC is based on u32 data stream written to the shared buffer. One buffer can be used to transmit data only in one direction (one-directional channel).”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´Kwhjjîh²hubhÚ)�”}”(hX Current status of the each buffer is stored in the buffer descriptor. Buffer descriptor holds tail and head fields that represents active data stream. The tail field is updated by the data producer (sender), and head field is updated by the data consumer (receiver)::”h]”hX Current status of the each buffer is stored in the buffer descriptor. Buffer descriptor holds tail and head fields that represents active data stream. The tail field is updated by the data producer (sender), and head field is updated by the data consumer (receiver):”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K{hjjîh²hubjA#)�”}”(hX·+------------+ | DESCRIPTOR | +=================+============+========+ +============+ | | MESSAGE(s) | | | address |--------->+=================+============+========+ +------------+ | head | ^-----head--------^ +------------+ | tail | ^---------tail-----------------^ +------------+ | size | ^---------------size--------------------^ +------------+”h]”hX·+------------+ | DESCRIPTOR | +=================+============+========+ +============+ | | MESSAGE(s) | | | address |--------->+=================+============+========+ +------------+ | head | ^-----head--------^ +------------+ | tail | ^---------tail-----------------^ +------------+ | size | ^---------------size--------------------^ +------------+”…”�”}”hjIsbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K€hjjîh²hubhÚ)�”}”(hŒ–Each message in data stream starts with the single u32 treated as a header, followed by optional set of u32 data that makes message specific payload::”h]”hŒ•Each message in data stream starts with the single u32 treated as a header, followed by optional set of u32 data that makes message specific payload:”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´KŒhjjîh²hubjA#)�”}”(hXÐ+------------+---------+---------+---------+ | MESSAGE | +------------+---------+---------+---------+ | msg[0] | [1] | ... | [n-1] | +------------+---------+---------+---------+ | MESSAGE | MESSAGE PAYLOAD | + HEADER +---------+---------+---------+ | | 0 | ... | n | +======+=====+=========+=========+=========+ | 31:16| code| | | | +------+-----+ | | | | 15:5|flags| | | | +------+-----+ | | | | 4:0| len| | | | +------+-----+---------+---------+---------+ ^-------------len-------------^”h]”hXÐ+------------+---------+---------+---------+ | MESSAGE | +------------+---------+---------+---------+ | msg[0] | [1] | ... | [n-1] | +------------+---------+---------+---------+ | MESSAGE | MESSAGE PAYLOAD | + HEADER +---------+---------+---------+ | | 0 | ... | n | +======+=====+=========+=========+=========+ | 31:16| code| | | | +------+-----+ | | | | 15:5|flags| | | | +------+-----+ | | | | 4:0| len| | | | +------+-----+---------+---------+---------+ ^-------------len-------------^”…”�”}”hjgsbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K�hjjîh²hubhÚ)�”}”(hŒThe message header consists of:”h]”hŒThe message header consists of:”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K¡hjjîh²hubj°:)�”}”(hhh]”(jµ:)�”}”(hŒ9**len**, indicates length of the message payload (in u32)”h]”hÚ)�”}”(hjŠh]”(j)�”}”(hŒ**len**”h]”hŒlen”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŒubhŒ2, indicates length of the message payload (in u32)”…”�”}”(hjŒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K£hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj…ubjµ:)�”}”(hŒ **code**, indicates message code”h]”hÚ)�”}”(hj°h]”(j)�”}”(hŒ**code**”h]”hŒcode”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj²ubhŒ, indicates message code”…”�”}”(hj²h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K¤hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj…ubjµ:)�”}”(hŒ;**flags**, holds various bits to control message handling ”h]”hÚ)�”}”(hŒ9**flags**, holds various bits to control message handling”h]”(j)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØubhŒ0, holds various bits to control message handling”…”�”}”(hjØh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”h´K¥hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj…ubeh}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³j§h´K£hjjîh²hubh¶)�”}”(hŒ.. _HOST2GUC_SELF_CFG:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒhost2guc-self-cfg”uh1hµh´Khjjîh²hh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”jõdKubhÚ)�”}”(hŒ**HOST2GUC_SELF_CFG**”h]”j)�”}”(hjh]”hŒHOST2GUC_SELF_CFG”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”j ah ]”h"]”Œhost2guc_self_cfg”ah$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´Khjjîh²hj î}”j"jsj¢î}”j jsjõdKubhÚ)�”}”(hŒIThis message is used by Host KMD to setup of the `GuC Self Config KLVs`_.”h]”(hŒ1This message is used by Host KMD to setup of the ”…”�”}”(hj(h²hh³Nh´NubjÂ5)�”}”(hŒ`GuC Self Config KLVs`_”h]”hŒGuC Self Config KLVs”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGuC Self Config KLVs”hÁŒguc-self-config-klvs”uh1jÁ5hj(j7;KubhŒ.”…”�”}”(hj(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´K hjjîh²hubhÚ)�”}”(hŒ1This message must be sent as `MMIO HXG Message`_.”h]”(hŒThis message must be sent as ”…”�”}”(hjLh²hh³Nh´NubjÂ5)�”}”(hŒ`MMIO HXG Message`_”h]”hŒMMIO HXG Message”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒMMIO HXG Message”hÁjfuh1jÁ5hjLj7;KubhŒ.”…”�”}”(hjLh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´K hjjîh²hubjgd)�”}”(hXU +---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31 | ORIGIN = GUC_HXG_ORIGIN_HOST_ | | +-------+--------------------------------------------------------------+ | | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_ | | +-------+--------------------------------------------------------------+ | | 27:16 | DATA0 = MBZ | | +-------+--------------------------------------------------------------+ | | 15:0 | ACTION = _`GUC_ACTION_HOST2GUC_SELF_CFG` = 0x0508 | +---+-------+--------------------------------------------------------------+ | 1 | 31:16 | **KLV_KEY** - KLV key, see `GuC Self Config KLVs`_ | | +-------+--------------------------------------------------------------+ | | 15:0 | **KLV_LEN** - KLV length | | | | | | | | - 32 bit KLV = 1 | | | | - 64 bit KLV = 2 | +---+-------+--------------------------------------------------------------+ | 2 | 31:0 | **VALUE32** - Bits 31-0 of the KLV value | +---+-------+--------------------------------------------------------------+ | 3 | 31:0 | **VALUE64** - Bits 63-32 of the KLV value (**KLV_LEN** = 2) | +---+-------+--------------------------------------------------------------+ +---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31 | ORIGIN = GUC_HXG_ORIGIN_GUC_ | | +-------+--------------------------------------------------------------+ | | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_ | | +-------+--------------------------------------------------------------+ | | 27:0 | DATA0 = **NUM** - 1 if KLV was parsed, 0 if not recognized | +---+-------+--------------------------------------------------------------+ ”•h]”(j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjvubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjvubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhjvubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjšubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´Khj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjšubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j·h´Khj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhjvubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´Khjçubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjäubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31”h]”hŒ31”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j÷h´Khjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjäubjìî)�”}”(hhh]”hÚ)�”}”(hŒORIGIN = GUC_HXG_ORIGIN_HOST_”h]”(hŒ ORIGIN = ”…”�”}”(hjh²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_ORIGIN_HOST_”h]”hŒGUC_HXG_ORIGIN_HOST”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_ORIGIN_HOST”hÁj§ïuh1jÁ5hjj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j÷h´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjáubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ30:28”h]”hŒ30:28”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjCubjìî)�”}”(hhh]”hÚ)�”}”(hŒTYPE = GUC_HXG_TYPE_REQUEST_”h]”(hŒTYPE = ”…”�”}”(hjah²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_TYPE_REQUEST_”h]”hŒGUC_HXG_TYPE_REQUEST”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_TYPE_REQUEST”hÁjcðuh1jÁ5hjaj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jWh´Khj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjáubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ27:16”h]”hŒ27:16”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj‹ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ DATA0 = MBZ”h]”hŒ DATA0 = MBZ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jŸh´Khj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjáubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ15:0”h]”hŒ15:0”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÃubjìî)�”}”(hhh]”hÚ)�”}”(hŒ1ACTION = _`GUC_ACTION_HOST2GUC_SELF_CFG` = 0x0508”h]”(hŒ ACTION = ”…”�”}”(hjáh²hh³Nh´Nubh¶)�”}”(hŒ_`GUC_ACTION_HOST2GUC_SELF_CFG`”h]”hŒGUC_ACTION_HOST2GUC_SELF_CFG”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”Œguc-action-host2guc-self-cfg”ah ]”h"]”Œguc_action_host2guc_self_cfg”ah$]”h&]”uh1hµhjáubhŒ = 0x0508”…”�”}”(hjáh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j×h´KhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjáubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjÛñh]”hŒ1”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´Khjubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:16”h]”hŒ31:16”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j"h´Khj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubjìî)�”}”(hhh]”hÚ)�”}”(hŒ2**KLV_KEY** - KLV key, see `GuC Self Config KLVs`_”h]”(j)�”}”(hŒ **KLV_KEY**”h]”hŒKLV_KEY”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDubhŒ - KLV key, see ”…”�”}”(hjDh²hh³Nh´NubjÂ5)�”}”(hŒ`GuC Self Config KLVs`_”h]”hŒGuC Self Config KLVs”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGuC Self Config KLVs”hÁj@uh1jÁ5hjDj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j"h´KhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjáubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ15:0”h]”hŒ15:0”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj|ubjìî)�”}”(hhh]”(hÚ)�”}”(hŒ**KLV_LEN** - KLV length”h]”(j)�”}”(hŒ **KLV_LEN**”h]”hŒKLV_LEN”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjšubhŒ - KLV length”…”�”}”(hjšh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j�h´Khj—ubjgd)�”}”(hŒ!- 32 bit KLV = 1 - 64 bit KLV = 2”h]”j°:)�”}”(hhh]”(jµ:)�”}”(hŒ32 bit KLV = 1”h]”hÚ)�”}”(hj¿h]”hŒ32 bit KLV = 1”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´Khj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjºubjµ:)�”}”(hŒ64 bit KLV = 2”h]”hÚ)�”}”(hj×h]”hŒ64 bit KLV = 2”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjºubeh}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³jÎh´Khj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³jÎh´Khj—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjáubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjÁh]”hŒ2”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´K hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jh´K hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubjìî)�”}”(hhh]”hÚ)�”}”(hŒ(**VALUE32** - Bits 31-0 of the KLV value”h]”(j)�”}”(hŒ **VALUE32**”h]”hŒVALUE32”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9ubhŒ - Bits 31-0 of the KLV value”…”�”}”(hj9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jh´K hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjáubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ3”h]”hŒ3”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´K"hjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjaubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³juh´K"hj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjaubjìî)�”}”(hhh]”hÚ)�”}”(hŒ;**VALUE64** - Bits 63-32 of the KLV value (**KLV_LEN** = 2)”h]”(j)�”}”(hŒ **VALUE64**”h]”hŒVALUE64”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–ubhŒ - Bits 63-32 of the KLV value (”…”�”}”(hj–h²hh³Nh´Nubj)�”}”(hŒ **KLV_LEN**”h]”hŒKLV_LEN”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–ubhŒ = 2)”…”�”}”(hj–h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³juh´K"hj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhjvubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhjoubj¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjæubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjæubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhjæubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj ubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´K&hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j'h´K&hj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhjæubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´K(hjWubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjTubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31”h]”hŒ31”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jgh´K(hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjTubjìî)�”}”(hhh]”hÚ)�”}”(hŒORIGIN = GUC_HXG_ORIGIN_GUC_”h]”(hŒ ORIGIN = ”…”�”}”(hj‰h²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_ORIGIN_GUC_”h]”hŒGUC_HXG_ORIGIN_GUC”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_ORIGIN_GUC”hÁjÐïuh1jÁ5hj‰j7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jgh´K(hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjQubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ30:28”h]”hŒ30:28”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´K*hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj³ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ%TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_”h]”(hŒTYPE = ”…”�”}”(hjÑh²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_TYPE_RESPONSE_SUCCESS_”h]”hŒGUC_HXG_TYPE_RESPONSE_SUCCESS”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_TYPE_RESPONSE_SUCCESS”hÁjRñuh1jÁ5hjÑj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÇh´K*hjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjQubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ27:0”h]”hŒ27:0”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´K,hjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjûubjìî)�”}”(hhh]”hÚ)�”}”(hŒ:DATA0 = **NUM** - 1 if KLV was parsed, 0 if not recognized”h]”(hŒDATA0 = ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ**NUM**”h]”hŒNUM”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ+ - 1 if KLV was parsed, 0 if not recognized”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jh´K,hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhjæubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´Khjjîh²hubh¶)�”}”(hŒ.. _HOST2GUC_CONTROL_CTB:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒhost2guc-control-ctb”uh1hµh´K+hjjîh²hh³j ubhÚ)�”}”(hŒ**HOST2GUC_CONTROL_CTB**”h]”j)�”}”(hjlh]”hŒHOST2GUC_CONTROL_CTB”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjjubah}”(h]”jiah ]”h"]”Œhost2guc_control_ctb”ah$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´K2hjjîh²hj î}”jj_sj¢î}”jij_subhÚ)�”}”(hŒMThis H2G action allows Vf Host to enable or disable H2G and G2H `CT Buffer`_.”h]”(hŒ@This H2G action allows Vf Host to enable or disable H2G and G2H ”…”�”}”(hj…h²hh³Nh´NubjÂ5)�”}”(hŒ `CT Buffer`_”h]”hŒ CT Buffer”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ CT Buffer”hÁjuh1jÁ5hj…j7;KubhŒ.”…”�”}”(hj…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´K>hjjîh²hubhÚ)�”}”(hŒ1This message must be sent as `MMIO HXG Message`_.”h]”(hŒThis message must be sent as ”…”�”}”(hj¨h²hh³Nh´NubjÂ5)�”}”(hŒ`MMIO HXG Message`_”h]”hŒMMIO HXG Message”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒMMIO HXG Message”hÁjfuh1jÁ5hj¨j7;KubhŒ.”…”�”}”(hj¨h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´K@hjjîh²hubjgd)�”}”(hX‡+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31 | ORIGIN = GUC_HXG_ORIGIN_HOST_ | | +-------+--------------------------------------------------------------+ | | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_ | | +-------+--------------------------------------------------------------+ | | 27:16 | DATA0 = MBZ | | +-------+--------------------------------------------------------------+ | | 15:0 | ACTION = _`GUC_ACTION_HOST2GUC_CONTROL_CTB` = 0x4509 | +---+-------+--------------------------------------------------------------+ | 1 | 31:0 | **CONTROL** - control `CTB based communication`_ | | | | | | | | - _`GUC_CTB_CONTROL_DISABLE` = 0 | | | | - _`GUC_CTB_CONTROL_ENABLE` = 1 | +---+-------+--------------------------------------------------------------+ +---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31 | ORIGIN = GUC_HXG_ORIGIN_GUC_ | | +-------+--------------------------------------------------------------+ | | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_ | | +-------+--------------------------------------------------------------+ | | 27:0 | DATA0 = MBZ | +---+-------+--------------------------------------------------------------+ ”h]”(j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjÒubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjÒubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhjÒubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjöubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KChjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjöubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jh´KChjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjöubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjóubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhjÒubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KEhjCubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhj@ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31”h]”hŒ31”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jSh´KEhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj@ubjìî)�”}”(hhh]”hÚ)�”}”(hŒORIGIN = GUC_HXG_ORIGIN_HOST_”h]”(hŒ ORIGIN = ”…”�”}”(hjuh²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_ORIGIN_HOST_”h]”hŒGUC_HXG_ORIGIN_HOST”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_ORIGIN_HOST”hÁj§ïuh1jÁ5hjuj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jSh´KEhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj=ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ30:28”h]”hŒ30:28”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KGhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjŸubjìî)�”}”(hhh]”hÚ)�”}”(hŒTYPE = GUC_HXG_TYPE_REQUEST_”h]”(hŒTYPE = ”…”�”}”(hj½h²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_TYPE_REQUEST_”h]”hŒGUC_HXG_TYPE_REQUEST”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_TYPE_REQUEST”hÁjcðuh1jÁ5hj½j7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j³h´KGhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj=ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ27:16”h]”hŒ27:16”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KIhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjçubjìî)�”}”(hhh]”hÚ)�”}”(hŒ DATA0 = MBZ”h]”hŒ DATA0 = MBZ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jûh´KIhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj=ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ15:0”h]”hŒ15:0”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KKhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubjìî)�”}”(hhh]”hÚ)�”}”(hŒ4ACTION = _`GUC_ACTION_HOST2GUC_CONTROL_CTB` = 0x4509”h]”(hŒ ACTION = ”…”�”}”(hj=h²hh³Nh´Nubh¶)�”}”(hŒ"_`GUC_ACTION_HOST2GUC_CONTROL_CTB`”h]”hŒGUC_ACTION_HOST2GUC_CONTROL_CTB”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”Œguc-action-host2guc-control-ctb”ah ]”h"]”Œguc_action_host2guc_control_ctb”ah$]”h&]”uh1hµhj=ubhŒ = 0x4509”…”�”}”(hj=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j3h´KKhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj=ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjÛñh]”hŒ1”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KMhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjkubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j~h´KMhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjkubjìî)�”}”(hhh]”(hÚ)�”}”(hŒ0**CONTROL** - control `CTB based communication`_”h]”(j)�”}”(hŒ **CONTROL**”h]”hŒCONTROL”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸubhŒ - control ”…”�”}”(hjŸh²hh³Nh´NubjÂ5)�”}”(hŒ`CTB based communication`_”h]”hŒCTB based communication”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒCTB based communication”hÁjPuh1jÁ5hjŸj7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j~h´KMhjœubjgd)�”}”(hŒ@- _`GUC_CTB_CONTROL_DISABLE` = 0 - _`GUC_CTB_CONTROL_ENABLE` = 1”h]”j°:)�”}”(hhh]”(jµ:)�”}”(hŒ_`GUC_CTB_CONTROL_DISABLE` = 0”h]”hÚ)�”}”(hjÔh]”(h¶)�”}”(hŒ_`GUC_CTB_CONTROL_DISABLE`”h]”hŒGUC_CTB_CONTROL_DISABLE”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”Œguc-ctb-control-disable”ah ]”h"]”Œguc_ctb_control_disable”ah$]”h&]”uh1hµhjÖubhŒ = 0”…”�”}”(hjÖh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KOhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjÏubjµ:)�”}”(hŒ_`GUC_CTB_CONTROL_ENABLE` = 1”h]”hÚ)�”}”(hjüh]”(h¶)�”}”(hŒ_`GUC_CTB_CONTROL_ENABLE`”h]”hŒGUC_CTB_CONTROL_ENABLE”…”�”}”(hjh²hh³Nh´Nubah}”(h]”Œguc-ctb-control-enable”ah ]”h"]”Œguc_ctb_control_enable”ah$]”h&]”uh1hµhjþubhŒ = 1”…”�”}”(hjþh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KPhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjÏubeh}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³jóh´KOhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³jóh´KOhjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhjÒubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhjËubj¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjPubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjPubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhjPubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjtubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KThj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjtubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j‘h´KThj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhjPubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KVhjÁubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhj¾ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31”h]”hŒ31”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÑh´KVhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¾ubjìî)�”}”(hhh]”hÚ)�”}”(hŒORIGIN = GUC_HXG_ORIGIN_GUC_”h]”(hŒ ORIGIN = ”…”�”}”(hjóh²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_ORIGIN_GUC_”h]”hŒGUC_HXG_ORIGIN_GUC”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_ORIGIN_GUC”hÁjÐïuh1jÁ5hjój7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÑh´KVhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj»ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ30:28”h]”hŒ30:28”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KXhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubjìî)�”}”(hhh]”hÚ)�”}”(hŒ%TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_”h]”(hŒTYPE = ”…”�”}”(hj;h²hh³Nh´NubjÂ5)�”}”(hŒGUC_HXG_TYPE_RESPONSE_SUCCESS_”h]”hŒGUC_HXG_TYPE_RESPONSE_SUCCESS”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGUC_HXG_TYPE_RESPONSE_SUCCESS”hÁjRñuh1jÁ5hj;j7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j1h´KXhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj»ubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ27:0”h]”hŒ27:0”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KZhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjeubjìî)�”}”(hhh]”hÚ)�”}”(hŒ DATA0 = MBZ”h]”hŒ DATA0 = MBZ”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jyh´KZhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhj»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhjPubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œj/var/lib/git/docbuild/linux/Documentation/gpu/i915:361: ./drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h”h´KBhjjîh²hubh¶)�”}”(hŒ .. _GuC KLV:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒguc-klv”uh1hµh´Khjjîh²hh³NjõdKubhÚ)�”}”(hŒ **GuC KLV**”h]”j)�”}”(hjÄh]”hŒGuC KLV”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÂubah}”(h]”jÁah ]”h"]”Œguc klv”ah$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´Khjjîh²hj î}”j×j·sj¢î}”jÁj·sjõdKubjgd)�”}”(hX„+---+-------+--------------------------------------------------------------+ | | Bits | Description | +===+=======+==============================================================+ | 0 | 31:16 | **KEY** - KLV key identifier | | | | - `GuC Self Config KLVs`_ | | | | | | +-------+--------------------------------------------------------------+ | | 15:0 | **LEN** - length of VALUE (in 32bit dwords) | +---+-------+--------------------------------------------------------------+ | 1 | 31:0 | **VALUE** - actual value of the KLV (format depends on KEY) | +---+-------+ | |...| | | +---+-------+ | | n | 31:0 | | +---+-------+--------------------------------------------------------------+ ”h]”j¸î)�”}”(hhh]”j½î)�”}”(hhh]”(jÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjäubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jÁîhjäubjÂî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jÁîhjäubjâî)�”}”(hhh]”jçî)�”}”(hhh]”(jìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubjìî)�”}”(hhh]”hÚ)�”}”(hŒBits”h]”hŒBits”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubjìî)�”}”(hhh]”hÚ)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j%h´K hj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jáîhjäubj2ï)�”}”(hhh]”(jçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hj>ïh]”hŒ0”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´KhjUubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhjRubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:16”h]”hŒ31:16”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jeh´Khjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjRubjìî)�”}”(hhh]”j)�”}”(hhh]”j)�”}”(hŒ7**KEY** - KLV key identifier - `GuC Self Config KLVs`_ ”h]”(j$)�”}”(hŒ**KEY** - KLV key identifier”h]”(j)�”}”(hŒ**KEY**”h]”hŒKEY”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽubhŒ - KLV key identifier”…”�”}”(hjŽh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´KhjŠubj@)�”}”(hhh]”j°:)�”}”(hhh]”jµ:)�”}”(hŒ`GuC Self Config KLVs`_ ”h]”hÚ)�”}”(hŒ`GuC Self Config KLVs`_”h]”jÂ5)�”}”(hj·h]”hŒGuC Self Config KLVs”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGuC Self Config KLVs”hÁj@uh1jÁ5hjµj7;Kubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jªh´Khj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj®ubah}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³jªh´Khj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jªh´Khj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjOubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ15:0”h]”hŒ15:0”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´Khjûubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjøubjìî)�”}”(hhh]”hÚ)�”}”(hŒ+**LEN** - length of VALUE (in 32bit dwords)”h]”(j)�”}”(hŒ**LEN**”h]”hŒLEN”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ$ - length of VALUE (in 32bit dwords)”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j h´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjOubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjÛñh]”hŒ1”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´KhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj>ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jQh´KhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj>ubjìî)�”}”(hhh]”hÚ)�”}”(hŒ;**VALUE** - actual value of the KLV (format depends on KEY)”h]”(j)�”}”(hŒ **VALUE**”h]”hŒVALUE”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrubhŒ2 - actual value of the KLV (format depends on KEY)”…”�”}”(hjrh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jQh´Khjoubah}”(h]”h ]”h"]”h$]”h&]”Œmorerows”Kuh1jëîhj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjOubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hŒ...”h]”hŒ...”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´Khjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj›ubjìî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jëîhj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjOubjçî)�”}”(hhh]”(jìî)�”}”(hhh]”hÚ)�”}”(hjèh]”hŒn”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´KhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÅubjìî)�”}”(hhh]”hÚ)�”}”(hŒ31:0”h]”hŒ31:0”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jØh´Khjßubah}”(h]”h ]”h"]”h$]”h&]”uh1jëîhjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jæîhjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1ïhjäubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j¼îhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j·îhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jfdh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K hjjîh²hubh¶)�”}”(hŒ.. _GuC Self Config KLVs:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁj@uh1hµh´Khjjîh²hh³NjõdKubhÚ)�”}”(hŒ**GuC Self Config KLVs**”h]”j)�”}”(hj"h]”hŒGuC Self Config KLVs”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”j@ah ]”h"]”Œguc self config klvs”ah$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´Khjjîh²hj î}”j5jsj¢î}”j@jsjõdKubhÚ)�”}”(hŒ:`GuC KLV`_ keys available for use with HOST2GUC_SELF_CFG_.”h]”(jÂ5)�”}”(hŒ `GuC KLV`_”h]”hŒGuC KLV”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGuC KLV”hÁjÁuh1jÁ5hj;j7;KubhŒ keys available for use with ”…”�”}”(hj;h²hh³Nh´NubjÂ5)�”}”(hŒHOST2GUC_SELF_CFG_”h]”hŒHOST2GUC_SELF_CFG”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒHOST2GUC_SELF_CFG”hÁj uh1jÁ5hj;j7;KubhŒ.”…”�”}”(hj;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K%hjjîh²hubj)�”}”(hhh]”(j)�”}”(hŒ®_`GUC_KLV_SELF_CFG_H2G_CTB_ADDR` : 0x0902 Refers to 64 bit Global Gfx address of H2G `CT Buffer`_. Should be above WOPCM address but below APIC base address for native mode. ”h]”(j$)�”}”(hŒ _`GUC_KLV_SELF_CFG_H2G_CTB_ADDR`”h]”(h¶)�”}”(hŒ _`GUC_KLV_SELF_CFG_H2G_CTB_ADDR`”h]”hŒGUC_KLV_SELF_CFG_H2G_CTB_ADDR”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”Œguc-klv-self-cfg-h2g-ctb-addr”ah ]”h"]”Œguc_klv_self_cfg_h2g_ctb_addr”ah$]”h&]”uh1hµhjuubhh…”�”}”(hjuh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K)hjqubhŒ classifier”“”)�”}”(hŒ0x0902”h]”hŒ0x0902”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjqh³j’ubj@)�”}”(hhh]”hÚ)�”}”(hŒƒRefers to 64 bit Global Gfx address of H2G `CT Buffer`_. Should be above WOPCM address but below APIC base address for native mode.”h]”(hŒ+Refers to 64 bit Global Gfx address of H2G ”…”�”}”(hj¦h²hh³Nh´NubjÂ5)�”}”(hŒ `CT Buffer`_”h]”hŒ CT Buffer”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ CT Buffer”hÁjuh1jÁ5hj¦j7;KubhŒL. Should be above WOPCM address but below APIC base address for native mode.”…”�”}”(hj¦h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K(hj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j’h´K)hjnubj)�”}”(hŒ¾_`GUC_KLV_SELF_CFG_H2G_CTB_DESCRIPTOR_ADDR` : 0x0903 Refers to 64 bit Global Gfx address of H2G `CTB Descriptor`_. Should be above WOPCM address but below APIC base address for native mode. ”h]”(j$)�”}”(hŒ+_`GUC_KLV_SELF_CFG_H2G_CTB_DESCRIPTOR_ADDR`”h]”(h¶)�”}”(hŒ+_`GUC_KLV_SELF_CFG_H2G_CTB_DESCRIPTOR_ADDR`”h]”hŒ(GUC_KLV_SELF_CFG_H2G_CTB_DESCRIPTOR_ADDR”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”Œ(guc-klv-self-cfg-h2g-ctb-descriptor-addr”ah ]”h"]”Œ(guc_klv_self_cfg_h2g_ctb_descriptor_addr”ah$]”h&]”uh1hµhjÙubhh…”�”}”(hjÙh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K-hjÕubj”)�”}”(hŒ0x0903”h]”hŒ0x0903”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjÕh³jöubj@)�”}”(hhh]”hÚ)�”}”(hŒˆRefers to 64 bit Global Gfx address of H2G `CTB Descriptor`_. Should be above WOPCM address but below APIC base address for native mode.”h]”(hŒ+Refers to 64 bit Global Gfx address of H2G ”…”�”}”(hjh²hh³Nh´NubjÂ5)�”}”(hŒ`CTB Descriptor`_”h]”hŒCTB Descriptor”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒCTB Descriptor”hÁjHuh1jÁ5hjj7;KubhŒL. Should be above WOPCM address but below APIC base address for native mode.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K,hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jöh´K-hjnubj)�”}”(hŒs_`GUC_KLV_SELF_CFG_H2G_CTB_SIZE` : 0x0904 Refers to size of H2G `CT Buffer`_ in bytes. Should be a multiple of 4K. ”h]”(j$)�”}”(hŒ _`GUC_KLV_SELF_CFG_H2G_CTB_SIZE`”h]”(h¶)�”}”(hŒ _`GUC_KLV_SELF_CFG_H2G_CTB_SIZE`”h]”hŒGUC_KLV_SELF_CFG_H2G_CTB_SIZE”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”Œguc-klv-self-cfg-h2g-ctb-size”ah ]”h"]”Œguc_klv_self_cfg_h2g_ctb_size”ah$]”h&]”uh1hµhj;ubhh…”�”}”(hj;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K1hj7ubj”)�”}”(hŒ0x0904”h]”hŒ0x0904”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj7h³jXubj@)�”}”(hhh]”hÚ)�”}”(hŒHRefers to size of H2G `CT Buffer`_ in bytes. Should be a multiple of 4K.”h]”(hŒRefers to size of H2G ”…”�”}”(hjjh²hh³Nh´NubjÂ5)�”}”(hŒ `CT Buffer`_”h]”hŒ CT Buffer”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ CT Buffer”hÁjuh1jÁ5hjjj7;KubhŒ& in bytes. Should be a multiple of 4K.”…”�”}”(hjjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K0hjgubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jXh´K1hjnubj)�”}”(hŒ®_`GUC_KLV_SELF_CFG_G2H_CTB_ADDR` : 0x0905 Refers to 64 bit Global Gfx address of G2H `CT Buffer`_. Should be above WOPCM address but below APIC base address for native mode. ”h]”(j$)�”}”(hŒ _`GUC_KLV_SELF_CFG_G2H_CTB_ADDR`”h]”(h¶)�”}”(hŒ _`GUC_KLV_SELF_CFG_G2H_CTB_ADDR`”h]”hŒGUC_KLV_SELF_CFG_G2H_CTB_ADDR”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”Œguc-klv-self-cfg-g2h-ctb-addr”ah ]”h"]”Œguc_klv_self_cfg_g2h_ctb_addr”ah$]”h&]”uh1hµhj�ubhh…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K5hj™ubj”)�”}”(hŒ0x0905”h]”hŒ0x0905”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj™h³jºubj@)�”}”(hhh]”hÚ)�”}”(hŒƒRefers to 64 bit Global Gfx address of G2H `CT Buffer`_. Should be above WOPCM address but below APIC base address for native mode.”h]”(hŒ+Refers to 64 bit Global Gfx address of G2H ”…”�”}”(hjÌh²hh³Nh´NubjÂ5)�”}”(hŒ `CT Buffer`_”h]”hŒ CT Buffer”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ CT Buffer”hÁjuh1jÁ5hjÌj7;KubhŒL. Should be above WOPCM address but below APIC base address for native mode.”…”�”}”(hjÌh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K4hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jºh´K5hjnubj)�”}”(hŒ¾_`GUC_KLV_SELF_CFG_G2H_CTB_DESCRIPTOR_ADDR` : 0x0906 Refers to 64 bit Global Gfx address of G2H `CTB Descriptor`_. Should be above WOPCM address but below APIC base address for native mode. ”h]”(j$)�”}”(hŒ+_`GUC_KLV_SELF_CFG_G2H_CTB_DESCRIPTOR_ADDR`”h]”(h¶)�”}”(hŒ+_`GUC_KLV_SELF_CFG_G2H_CTB_DESCRIPTOR_ADDR`”h]”hŒ(GUC_KLV_SELF_CFG_G2H_CTB_DESCRIPTOR_ADDR”…”�”}”(hjh²hh³Nh´Nubah}”(h]”Œ(guc-klv-self-cfg-g2h-ctb-descriptor-addr”ah ]”h"]”Œ(guc_klv_self_cfg_g2h_ctb_descriptor_addr”ah$]”h&]”uh1hµhjÿubhh…”�”}”(hjÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K9hjûubj”)�”}”(hŒ0x0906”h]”hŒ0x0906”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjûh³jubj@)�”}”(hhh]”hÚ)�”}”(hŒˆRefers to 64 bit Global Gfx address of G2H `CTB Descriptor`_. Should be above WOPCM address but below APIC base address for native mode.”h]”(hŒ+Refers to 64 bit Global Gfx address of G2H ”…”�”}”(hj.h²hh³Nh´NubjÂ5)�”}”(hŒ`CTB Descriptor`_”h]”hŒCTB Descriptor”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒCTB Descriptor”hÁjHuh1jÁ5hj.j7;KubhŒL. Should be above WOPCM address but below APIC base address for native mode.”…”�”}”(hj.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K8hj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´K9hjnubj)�”}”(hŒt_`GUC_KLV_SELF_CFG_G2H_CTB_SIZE` : 0x0907 Refers to size of G2H `CT Buffer`_ in bytes. Should be a multiple of 4K. ”h]”(j$)�”}”(hŒ _`GUC_KLV_SELF_CFG_G2H_CTB_SIZE`”h]”(h¶)�”}”(hŒ _`GUC_KLV_SELF_CFG_G2H_CTB_SIZE`”h]”hŒGUC_KLV_SELF_CFG_G2H_CTB_SIZE”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”Œguc-klv-self-cfg-g2h-ctb-size”ah ]”h"]”Œguc_klv_self_cfg_g2h_ctb_size”ah$]”h&]”uh1hµhjaubhh…”�”}”(hjah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´K>hj]ubj”)�”}”(hŒ0x0907”h]”hŒ0x0907”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj]h³j~ubj@)�”}”(hhh]”hÚ)�”}”(hŒHRefers to size of G2H `CT Buffer`_ in bytes. Should be a multiple of 4K.”h]”(hŒRefers to size of G2H ”…”�”}”(hj�h²hh³Nh´NubjÂ5)�”}”(hŒ `CT Buffer`_”h]”hŒ CT Buffer”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œ CT Buffer”hÁjuh1jÁ5hj�j7;KubhŒ& in bytes. Should be a multiple of 4K.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”h´Khjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjjîh²hh³Nh´Nubeh}”(h]”Œguc-abi”ah ]”h"]”Œguc abi”ah$]”h&]”uh1hÄhj?Öh²hh³hÃh´Mdubeh}”(h]”Œguc”ah ]”h"]”Œguc”ah$]”h&]”uh1hÄhjÁÕh²hh³hÃh´MAubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒHuC”h]”hŒHuC”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjÕh²hh³hÃh´MmubhÚ)�”}”(hŒÐThe HuC is a dedicated microcontroller for usage in media HEVC (High Efficiency Video Coding) operations. Userspace can directly use the firmware capabilities by adding HuC specific commands to batch buffers.”h]”hŒÐThe HuC is a dedicated microcontroller for usage in media HEVC (High Efficiency Video Coding) operations. Userspace can directly use the firmware capabilities by adding HuC specific commands to batch buffers.”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:366: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´KhjÕh²hubhÚ)�”}”(hŒ¢The kernel driver is only responsible for loading the HuC firmware and triggering its security authentication. This is done differently depending on the platform:”h]”hŒ¢The kernel driver is only responsible for loading the HuC firmware and triggering its security authentication. This is done differently depending on the platform:”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:366: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´KhjÕh²hubj°:)�”}”(hhh]”(jµ:)�”}”(hŒholder platforms (from Gen9 to most Gen12s): the load is performed via DMA and the authentication via GuC”h]”hÚ)�”}”(hŒholder platforms (from Gen9 to most Gen12s): the load is performed via DMA and the authentication via GuC”h]”hŒholder platforms (from Gen9 to most Gen12s): the load is performed via DMA and the authentication via GuC”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:366: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj ubjµ:)�”}”(hŒ8DG2: load and authentication are both performed via GSC.”h]”hÚ)�”}”(hj" h]”hŒ8DG2: load and authentication are both performed via GSC.”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:366: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj ubjµ:)�”}”(hŒçMTL and newer platforms: the load is performed via DMA (same as with not-DG2 older platforms), while the authentication is done in 2-steps, a first auth for clear-media workloads via GuC and a second one for all workloads via GSC. ”h]”hÚ)�”}”(hŒæMTL and newer platforms: the load is performed via DMA (same as with not-DG2 older platforms), while the authentication is done in 2-steps, a first auth for clear-media workloads via GuC and a second one for all workloads via GSC.”h]”hŒæMTL and newer platforms: the load is performed via DMA (same as with not-DG2 older platforms), while the authentication is done in 2-steps, a first auth for clear-media workloads via GuC and a second one for all workloads via GSC.”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:366: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´K hj8 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j´:hj ubeh}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³j h´KhjÕh²hubhÚ)�”}”(hXÚOn platforms where the GuC does the authentication, to correctly do so the HuC binary must be loaded before the GuC one. Loading the HuC is optional; however, not using the HuC might negatively impact power usage and/or performance of media workloads, depending on the use-cases. HuC must be reloaded on events that cause the WOPCM to lose its contents (S3/S4, FLR); on older platforms the HuC must also be reloaded on GuC/GT reset, while on newer ones it will survive that.”h]”hXÚOn platforms where the GuC does the authentication, to correctly do so the HuC binary must be loaded before the GuC one. Loading the HuC is optional; however, not using the HuC might negatively impact power usage and/or performance of media workloads, depending on the use-cases. HuC must be reloaded on events that cause the WOPCM to lose its contents (S3/S4, FLR); on older platforms the HuC must also be reloaded on GuC/GT reset, while on newer ones it will survive that.”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:366: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´K%hjÕh²hubhÚ)�”}”(hŒVSee https://github.com/intel/media-driver for the latest details on HuC functionality.”h]”(hŒSee ”…”�”}”(hjf h²hh³Nh´NubjÂ5)�”}”(hŒ%https://github.com/intel/media-driver”h]”hŒ%https://github.com/intel/media-driver”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jp uh1jÁ5hjf ubhŒ- for the latest details on HuC functionality.”…”�”}”(hjf h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:366: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´K.hjÕh²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒintel_huc_auth (C function)”Œc.intel_huc_auth”hNt”auh1j¶hjÕh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒSint intel_huc_auth (struct intel_huc *huc, enum intel_huc_authentication_type type)”h]”jÓ)�”}”(hŒRint intel_huc_auth(struct intel_huc *huc, enum intel_huc_authentication_type type)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj¡ h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj� h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:368: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´Mubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj� h²hh³j¯ h´Mubj)�”}”(hŒintel_huc_auth”h]”jÜ)�”}”(hŒintel_huc_auth”h]”hŒintel_huc_auth”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¾ ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj� h²hh³j¯ h´Mubj8)�”}”(hŒ@(struct intel_huc *huc, enum intel_huc_authentication_type type)”h]”(j>)�”}”(hŒstruct intel_huc *huc”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjÚ ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÚ ubh)�”}”(hhh]”jÜ)�”}”(hŒ intel_huc”h]”hŒ intel_huc”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjù ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jþ Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjÄ sbŒc.intel_huc_auth”†”asbuh1hhjÚ ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÚ ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj*!h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÚ ubjÜ)�”}”(hŒhuc”h]”hŒhuc”…”�”}”(hj7!h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÚ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÖ ubj>)�”}”(hŒ'enum intel_huc_authentication_type type”h]”(jD)�”}”(hjµh]”hŒenum”…”�”}”(hjP!h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjL!ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjL!ubh)�”}”(hhh]”jÜ)�”}”(hŒintel_huc_authentication_type”h]”hŒintel_huc_authentication_type”…”�”}”(hjn!h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjk!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jp!Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j!Œc.intel_huc_auth”†”asbuh1hhjL!ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjL!ubjÜ)�”}”(hŒtype”h]”hŒtype”…”�”}”(hjš!h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjL!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÖ ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj� h²hh³j¯ h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj™ h²hh³j¯ h´Mubah}”(h]”j” ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j¯ h´Mhj– h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒAuthenticate HuC uCode”h]”hŒAuthenticate HuC uCode”…”�”}”(hjÄ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:368: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´MhjÁ!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj– h²hh³j¯ h´Mubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójÜ!jôjÜ!jõ‰jö‰j÷‰uh1jÇh²hhjÕh³Nh´Nubjù)�”}”(hX³**Parameters** ``struct intel_huc *huc`` intel_huc structure ``enum intel_huc_authentication_type type`` authentication type (via GuC or via GSC) **Description** Called after HuC and GuC firmware loading during intel_uc_init_hw(). This function invokes the GuC action to authenticate the HuC firmware, passing the offset of the RSA signature to intel_guc_auth_huc(). It then waits for up to 50ms for firmware verification ACK.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjæ!h]”hŒ Parameters”…”�”}”(hjè!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjä!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:368: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´M hjà!ubj)�”}”(hhh]”(j)�”}”(hŒ.``struct intel_huc *huc`` intel_huc structure ”h]”(j$)�”}”(hŒ``struct intel_huc *huc``”h]”j*)�”}”(hj"h]”hŒstruct intel_huc *huc”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:368: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´Mhjÿ!ubj@)�”}”(hhh]”hÚ)�”}”(hŒintel_huc structure”h]”hŒintel_huc structure”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j"h´Mhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÿ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j"h´Mhjü!ubj)�”}”(hŒU``enum intel_huc_authentication_type type`` authentication type (via GuC or via GSC) ”h]”(j$)�”}”(hŒ+``enum intel_huc_authentication_type type``”h]”j*)�”}”(hj>"h]”hŒ'enum intel_huc_authentication_type type”…”�”}”(hj@"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj<"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:368: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´Mhj8"ubj@)�”}”(hhh]”hÚ)�”}”(hŒ(authentication type (via GuC or via GSC)”h]”hŒ(authentication type (via GuC or via GSC)”…”�”}”(hjW"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jS"h´MhjT"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj8"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jS"h´Mhjü!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjà!ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjy"h]”hŒ Description”…”�”}”(hj{"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjw"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:368: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´M hjà!ubhÚ)�”}”(hŒDCalled after HuC and GuC firmware loading during intel_uc_init_hw().”h]”hŒDCalled after HuC and GuC firmware loading during intel_uc_init_hw().”…”�”}”(hj�"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:368: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´M hjà!ubhÚ)�”}”(hŒÃThis function invokes the GuC action to authenticate the HuC firmware, passing the offset of the RSA signature to intel_guc_auth_huc(). It then waits for up to 50ms for firmware verification ACK.”h]”hŒÃThis function invokes the GuC action to authenticate the HuC firmware, passing the offset of the RSA signature to intel_guc_auth_huc(). It then waits for up to 50ms for firmware verification ACK.”…”�”}”(hjž"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:368: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´M hjà!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjÕh²hh³Nh´NubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒHuC Memory Management”h]”hŒHuC Memory Management”…”�”}”(hj·"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj´"h²hh³hÃh´MtubhÚ)�”}”(hX?Similarly to the GuC, the HuC can't do any memory allocations on its own, with the difference being that the allocations for HuC usage are handled by the userspace driver instead of the kernel one. The HuC accesses the memory via the PPGTT belonging to the context loaded on the VCS executing the HuC-specific commands.”h]”hXASimilarly to the GuC, the HuC can’t do any memory allocations on its own, with the difference being that the allocations for HuC usage are handled by the userspace driver instead of the kernel one. The HuC accesses the memory via the PPGTT belonging to the context loaded on the VCS executing the HuC-specific commands.”…”�”}”(hjÅ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:374: ./drivers/gpu/drm/i915/gt/uc/intel_huc.c”h´K5hj´"h²hubeh}”(h]”Œhuc-memory-management”ah ]”h"]”Œhuc memory management”ah$]”h&]”uh1hÄhjÕh²hh³hÃh´MtubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒHuC Firmware Layout”h]”hŒHuC Firmware Layout”…”�”}”(hjß"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjÜ"h²hh³hÃh´MzubhÚ)�”}”(hŒHThe HuC FW layout is the same as the GuC one, see `GuC Firmware Layout`_”h]”(hŒ2The HuC FW layout is the same as the GuC one, see ”…”�”}”(hjí"h²hh³Nh´NubjÂ5)�”}”(hŒ`GuC Firmware Layout`_”h]”hŒGuC Firmware Layout”…”�”}”(hjõ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒGuC Firmware Layout”hÁjÿèuh1jÁ5hjí"j7;Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´M{hjÜ"h²hubeh}”(h]”Œhuc-firmware-layout”ah ]”h"]”Œhuc firmware layout”ah$]”h&]”uh1hÄhjÕh²hh³hÃh´Mzubeh}”(h]”Œhuc”ah ]”h"]”Œhuc”ah$]”h&]”uh1hÄhjÁÕh²hh³hÃh´MmubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒDMC”h]”hŒDMC”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj#h²hh³hÃh´M~ubhÚ)�”}”(hŒ!See :ref:`drm/intel-display/dmc`.”h]”(hŒSee ”…”�”}”(hj,#h²hh³Nh´Nubh)�”}”(hŒ:ref:`drm/intel-display/dmc`”h]”hö)�”}”(hj6#h]”hŒdrm/intel-display/dmc”…”�”}”(hj8#h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hõhj4#ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jB#Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒdrm/intel-display/dmc”uh1hh³hÃh´Mhj,#ubhŒ.”…”�”}”(hj,#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Mhj#h²hubeh}”(h]”Œdmc”ah ]”h"]”Œdmc”ah$]”h&]”uh1hÄhjÁÕh²hh³hÃh´M~ubeh}”(h]”Œmicrocontrollers”ah ]”h"]”Œmicrocontrollers”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´M/ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒTracing”h]”hŒTracing”…”�”}”(hjq#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjn#h²hh³hÃh´M‚ubhÚ)�”}”(hŒZThis sections covers all things related to the tracepoints implemented in the i915 driver.”h]”hŒZThis sections covers all things related to the tracepoints implemented in the i915 driver.”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´M„hjn#h²hubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ(i915_ppgtt_create and i915_ppgtt_release”h]”hŒ(i915_ppgtt_create and i915_ppgtt_release”…”�”}”(hj�#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj�#h²hh³hÃh´MˆubhÚ)�”}”(hX”With full ppgtt enabled each process using drm will allocate at least one translation table. With these traces it is possible to keep track of the allocation and of the lifetime of the tables; this can be used during testing/debug to verify that we are not leaking ppgtts. These traces identify the ppgtt through the vm pointer, which is also printed by the i915_vma_bind and i915_vma_unbind tracepoints.”h]”hX”With full ppgtt enabled each process using drm will allocate at least one translation table. With these traces it is possible to keep track of the allocation and of the lifetime of the tables; this can be used during testing/debug to verify that we are not leaking ppgtts. These traces identify the ppgtt through the vm pointer, which is also printed by the i915_vma_bind and i915_vma_unbind tracepoints.”…”�”}”(hjž#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/i915:394: ./drivers/gpu/drm/i915/i915_trace.h”h´M†hj�#h²hubeh}”(h]”Œ(i915-ppgtt-create-and-i915-ppgtt-release”ah ]”h"]”Œ(i915_ppgtt_create and i915_ppgtt_release”ah$]”h&]”uh1hÄhjn#h²hh³hÃh´MˆubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ)i915_context_create and i915_context_free”h]”hŒ)i915_context_create and i915_context_free”…”�”}”(hj¸#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjµ#h²hh³hÃh´MŽubhÚ)�”}”(hŒŸThese tracepoints are used to track creation and deletion of contexts. If full ppgtt is enabled, they also print the address of the vm assigned to the context.”h]”hŒŸThese tracepoints are used to track creation and deletion of contexts. If full ppgtt is enabled, they also print the address of the vm assigned to the context.”…”�”}”(hjÆ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ[/var/lib/git/docbuild/linux/Documentation/gpu/i915:400: ./drivers/gpu/drm/i915/i915_trace.h”h´M«hjµ#h²hubeh}”(h]”Œ)i915-context-create-and-i915-context-free”ah ]”h"]”Œ)i915_context_create and i915_context_free”ah$]”h&]”uh1hÄhjn#h²hh³hÃh´MŽubeh}”(h]”Œtracing”ah ]”h"]”Œtracing”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´M‚ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒPerf”h]”hŒPerf”…”�”}”(hjè#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjå#h²hh³hÃh´M”ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒOverview”h]”hŒOverview”…”�”}”(hjù#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjö#h²hh³hÃh´M—ubhÚ)�”}”(hŒšGen graphics supports a large number of performance counters that can help driver and application developers understand and optimize their use of the GPU.”h]”hŒšGen graphics supports a large number of performance counters that can help driver and application developers understand and optimize their use of the GPU.”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:408: ./drivers/gpu/drm/i915/i915_perf.c”h´Khjö#h²hubhÚ)�”}”(hŒ¯This i915 perf interface enables userspace to configure and open a file descriptor representing a stream of GPU metrics which can then be read() as a stream of sample records.”h]”hŒ¯This i915 perf interface enables userspace to configure and open a file descriptor representing a stream of GPU metrics which can then be read() as a stream of sample records.”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:408: ./drivers/gpu/drm/i915/i915_perf.c”h´K!hjö#h²hubhÚ)�”}”(hŒ–The interface is particularly suited to exposing buffered metrics that are captured by DMA from the GPU, unsynchronized with and unrelated to the CPU.”h]”hŒ–The interface is particularly suited to exposing buffered metrics that are captured by DMA from the GPU, unsynchronized with and unrelated to the CPU.”…”�”}”(hj%$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:408: ./drivers/gpu/drm/i915/i915_perf.c”h´K%hjö#h²hubhÚ)�”}”(hX7Streams representing a single context are accessible to applications with a corresponding drm file descriptor, such that OpenGL can use the interface without special privileges. Access to system-wide metrics requires root privileges by default, unless changed via the dev.i915.perf_event_paranoid sysctl option.”h]”hX7Streams representing a single context are accessible to applications with a corresponding drm file descriptor, such that OpenGL can use the interface without special privileges. Access to system-wide metrics requires root privileges by default, unless changed via the dev.i915.perf_event_paranoid sysctl option.”…”�”}”(hj4$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:408: ./drivers/gpu/drm/i915/i915_perf.c”h´K(hjö#h²hubeh}”(h]”Œoverview”ah ]”h"]”Œoverview”ah$]”h&]”uh1hÄhjå#h²hh³hÃh´M—ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒComparison with Core Perf”h]”hŒComparison with Core Perf”…”�”}”(hjN$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjK$h²hh³hÃh´MœubhÚ)�”}”(hŒfThe interface was initially inspired by the core Perf infrastructure but some notable differences are:”h]”hŒfThe interface was initially inspired by the core Perf infrastructure but some notable differences are:”…”�”}”(hj\$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´K3hjK$h²hubhÚ)�”}”(hXi915 perf file descriptors represent a "stream" instead of an "event"; where a perf event primarily corresponds to a single 64bit value, while a stream might sample sets of tightly-coupled counters, depending on the configuration. For example the Gen OA unit isn't designed to support orthogonal configurations of individual counters; it's configured for a set of related counters. Samples for an i915 perf stream capturing OA metrics will include a set of counter values packed in a compact HW specific format. The OA unit supports a number of different packing formats which can be selected by the user opening the stream. Perf has support for grouping events, but each event in the group is configured, validated and authenticated individually with separate system calls.”h]”hXi915 perf file descriptors represent a “streamâ€� instead of an “eventâ€�; where a perf event primarily corresponds to a single 64bit value, while a stream might sample sets of tightly-coupled counters, depending on the configuration. For example the Gen OA unit isn’t designed to support orthogonal configurations of individual counters; it’s configured for a set of related counters. Samples for an i915 perf stream capturing OA metrics will include a set of counter values packed in a compact HW specific format. The OA unit supports a number of different packing formats which can be selected by the user opening the stream. Perf has support for grouping events, but each event in the group is configured, validated and authenticated individually with separate system calls.”…”�”}”(hjk$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´K6hjK$h²hubhÚ)�”}”(hŒÆi915 perf stream configurations are provided as an array of u64 (key,value) pairs, instead of a fixed struct with multiple miscellaneous config members, interleaved with event-type specific members.”h]”hŒÆi915 perf stream configurations are provided as an array of u64 (key,value) pairs, instead of a fixed struct with multiple miscellaneous config members, interleaved with event-type specific members.”…”�”}”(hjz$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´KBhjK$h²hubhÚ)�”}”(hXLi915 perf doesn't support exposing metrics via an mmap'd circular buffer. The supported metrics are being written to memory by the GPU unsynchronized with the CPU, using HW specific packing formats for counter sets. Sometimes the constraints on HW configuration require reports to be filtered before it would be acceptable to expose them to unprivileged applications - to hide the metrics of other processes/contexts. For these use cases a read() based interface is a good fit, and provides an opportunity to filter data as it gets copied from the GPU mapped buffers to userspace buffers.”•h]”hXPi915 perf doesn’t support exposing metrics via an mmap’d circular buffer. The supported metrics are being written to memory by the GPU unsynchronized with the CPU, using HW specific packing formats for counter sets. Sometimes the constraints on HW configuration require reports to be filtered before it would be acceptable to expose them to unprivileged applications - to hide the metrics of other processes/contexts. For these use cases a read() based interface is a good fit, and provides an opportunity to filter data as it gets copied from the GPU mapped buffers to userspace buffers.”…”�”}”(hj‰$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´KFhjK$h²hubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ2Issues hit with first prototype based on Core Perf”h]”hŒ2Issues hit with first prototype based on Core Perf”…”�”}”(hj›$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj˜$h³Nh´NubhÚ)�”}”(hXThe first prototype of this driver was based on the core perf infrastructure, and while we did make that mostly work, with some changes to perf, we found we were breaking or working around too many assumptions baked into perf's currently cpu centric design.”h]”hXThe first prototype of this driver was based on the core perf infrastructure, and while we did make that mostly work, with some changes to perf, we found we were breaking or working around too many assumptions baked into perf’s currently cpu centric design.”…”�”}”(hj©$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´KShj˜$ubhÚ)�”}”(hŒÚIn the end we didn't see a clear benefit to making perf's implementation and interface more complex by changing design assumptions while we knew we still wouldn't be able to use any existing perf based userspace tools.”h]”hŒàIn the end we didn’t see a clear benefit to making perf’s implementation and interface more complex by changing design assumptions while we knew we still wouldn’t be able to use any existing perf based userspace tools.”…”�”}”(hj¸$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´KXhj˜$ubhÚ)�”}”(hX²Also considering the Gen specific nature of the Observability hardware and how userspace will sometimes need to combine i915 perf OA metrics with side-band OA data captured via MI_REPORT_PERF_COUNT commands; we're expecting the interface to be used by a platform specific userspace such as OpenGL or tools. This is to say; we aren't inherently missing out on having a standard vendor/architecture agnostic interface by not using perf.”h]”hX¶Also considering the Gen specific nature of the Observability hardware and how userspace will sometimes need to combine i915 perf OA metrics with side-band OA data captured via MI_REPORT_PERF_COUNT commands; we’re expecting the interface to be used by a platform specific userspace such as OpenGL or tools. This is to say; we aren’t inherently missing out on having a standard vendor/architecture agnostic interface by not using perf.”…”�”}”(hjÇ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´K\hj˜$ubhÚ)�”}”(hŒ—For posterity, in case we might re-visit trying to adapt core perf to be better suited to exposing i915 metrics these were the main pain points we hit:”h]”hŒ—For posterity, in case we might re-visit trying to adapt core perf to be better suited to exposing i915 metrics these were the main pain points we hit:”…”�”}”(hjÖ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´Kdhj˜$ubj°:)�”}”(hhh]”(jµ:)�”}”(hXQThe perf based OA PMU driver broke some significant design assumptions: Existing perf pmus are used for profiling work on a cpu and we were introducing the idea of _IS_DEVICE pmus with different security implications, the need to fake cpu-related data (such as user/kernel registers) to fit with perf's current design, and adding _DEVICE records as a way to forward device-specific status records. The OA unit writes reports of counters into a circular buffer, without involvement from the CPU, making our PMU driver the first of a kind. Given the way we were periodically forward data from the GPU-mapped, OA buffer to perf's buffer, those bursts of sample writes looked to perf like we were sampling too fast and so we had to subvert its throttling checks. Perf supports groups of counters and allows those to be read via transactions internally but transactions currently seem designed to be explicitly initiated from the cpu (say in response to a userspace read()) and while we could pull a report out of the OA buffer we can't trigger a report from the cpu on demand. Related to being report based; the OA counters are configured in HW as a set while perf generally expects counter configurations to be orthogonal. Although counters can be associated with a group leader as they are opened, there's no clear precedent for being able to provide group-wide configuration attributes (for example we want to let userspace choose the OA unit report format used to capture all counters in a set, or specify a GPU context to filter metrics on). We avoided using perf's grouping feature and forwarded OA reports to userspace via perf's 'raw' sample field. This suited our userspace well considering how coupled the counters are when dealing with normalizing. It would be inconvenient to split counters up into separate events, only to require userspace to recombine them. For Mesa it's also convenient to be forwarded raw, periodic reports for combining with the side-band raw reports it captures using MI_REPORT_PERF_COUNT commands. - As a side note on perf's grouping feature; there was also some concern that using PERF_FORMAT_GROUP as a way to pack together counter values would quite drastically inflate our sample sizes, which would likely lower the effective sampling resolutions we could use when the available memory bandwidth is limited. With the OA unit's report formats, counters are packed together as 32 or 40bit values, with the largest report size being 256 bytes. PERF_FORMAT_GROUP values are 64bit, but there doesn't appear to be a documented ordering to the values, implying PERF_FORMAT_ID must also be used to add a 64bit ID before each value; giving 16 bytes per counter. Related to counter orthogonality; we can't time share the OA unit, while event scheduling is a central design idea within perf for allowing userspace to open + enable more events than can be configured in HW at any one time. The OA unit is not designed to allow re-configuration while in use. We can't reconfigure the OA unit without losing internal OA unit state which we can't access explicitly to save and restore. Reconfiguring the OA unit is also relatively slow, involving ~100 register writes. From userspace Mesa also depends on a stable OA configuration when emitting MI_REPORT_PERF_COUNT commands and importantly the OA unit can't be disabled while there are outstanding MI_RPC commands lest we hang the command streamer. The contents of sample records aren't extensible by device drivers (i.e. the sample_type bits). As an example; Sourab Gupta had been looking to attach GPU timestamps to our OA samples. We were shoehorning OA reports into sample records by using the 'raw' field, but it's tricky to pack more than one thing into this field because events/core.c currently only lets a pmu give a single raw data pointer plus len which will be copied into the ring buffer. To include more than the OA report we'd have to copy the report into an intermediate larger buffer. I'd been considering allowing a vector of data+len values to be specified for copying the raw data, but it felt like a kludge to being using the raw field for this purpose. ”h]”(hÚ)�”}”(hŒGThe perf based OA PMU driver broke some significant design assumptions:”h]”hŒGThe perf based OA PMU driver broke some significant design assumptions:”…”�”}”(hjì$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´Khhjè$ubhÚ)�”}”(hXEExisting perf pmus are used for profiling work on a cpu and we were introducing the idea of _IS_DEVICE pmus with different security implications, the need to fake cpu-related data (such as user/kernel registers) to fit with perf's current design, and adding _DEVICE records as a way to forward device-specific status records.”h]”hXGExisting perf pmus are used for profiling work on a cpu and we were introducing the idea of _IS_DEVICE pmus with different security implications, the need to fake cpu-related data (such as user/kernel registers) to fit with perf’s current design, and adding _DEVICE records as a way to forward device-specific status records.”…”�”}”(hjû$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´Kjhjè$ubhÚ)�”}”(hŒ‹The OA unit writes reports of counters into a circular buffer, without involvement from the CPU, making our PMU driver the first of a kind.”h]”hŒ‹The OA unit writes reports of counters into a circular buffer, without involvement from the CPU, making our PMU driver the first of a kind.”…”�”}”(hj %h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´Kphjè$ubhÚ)�”}”(hŒÜGiven the way we were periodically forward data from the GPU-mapped, OA buffer to perf's buffer, those bursts of sample writes looked to perf like we were sampling too fast and so we had to subvert its throttling checks.”h]”hŒÞGiven the way we were periodically forward data from the GPU-mapped, OA buffer to perf’s buffer, those bursts of sample writes looked to perf like we were sampling too fast and so we had to subvert its throttling checks.”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´Kshjè$ubhÚ)�”}”(hX9Perf supports groups of counters and allows those to be read via transactions internally but transactions currently seem designed to be explicitly initiated from the cpu (say in response to a userspace read()) and while we could pull a report out of the OA buffer we can't trigger a report from the cpu on demand.”h]”hX;Perf supports groups of counters and allows those to be read via transactions internally but transactions currently seem designed to be explicitly initiated from the cpu (say in response to a userspace read()) and while we could pull a report out of the OA buffer we can’t trigger a report from the cpu on demand.”…”�”}”(hj(%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´Kwhjè$ubhÚ)�”}”(hX½Related to being report based; the OA counters are configured in HW as a set while perf generally expects counter configurations to be orthogonal. Although counters can be associated with a group leader as they are opened, there's no clear precedent for being able to provide group-wide configuration attributes (for example we want to let userspace choose the OA unit report format used to capture all counters in a set, or specify a GPU context to filter metrics on). We avoided using perf's grouping feature and forwarded OA reports to userspace via perf's 'raw' sample field. This suited our userspace well considering how coupled the counters are when dealing with normalizing. It would be inconvenient to split counters up into separate events, only to require userspace to recombine them. For Mesa it's also convenient to be forwarded raw, periodic reports for combining with the side-band raw reports it captures using MI_REPORT_PERF_COUNT commands.”h]”hXÉRelated to being report based; the OA counters are configured in HW as a set while perf generally expects counter configurations to be orthogonal. Although counters can be associated with a group leader as they are opened, there’s no clear precedent for being able to provide group-wide configuration attributes (for example we want to let userspace choose the OA unit report format used to capture all counters in a set, or specify a GPU context to filter metrics on). We avoided using perf’s grouping feature and forwarded OA reports to userspace via perf’s ‘raw’ sample field. This suited our userspace well considering how coupled the counters are when dealing with normalizing. It would be inconvenient to split counters up into separate events, only to require userspace to recombine them. For Mesa it’s also convenient to be forwarded raw, periodic reports for combining with the side-band raw reports it captures using MI_REPORT_PERF_COUNT commands.”…”�”}”(hj7%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´K}hjè$ubj°:)�”}”(hhh]”jµ:)�”}”(hX“As a side note on perf's grouping feature; there was also some concern that using PERF_FORMAT_GROUP as a way to pack together counter values would quite drastically inflate our sample sizes, which would likely lower the effective sampling resolutions we could use when the available memory bandwidth is limited. With the OA unit's report formats, counters are packed together as 32 or 40bit values, with the largest report size being 256 bytes. PERF_FORMAT_GROUP values are 64bit, but there doesn't appear to be a documented ordering to the values, implying PERF_FORMAT_ID must also be used to add a 64bit ID before each value; giving 16 bytes per counter. ”h]”(hÚ)�”}”(hX7As a side note on perf's grouping feature; there was also some concern that using PERF_FORMAT_GROUP as a way to pack together counter values would quite drastically inflate our sample sizes, which would likely lower the effective sampling resolutions we could use when the available memory bandwidth is limited.”h]”hX9As a side note on perf’s grouping feature; there was also some concern that using PERF_FORMAT_GROUP as a way to pack together counter values would quite drastically inflate our sample sizes, which would likely lower the effective sampling resolutions we could use when the available memory bandwidth is limited.”…”�”}”(hjM%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´KŒhjI%ubhÚ)�”}”(hŒ„With the OA unit's report formats, counters are packed together as 32 or 40bit values, with the largest report size being 256 bytes.”h]”hŒ†With the OA unit’s report formats, counters are packed together as 32 or 40bit values, with the largest report size being 256 bytes.”…”�”}”(hj\%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´K’hjI%ubhÚ)�”}”(hŒÓPERF_FORMAT_GROUP values are 64bit, but there doesn't appear to be a documented ordering to the values, implying PERF_FORMAT_ID must also be used to add a 64bit ID before each value; giving 16 bytes per counter.”h]”hŒÕPERF_FORMAT_GROUP values are 64bit, but there doesn’t appear to be a documented ordering to the values, implying PERF_FORMAT_ID must also be used to add a 64bit ID before each value; giving 16 bytes per counter.”…”�”}”(hjk%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´K•hjI%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjF%ubah}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³j[%h´KŒhjè$ubhÚ)�”}”(hXÜRelated to counter orthogonality; we can't time share the OA unit, while event scheduling is a central design idea within perf for allowing userspace to open + enable more events than can be configured in HW at any one time. The OA unit is not designed to allow re-configuration while in use. We can't reconfigure the OA unit without losing internal OA unit state which we can't access explicitly to save and restore. Reconfiguring the OA unit is also relatively slow, involving ~100 register writes. From userspace Mesa also depends on a stable OA configuration when emitting MI_REPORT_PERF_COUNT commands and importantly the OA unit can't be disabled while there are outstanding MI_RPC commands lest we hang the command streamer.”h]”hXäRelated to counter orthogonality; we can’t time share the OA unit, while event scheduling is a central design idea within perf for allowing userspace to open + enable more events than can be configured in HW at any one time. The OA unit is not designed to allow re-configuration while in use. We can’t reconfigure the OA unit without losing internal OA unit state which we can’t access explicitly to save and restore. Reconfiguring the OA unit is also relatively slow, involving ~100 register writes. From userspace Mesa also depends on a stable OA configuration when emitting MI_REPORT_PERF_COUNT commands and importantly the OA unit can’t be disabled while there are outstanding MI_RPC commands lest we hang the command streamer.”…”�”}”(hj†%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´K™hjè$ubhÚ)�”}”(hXÕThe contents of sample records aren't extensible by device drivers (i.e. the sample_type bits). As an example; Sourab Gupta had been looking to attach GPU timestamps to our OA samples. We were shoehorning OA reports into sample records by using the 'raw' field, but it's tricky to pack more than one thing into this field because events/core.c currently only lets a pmu give a single raw data pointer plus len which will be copied into the ring buffer. To include more than the OA report we'd have to copy the report into an intermediate larger buffer. I'd been considering allowing a vector of data+len values to be specified for copying the raw data, but it felt like a kludge to being using the raw field for this purpose.”h]”hXáThe contents of sample records aren’t extensible by device drivers (i.e. the sample_type bits). As an example; Sourab Gupta had been looking to attach GPU timestamps to our OA samples. We were shoehorning OA reports into sample records by using the ‘raw’ field, but it’s tricky to pack more than one thing into this field because events/core.c currently only lets a pmu give a single raw data pointer plus len which will be copied into the ring buffer. To include more than the OA report we’d have to copy the report into an intermediate larger buffer. I’d been considering allowing a vector of data+len values to be specified for copying the raw data, but it felt like a kludge to being using the raw field for this purpose.”…”�”}”(hj•%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´K¥hjè$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjå$ubjµ:)�”}”(hX\It felt like our perf based PMU was making some technical compromises just for the sake of using perf: perf_event_open() requires events to either relate to a pid or a specific cpu core, while our device pmu related to neither. Events opened with a pid will be automatically enabled/disabled according to the scheduling of that process - so not appropriate for us. When an event is related to a cpu id, perf ensures pmu methods will be invoked via an inter process interrupt on that core. To avoid invasive changes our userspace opened OA perf events for a specific cpu. This was workable but it meant the majority of the OA driver ran in atomic context, including all OA report forwarding, which wasn't really necessary in our case and seems to make our locking requirements somewhat complex as we handled the interaction with the rest of the i915 driver. ”h]”(hÚ)�”}”(hŒfIt felt like our perf based PMU was making some technical compromises just for the sake of using perf:”h]”hŒfIt felt like our perf based PMU was making some technical compromises just for the sake of using perf:”…”�”}”(hj®%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´K°hjª%ubhÚ)�”}”(hXòperf_event_open() requires events to either relate to a pid or a specific cpu core, while our device pmu related to neither. Events opened with a pid will be automatically enabled/disabled according to the scheduling of that process - so not appropriate for us. When an event is related to a cpu id, perf ensures pmu methods will be invoked via an inter process interrupt on that core. To avoid invasive changes our userspace opened OA perf events for a specific cpu. This was workable but it meant the majority of the OA driver ran in atomic context, including all OA report forwarding, which wasn't really necessary in our case and seems to make our locking requirements somewhat complex as we handled the interaction with the rest of the i915 driver.”h]”hXôperf_event_open() requires events to either relate to a pid or a specific cpu core, while our device pmu related to neither. Events opened with a pid will be automatically enabled/disabled according to the scheduling of that process - so not appropriate for us. When an event is related to a cpu id, perf ensures pmu methods will be invoked via an inter process interrupt on that core. To avoid invasive changes our userspace opened OA perf events for a specific cpu. This was workable but it meant the majority of the OA driver ran in atomic context, including all OA report forwarding, which wasn’t really necessary in our case and seems to make our locking requirements somewhat complex as we handled the interaction with the rest of the i915 driver.”…”�”}”(hj½%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:413: ./drivers/gpu/drm/i915/i915_perf.c”h´K³hjª%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j´:hjå$ubeh}”(h]”h ]”h"]”h$]”h&]”jú;jû;uh1j¯:h³jú$h´Khhj˜$ubeh}”(h]”Œ2issues-hit-with-first-prototype-based-on-core-perf”ah ]”h"]”Œ2issues hit with first prototype based on core perf”ah$]”h&]”uh1hÄhjK$h²hh³Nh´Nubeh}”(h]”Œcomparison-with-core-perf”ah ]”h"]”Œcomparison with core perf”ah$]”h&]”uh1hÄhjå#h²hh³hÃh´MœubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒi915 Driver Entry Points”h]”hŒi915 Driver Entry Points”…”�”}”(hjë%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjè%h²hh³hÃh´M¡ubhÚ)�”}”(hŒŒThis section covers the entrypoints exported outside of i915_perf.c to integrate with drm/i915 and to handle the `DRM_I915_PERF_OPEN` ioctl.”h]”(hŒqThis section covers the entrypoints exported outside of i915_perf.c to integrate with drm/i915 and to handle the ”…”�”}”(hjù%h²hh³Nh´Nubjc)�”}”(hŒ`DRM_I915_PERF_OPEN`”h]”hŒDRM_I915_PERF_OPEN”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjù%ubhŒ ioctl.”…”�”}”(hjù%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´M£hjè%h²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_perf_init (C function)”Œc.i915_perf_init”hNt”auh1j¶hjè%h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ2int i915_perf_init (struct drm_i915_private *i915)”h]”jÓ)�”}”(hŒ1int i915_perf_init(struct drm_i915_private *i915)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj2&h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj.&h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:422: ./drivers/gpu/drm/i915/i915_perf.c”h´M®ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj.&h²hh³j@&h´M®ubj)�”}”(hŒi915_perf_init”h]”jÜ)�”}”(hŒi915_perf_init”h]”hŒi915_perf_init”…”�”}”(hjS&h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjO&ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj.&h²hh³j@&h´M®ubj8)�”}”(hŒ(struct drm_i915_private *i915)”h]”j>)�”}”(hŒstruct drm_i915_private *i915”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjo&h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjk&ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjk&ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hj�&h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŠ&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j�&Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjU&sbŒc.i915_perf_init”†”asbuh1hhjk&ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjk&ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj»&h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjk&ubjÜ)�”}”(hŒi915”h]”hŒi915”…”�”}”(hjÈ&h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjk&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjg&ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj.&h²hh³j@&h´M®ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj*&h²hh³j@&h´M®ubah}”(h]”j%&ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j@&h´M®hj'&h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ)initialize i915-perf state on module bind”h]”hŒ)initialize i915-perf state on module bind”…”�”}”(hjò&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:422: ./drivers/gpu/drm/i915/i915_perf.c”h´M®hjï&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj'&h²hh³j@&h´M®ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój 'jôj 'jõ‰jö‰j÷‰uh1jÇh²hhjè%h³Nh´Nubjù)�”}”(hX***Parameters** ``struct drm_i915_private *i915`` i915 device instance **Description** Initializes i915-perf state without exposing anything to userspace. **Note** i915-perf initialization is split into an 'init' and 'register' phase with the i915_perf_register() exposing state to userspace.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj'h]”hŒ Parameters”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:422: ./drivers/gpu/drm/i915/i915_perf.c”h´M²hj'ubj)�”}”(hhh]”j)�”}”(hŒ7``struct drm_i915_private *i915`` i915 device instance ”h]”(j$)�”}”(hŒ!``struct drm_i915_private *i915``”h]”j*)�”}”(hj3'h]”hŒstruct drm_i915_private *i915”…”�”}”(hj5'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj1'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:422: ./drivers/gpu/drm/i915/i915_perf.c”h´M¯hj-'ubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 device instance”h]”hŒi915 device instance”…”�”}”(hjL'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jH'h´M¯hjI'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj-'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jH'h´M¯hj*'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjn'h]”hŒ Description”…”�”}”(hjp'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjl'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:422: ./drivers/gpu/drm/i915/i915_perf.c”h´M±hj'ubhÚ)�”}”(hŒCInitializes i915-perf state without exposing anything to userspace.”h]”hŒCInitializes i915-perf state without exposing anything to userspace.”…”�”}”(hj„'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:422: ./drivers/gpu/drm/i915/i915_perf.c”h´M°hj'ubhÚ)�”}”(hŒ**Note**”h]”j)�”}”(hj•'h]”hŒNote”…”�”}”(hj—'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:422: ./drivers/gpu/drm/i915/i915_perf.c”h´M²hj'ubhÚ)�”}”(hŒ€i915-perf initialization is split into an 'init' and 'register' phase with the i915_perf_register() exposing state to userspace.”h]”hŒˆi915-perf initialization is split into an ‘init’ and ‘register’ phase with the i915_perf_register() exposing state to userspace.”…”�”}”(hj«'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:422: ./drivers/gpu/drm/i915/i915_perf.c”h´M³hj'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjè%h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_perf_fini (C function)”Œc.i915_perf_fini”hNt”auh1j¶hjè%h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ3void i915_perf_fini (struct drm_i915_private *i915)”h]”jÓ)�”}”(hŒ2void i915_perf_fini(struct drm_i915_private *i915)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÚ'h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÖ'h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:424: ./drivers/gpu/drm/i915/i915_perf.c”h´MHubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÖ'h²hh³jè'h´MHubj)�”}”(hŒi915_perf_fini”h]”jÜ)�”}”(hŒi915_perf_fini”h]”hŒi915_perf_fini”…”�”}”(hjû'h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj÷'ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÖ'h²hh³jè'h´MHubj8)�”}”(hŒ(struct drm_i915_private *i915)”h]”j>)�”}”(hŒstruct drm_i915_private *i915”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj(ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj(ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hj5(h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj2(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j7(Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjý'sbŒc.i915_perf_fini”†”asbuh1hhj(ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj(ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjc(h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj(ubjÜ)�”}”(hŒi915”h]”hŒi915”…”�”}”(hjp(h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj(ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÖ'h²hh³jè'h´MHubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÒ'h²hh³jè'h´MHubah}”(h]”jÍ'ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jè'h´MHhjÏ'h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ Counter part to i915_perf_init()”h]”hŒ Counter part to i915_perf_init()”…”�”}”(hjš(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:424: ./drivers/gpu/drm/i915/i915_perf.c”h´MHhj—(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÏ'h²hh³jè'h´MHubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój²(jôj²(jõ‰jö‰j÷‰uh1jÇh²hhjè%h³Nh´Nubjù)�”}”(hŒH**Parameters** ``struct drm_i915_private *i915`` i915 device instance”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¼(h]”hŒ Parameters”…”�”}”(hj¾(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjº(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:424: ./drivers/gpu/drm/i915/i915_perf.c”h´MLhj¶(ubj)�”}”(hhh]”j)�”}”(hŒ6``struct drm_i915_private *i915`` i915 device instance”h]”(j$)�”}”(hŒ!``struct drm_i915_private *i915``”h]”j*)�”}”(hjÛ(h]”hŒstruct drm_i915_private *i915”…”�”}”(hjÝ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÙ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:424: ./drivers/gpu/drm/i915/i915_perf.c”h´MNhjÕ(ubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 device instance”h]”hŒi915 device instance”…”�”}”(hjô(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:424: ./drivers/gpu/drm/i915/i915_perf.c”h´MIhjñ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÕ(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jð(h´MNhjÒ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjè%h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_perf_register (C function)”Œc.i915_perf_register”hNt”auh1j¶hjè%h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ7void i915_perf_register (struct drm_i915_private *i915)”h]”jÓ)�”}”(hŒ6void i915_perf_register(struct drm_i915_private *i915)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj5)h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj1)h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:426: ./drivers/gpu/drm/i915/i915_perf.c”h´M ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj1)h²hh³jC)h´M ubj)�”}”(hŒi915_perf_register”h]”jÜ)�”}”(hŒi915_perf_register”h]”hŒi915_perf_register”…”�”}”(hjV)h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjR)ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj1)h²hh³jC)h´M ubj8)�”}”(hŒ(struct drm_i915_private *i915)”h]”j>)�”}”(hŒstruct drm_i915_private *i915”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjr)h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjn)ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjn)ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hj�)h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j’)Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjX)sbŒc.i915_perf_register”†”asbuh1hhjn)ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjn)ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¾)h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjn)ubjÜ)�”}”(hŒi915”h]”hŒi915”…”�”}”(hjË)h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjn)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjj)ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj1)h²hh³jC)h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj-)h²hh³jC)h´M ubah}”(h]”j()ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jC)h´M hj*)h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒexposes i915-perf to userspace”h]”hŒexposes i915-perf to userspace”…”�”}”(hjõ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:426: ./drivers/gpu/drm/i915/i915_perf.c”h´M hjò)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj*)h²hh³jC)h´M ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój *jôj *jõ‰jö‰j÷‰uh1jÇh²hhjè%h³Nh´Nubjù)�”}”(hŒÿ**Parameters** ``struct drm_i915_private *i915`` i915 device instance **Description** In particular OA metric sets are advertised under a sysfs metrics/ directory allowing userspace to enumerate valid IDs that can be used to open an i915-perf stream.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj*h]”hŒ Parameters”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:426: ./drivers/gpu/drm/i915/i915_perf.c”h´M¤hj*ubj)�”}”(hhh]”j)�”}”(hŒ7``struct drm_i915_private *i915`` i915 device instance ”h]”(j$)�”}”(hŒ!``struct drm_i915_private *i915``”h]”j*)�”}”(hj6*h]”hŒstruct drm_i915_private *i915”…”�”}”(hj8*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj4*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:426: ./drivers/gpu/drm/i915/i915_perf.c”h´M¡hj0*ubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 device instance”h]”hŒi915 device instance”…”�”}”(hjO*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jK*h´M¡hjL*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj0*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jK*h´M¡hj-*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjq*h]”hŒ Description”…”�”}”(hjs*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:426: ./drivers/gpu/drm/i915/i915_perf.c”h´M£hj*ubhÚ)�”}”(hŒ¤In particular OA metric sets are advertised under a sysfs metrics/ directory allowing userspace to enumerate valid IDs that can be used to open an i915-perf stream.”h]”hŒ¤In particular OA metric sets are advertised under a sysfs metrics/ directory allowing userspace to enumerate valid IDs that can be used to open an i915-perf stream.”…”�”}”(hj‡*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:426: ./drivers/gpu/drm/i915/i915_perf.c”h´M¢hj*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjè%h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ!i915_perf_unregister (C function)”Œc.i915_perf_unregister”hNt”auh1j¶hjè%h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ9void i915_perf_unregister (struct drm_i915_private *i915)”h]”jÓ)�”}”(hŒ8void i915_perf_unregister(struct drm_i915_private *i915)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¶*h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj²*h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:428: ./drivers/gpu/drm/i915/i915_perf.c”h´M½ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj²*h²hh³jÄ*h´M½ubj)�”}”(hŒi915_perf_unregister”h]”jÜ)�”}”(hŒi915_perf_unregister”h]”hŒi915_perf_unregister”…”�”}”(hj×*h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÓ*ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj²*h²hh³jÄ*h´M½ubj8)�”}”(hŒ(struct drm_i915_private *i915)”h]”j>)�”}”(hŒstruct drm_i915_private *i915”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjó*h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjï*ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjï*ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j+Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjÙ*sbŒc.i915_perf_unregister”†”asbuh1hhjï*ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjï*ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj?+h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjï*ubjÜ)�”}”(hŒi915”h]”hŒi915”…”�”}”(hjL+h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjï*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjë*ubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj²*h²hh³jÄ*h´M½ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj®*h²hh³jÄ*h´M½ubah}”(h]”j©*ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÄ*h´M½hj«*h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒhide i915-perf from userspace”h]”hŒhide i915-perf from userspace”…”�”}”(hjv+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:428: ./drivers/gpu/drm/i915/i915_perf.c”h´M½hjs+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj«*h²hh³jÄ*h´M½ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójŽ+jôjŽ+jõ‰jö‰j÷‰uh1jÇh²hhjè%h³Nh´Nubjù)�”}”(hX+**Parameters** ``struct drm_i915_private *i915`` i915 device instance **Description** i915-perf state cleanup is split up into an 'unregister' and 'deinit' phase where the interface is first hidden from userspace by i915_perf_unregister() before cleaning up remaining state in i915_perf_fini().”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj˜+h]”hŒ Parameters”…”�”}”(hjš+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:428: ./drivers/gpu/drm/i915/i915_perf.c”h´MÁhj’+ubj)�”}”(hhh]”j)�”}”(hŒ7``struct drm_i915_private *i915`` i915 device instance ”h]”(j$)�”}”(hŒ!``struct drm_i915_private *i915``”h]”j*)�”}”(hj·+h]”hŒstruct drm_i915_private *i915”…”�”}”(hj¹+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjµ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:428: ./drivers/gpu/drm/i915/i915_perf.c”h´M¾hj±+ubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 device instance”h]”hŒi915 device instance”…”�”}”(hjÐ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÌ+h´M¾hjÍ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj±+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÌ+h´M¾hj®+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’+ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjò+h]”hŒ Description”…”�”}”(hjô+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjð+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:428: ./drivers/gpu/drm/i915/i915_perf.c”h´MÀhj’+ubhÚ)�”}”(hŒÐi915-perf state cleanup is split up into an 'unregister' and 'deinit' phase where the interface is first hidden from userspace by i915_perf_unregister() before cleaning up remaining state in i915_perf_fini().”h]”hŒØi915-perf state cleanup is split up into an ‘unregister’ and ‘deinit’ phase where the interface is first hidden from userspace by i915_perf_unregister() before cleaning up remaining state in i915_perf_fini().”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:428: ./drivers/gpu/drm/i915/i915_perf.c”h´M¿hj’+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjè%h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ!i915_perf_open_ioctl (C function)”Œc.i915_perf_open_ioctl”hNt”auh1j¶hjè%h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒTint i915_perf_open_ioctl (struct drm_device *dev, void *data, struct drm_file *file)”h]”jÓ)�”}”(hŒSint i915_perf_open_ioctl(struct drm_device *dev, void *data, struct drm_file *file)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj7,h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj3,h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:430: ./drivers/gpu/drm/i915/i915_perf.c”h´Mbubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj3,h²hh³jE,h´Mbubj)�”}”(hŒi915_perf_open_ioctl”h]”jÜ)�”}”(hŒi915_perf_open_ioctl”h]”hŒi915_perf_open_ioctl”…”�”}”(hjX,h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjT,ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj3,h²hh³jE,h´Mbubj8)�”}”(hŒ;(struct drm_device *dev, void *data, struct drm_file *file)”h]”(j>)�”}”(hŒstruct drm_device *dev”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjt,h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjp,ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjp,ubh)�”}”(hhh]”jÜ)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hj’,h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j”,Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjZ,sbŒc.i915_perf_open_ioctl”†”asbuh1hhjp,ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjp,ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÀ,h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjp,ubjÜ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÍ,h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjp,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjl,ubj>)�”}”(hŒ void *data”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjæ,h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjâ,ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjâ,ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjâ,ubjÜ)�”}”(hŒdata”h]”hŒdata”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjâ,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjl,ubj>)�”}”(hŒstruct drm_file *file”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj(-h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj$-ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj$-ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_file”h]”hŒdrm_file”…”�”}”(hjF-h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjC-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jH-Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j®,Œc.i915_perf_open_ioctl”†”asbuh1hhj$-ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjd-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj$-ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjr-h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj$-ubjÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj$-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjl,ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj3,h²hh³jE,h´Mbubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj/,h²hh³jE,h´Mbubah}”(h]”j*,ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jE,h´Mbhj,,h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ-DRM ioctl() for userspace to open a stream FD”h]”hŒ-DRM ioctl() for userspace to open a stream FD”…”�”}”(hj©-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:430: ./drivers/gpu/drm/i915/i915_perf.c”h´Mbhj¦-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj,,h²hh³jE,h´Mbubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójÁ-jôjÁ-jõ‰jö‰j÷‰uh1jÇh²hhjè%h³Nh´Nubjù)�”}”(hXÙ**Parameters** ``struct drm_device *dev`` drm device ``void *data`` ioctl data copied from userspace (unvalidated) ``struct drm_file *file`` drm file **Description** Validates the stream open parameters given by userspace including flags and an array of u64 key, value pair properties. Very little is assumed up front about the nature of the stream being opened (for instance we don't assume it's for periodic OA unit metrics). An i915-perf stream is expected to be a suitable interface for other forms of buffered data written by the GPU besides periodic OA metrics. Note we copy the properties from userspace outside of the i915 perf mutex to avoid an awkward lockdep with mmap_lock. Most of the implementation details are handled by i915_perf_open_ioctl_locked() after taking the :c:type:`gt->perf `.lock mutex for serializing with any non-file-operation driver hooks. **Return** A newly opened i915 Perf stream file descriptor or negative error code on failure.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjË-h]”hŒ Parameters”…”�”}”(hjÍ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:430: ./drivers/gpu/drm/i915/i915_perf.c”h´MfhjÅ-ubj)�”}”(hhh]”(j)�”}”(hŒ&``struct drm_device *dev`` drm device ”h]”(j$)�”}”(hŒ``struct drm_device *dev``”h]”j*)�”}”(hjê-h]”hŒstruct drm_device *dev”…”�”}”(hjì-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjè-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:430: ./drivers/gpu/drm/i915/i915_perf.c”h´Mchjä-ubj@)�”}”(hhh]”hÚ)�”}”(hŒ drm device”h]”hŒ drm device”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÿ-h´Mchj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjä-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÿ-h´Mchjá-ubj)�”}”(hŒ>``void *data`` ioctl data copied from userspace (unvalidated) ”h]”(j$)�”}”(hŒ``void *data``”h]”j*)�”}”(hj#.h]”hŒ void *data”…”�”}”(hj%.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj!.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:430: ./drivers/gpu/drm/i915/i915_perf.c”h´Mdhj.ubj@)�”}”(hhh]”hÚ)�”}”(hŒ.ioctl data copied from userspace (unvalidated)”h]”hŒ.ioctl data copied from userspace (unvalidated)”…”�”}”(hj<.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j8.h´Mdhj9.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j8.h´Mdhjá-ubj)�”}”(hŒ#``struct drm_file *file`` drm file ”h]”(j$)�”}”(hŒ``struct drm_file *file``”h]”j*)�”}”(hj\.h]”hŒstruct drm_file *file”…”�”}”(hj^.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjZ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:430: ./drivers/gpu/drm/i915/i915_perf.c”h´MehjV.ubj@)�”}”(hhh]”hÚ)�”}”(hŒdrm file”h]”hŒdrm file”…”�”}”(hju.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jq.h´Mehjr.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjV.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jq.h´Mehjá-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÅ-ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj—.h]”hŒ Description”…”�”}”(hj™.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:430: ./drivers/gpu/drm/i915/i915_perf.c”h´MghjÅ-ubhÚ)�”}”(hŒwValidates the stream open parameters given by userspace including flags and an array of u64 key, value pair properties.”h]”hŒwValidates the stream open parameters given by userspace including flags and an array of u64 key, value pair properties.”…”�”}”(hj­.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:430: ./drivers/gpu/drm/i915/i915_perf.c”h´MfhjÅ-ubhÚ)�”}”(hXVery little is assumed up front about the nature of the stream being opened (for instance we don't assume it's for periodic OA unit metrics). An i915-perf stream is expected to be a suitable interface for other forms of buffered data written by the GPU besides periodic OA metrics.”h]”hXVery little is assumed up front about the nature of the stream being opened (for instance we don’t assume it’s for periodic OA unit metrics). An i915-perf stream is expected to be a suitable interface for other forms of buffered data written by the GPU besides periodic OA metrics.”…”�”}”(hj¼.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:430: ./drivers/gpu/drm/i915/i915_perf.c”h´MihjÅ-ubhÚ)�”}”(hŒuNote we copy the properties from userspace outside of the i915 perf mutex to avoid an awkward lockdep with mmap_lock.”h]”hŒuNote we copy the properties from userspace outside of the i915 perf mutex to avoid an awkward lockdep with mmap_lock.”…”�”}”(hjË.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:430: ./drivers/gpu/drm/i915/i915_perf.c”h´MnhjÅ-ubhÚ)�”}”(hŒ½Most of the implementation details are handled by i915_perf_open_ioctl_locked() after taking the :c:type:`gt->perf `.lock mutex for serializing with any non-file-operation driver hooks.”h]”(hŒaMost of the implementation details are handled by i915_perf_open_ioctl_locked() after taking the ”…”�”}”(hjÚ.h²hh³Nh´Nubh)�”}”(hŒ:c:type:`gt->perf `”h]”j*)�”}”(hjä.h]”hŒgt->perf”…”�”}”(hjæ.h²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjâ.ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒgt”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:430: ./drivers/gpu/drm/i915/i915_perf.c”h´MqhjÚ.ubhŒE.lock mutex for serializing with any non-file-operation driver hooks.”…”�”}”(hjÚ.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j/h´MqhjÅ-ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj/h]”hŒReturn”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj /ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:430: ./drivers/gpu/drm/i915/i915_perf.c”h´MuhjÅ-ubhÚ)�”}”(hŒRA newly opened i915 Perf stream file descriptor or negative error code on failure.”h]”hŒRA newly opened i915 Perf stream file descriptor or negative error code on failure.”…”�”}”(hj$/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:430: ./drivers/gpu/drm/i915/i915_perf.c”h´MvhjÅ-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjè%h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_perf_release (C function)”Œc.i915_perf_release”hNt”auh1j¶hjè%h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ>int i915_perf_release (struct inode *inode, struct file *file)”h]”jÓ)�”}”(hŒ=int i915_perf_release(struct inode *inode, struct file *file)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjS/h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjO/h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:432: ./drivers/gpu/drm/i915/i915_perf.c”h´M‹ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjO/h²hh³ja/h´M‹ubj)�”}”(hŒi915_perf_release”h]”jÜ)�”}”(hŒi915_perf_release”h]”hŒi915_perf_release”…”�”}”(hjt/h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjp/ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjO/h²hh³ja/h´M‹ubj8)�”}”(hŒ((struct inode *inode, struct file *file)”h]”(j>)�”}”(hŒstruct inode *inode”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj�/h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjŒ/ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŒ/ubh)�”}”(hhh]”jÜ)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj®/h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj«/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j°/Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjv/sbŒc.i915_perf_release”†”asbuh1hhjŒ/ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎ/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŒ/ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÜ/h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjŒ/ubjÜ)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjé/h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŒ/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjˆ/ubj>)�”}”(hŒstruct file *file”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjþ/ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjþ/ubh)�”}”(hhh]”jÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj 0h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j"0Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jÊ/Œc.i915_perf_release”†”asbuh1hhjþ/ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjþ/ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjL0h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjþ/ubjÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjY0h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjþ/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjˆ/ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjO/h²hh³ja/h´M‹ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjK/h²hh³ja/h´M‹ubah}”(h]”jF/ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³ja/h´M‹hjH/h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ*handles userspace close() of a stream file”h]”hŒ*handles userspace close() of a stream file”…”�”}”(hjƒ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:432: ./drivers/gpu/drm/i915/i915_perf.c”h´M‹hj€0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjH/h²hh³ja/h´M‹ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój›0jôj›0jõ‰jö‰j÷‰uh1jÇh²hhjè%h³Nh´Nubjù)�”}”(hXQ**Parameters** ``struct inode *inode`` anonymous inode associated with file ``struct file *file`` An i915 perf stream file **Description** Cleans up any resources associated with an open i915 perf stream file. NB: close() can't really fail from the userspace point of view. **Return** zero on success or a negative error code.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¥0h]”hŒ Parameters”…”�”}”(hj§0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:432: ./drivers/gpu/drm/i915/i915_perf.c”h´M�hjŸ0ubj)�”}”(hhh]”(j)�”}”(hŒ=``struct inode *inode`` anonymous inode associated with file ”h]”(j$)�”}”(hŒ``struct inode *inode``”h]”j*)�”}”(hjÄ0h]”hŒstruct inode *inode”…”�”}”(hjÆ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÂ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:432: ./drivers/gpu/drm/i915/i915_perf.c”h´MŒhj¾0ubj@)�”}”(hhh]”hÚ)�”}”(hŒ$anonymous inode associated with file”h]”hŒ$anonymous inode associated with file”…”�”}”(hjÝ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÙ0h´MŒhjÚ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¾0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÙ0h´MŒhj»0ubj)�”}”(hŒ/``struct file *file`` An i915 perf stream file ”h]”(j$)�”}”(hŒ``struct file *file``”h]”j*)�”}”(hjý0h]”hŒstruct file *file”…”�”}”(hjÿ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjû0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:432: ./drivers/gpu/drm/i915/i915_perf.c”h´M�hj÷0ubj@)�”}”(hhh]”hÚ)�”}”(hŒAn i915 perf stream file”h]”hŒAn i915 perf stream file”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j1h´M�hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj÷0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j1h´M�hj»0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ0ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj81h]”hŒ Description”…”�”}”(hj:1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj61ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:432: ./drivers/gpu/drm/i915/i915_perf.c”h´M�hjŸ0ubhÚ)�”}”(hŒFCleans up any resources associated with an open i915 perf stream file.”h]”hŒFCleans up any resources associated with an open i915 perf stream file.”…”�”}”(hjN1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:432: ./drivers/gpu/drm/i915/i915_perf.c”h´MŽhjŸ0ubhÚ)�”}”(hŒ?NB: close() can't really fail from the userspace point of view.”h]”hŒANB: close() can’t really fail from the userspace point of view.”…”�”}”(hj]1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:432: ./drivers/gpu/drm/i915/i915_perf.c”h´M�hjŸ0ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjn1h]”hŒReturn”…”�”}”(hjp1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjl1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:432: ./drivers/gpu/drm/i915/i915_perf.c”h´M’hjŸ0ubhÚ)�”}”(hŒ)zero on success or a negative error code.”h]”hŒ)zero on success or a negative error code.”…”�”}”(hj„1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:432: ./drivers/gpu/drm/i915/i915_perf.c”h´M“hjŸ0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjè%h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ'i915_perf_add_config_ioctl (C function)”Œc.i915_perf_add_config_ioctl”hNt”auh1j¶hjè%h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒZint i915_perf_add_config_ioctl (struct drm_device *dev, void *data, struct drm_file *file)”h]”jÓ)�”}”(hŒYint i915_perf_add_config_ioctl(struct drm_device *dev, void *data, struct drm_file *file)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj³1h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj¯1h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:434: ./drivers/gpu/drm/i915/i915_perf.c”h´MÝubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¯1h²hh³jÁ1h´MÝubj)�”}”(hŒi915_perf_add_config_ioctl”h]”jÜ)�”}”(hŒi915_perf_add_config_ioctl”h]”hŒi915_perf_add_config_ioctl”…”�”}”(hjÔ1h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÐ1ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj¯1h²hh³jÁ1h´MÝubj8)�”}”(hŒ;(struct drm_device *dev, void *data, struct drm_file *file)”h]”(j>)�”}”(hŒstruct drm_device *dev”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjð1h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjì1ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjì1ubh)�”}”(hhh]”jÜ)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj 2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j2Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjÖ1sbŒc.i915_perf_add_config_ioctl”†”asbuh1hhjì1ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjì1ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj<2h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjì1ubjÜ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjI2h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjì1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjè1ubj>)�”}”(hŒ void *data”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjb2h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj^2ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj^2ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj~2h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj^2ubjÜ)�”}”(hŒdata”h]”hŒdata”…”�”}”(hj‹2h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj^2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjè1ubj>)�”}”(hŒstruct drm_file *file”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj¤2h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj 2ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj 2ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_file”h]”hŒdrm_file”…”�”}”(hjÂ2h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¿2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÄ2Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j*2Œc.i915_perf_add_config_ioctl”†”asbuh1hhj 2ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj 2ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjî2h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj 2ubjÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjû2h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj 2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjè1ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj¯1h²hh³jÁ1h´MÝubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj«1h²hh³jÁ1h´MÝubah}”(h]”j¦1ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÁ1h´MÝhj¨1h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ0DRM ioctl() for userspace to add a new OA config”h]”hŒ0DRM ioctl() for userspace to add a new OA config”…”�”}”(hj%3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:434: ./drivers/gpu/drm/i915/i915_perf.c”h´MÝhj"3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj¨1h²hh³jÁ1h´MÝubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój=3jôj=3jõ‰jö‰j÷‰uh1jÇh²hhjè%h³Nh´Nubjù)�”}”(hXÞ**Parameters** ``struct drm_device *dev`` drm device ``void *data`` ioctl data (pointer to struct drm_i915_perf_oa_config) copied from userspace (unvalidated) ``struct drm_file *file`` drm file **Description** Validates the submitted OA register to be saved into a new OA config that can then be used for programming the OA unit and its NOA network. **Return** A new allocated config number to be used with the perf open ioctl or a negative error code on failure.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjG3h]”hŒ Parameters”…”�”}”(hjI3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjE3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:434: ./drivers/gpu/drm/i915/i915_perf.c”h´MáhjA3ubj)�”}”(hhh]”(j)�”}”(hŒ&``struct drm_device *dev`` drm device ”h]”(j$)�”}”(hŒ``struct drm_device *dev``”h]”j*)�”}”(hjf3h]”hŒstruct drm_device *dev”…”�”}”(hjh3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjd3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:434: ./drivers/gpu/drm/i915/i915_perf.c”•h´MÞhj`3ubj@)�”}”(hhh]”hÚ)�”}”(hŒ drm device”h]”hŒ drm device”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j{3h´MÞhj|3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj`3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{3h´MÞhj]3ubj)�”}”(hŒj``void *data`` ioctl data (pointer to struct drm_i915_perf_oa_config) copied from userspace (unvalidated) ”h]”(j$)�”}”(hŒ``void *data``”h]”j*)�”}”(hjŸ3h]”hŒ void *data”…”�”}”(hj¡3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj�3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:434: ./drivers/gpu/drm/i915/i915_perf.c”h´Màhj™3ubj@)�”}”(hhh]”hÚ)�”}”(hŒZioctl data (pointer to struct drm_i915_perf_oa_config) copied from userspace (unvalidated)”h]”hŒZioctl data (pointer to struct drm_i915_perf_oa_config) copied from userspace (unvalidated)”…”�”}”(hj¸3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:434: ./drivers/gpu/drm/i915/i915_perf.c”h´Mßhjµ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj™3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´3h´Màhj]3ubj)�”}”(hŒ#``struct drm_file *file`` drm file ”h]”(j$)�”}”(hŒ``struct drm_file *file``”h]”j*)�”}”(hjÙ3h]”hŒstruct drm_file *file”…”�”}”(hjÛ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj×3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:434: ./drivers/gpu/drm/i915/i915_perf.c”h´MáhjÓ3ubj@)�”}”(hhh]”hÚ)�”}”(hŒdrm file”h]”hŒdrm file”…”�”}”(hjò3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jî3h´Máhjï3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÓ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jî3h´Máhj]3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjA3ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj4h]”hŒ Description”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:434: ./drivers/gpu/drm/i915/i915_perf.c”h´MãhjA3ubhÚ)�”}”(hŒ‹Validates the submitted OA register to be saved into a new OA config that can then be used for programming the OA unit and its NOA network.”h]”hŒ‹Validates the submitted OA register to be saved into a new OA config that can then be used for programming the OA unit and its NOA network.”…”�”}”(hj*4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:434: ./drivers/gpu/drm/i915/i915_perf.c”h´MâhjA3ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj;4h]”hŒReturn”…”�”}”(hj=4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj94ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:434: ./drivers/gpu/drm/i915/i915_perf.c”h´MåhjA3ubhÚ)�”}”(hŒfA new allocated config number to be used with the perf open ioctl or a negative error code on failure.”h]”hŒfA new allocated config number to be used with the perf open ioctl or a negative error code on failure.”…”�”}”(hjQ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:434: ./drivers/gpu/drm/i915/i915_perf.c”h´MæhjA3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjè%h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ*i915_perf_remove_config_ioctl (C function)”Œc.i915_perf_remove_config_ioctl”hNt”auh1j¶hjè%h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ]int i915_perf_remove_config_ioctl (struct drm_device *dev, void *data, struct drm_file *file)”h]”jÓ)�”}”(hŒ\int i915_perf_remove_config_ioctl(struct drm_device *dev, void *data, struct drm_file *file)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj€4h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj|4h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:436: ./drivers/gpu/drm/i915/i915_perf.c”h´Mƒubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj|4h²hh³jŽ4h´Mƒubj)�”}”(hŒi915_perf_remove_config_ioctl”h]”jÜ)�”}”(hŒi915_perf_remove_config_ioctl”h]”hŒi915_perf_remove_config_ioctl”…”�”}”(hj¡4h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�4ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj|4h²hh³jŽ4h´Mƒubj8)�”}”(hŒ;(struct drm_device *dev, void *data, struct drm_file *file)”h]”(j>)�”}”(hŒstruct drm_device *dev”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj½4h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj¹4ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¹4ubh)�”}”(hhh]”jÜ)�”}”(hŒ drm_device”h]”hŒ drm_device”…”�”}”(hjÛ4h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjØ4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÝ4Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj£4sbŒc.i915_perf_remove_config_ioctl”†”asbuh1hhj¹4ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¹4ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj¹4ubjÜ)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¹4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjµ4ubj>)�”}”(hŒ void *data”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj/5h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj+5ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj+5ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjK5h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj+5ubjÜ)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjX5h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj+5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjµ4ubj>)�”}”(hŒstruct drm_file *file”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjq5h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjm5ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjm5ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_file”h]”hŒdrm_file”…”�”}”(hj�5h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŒ5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j‘5Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j÷4Œc.i915_perf_remove_config_ioctl”†”asbuh1hhjm5ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjm5ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj»5h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjm5ubjÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjÈ5h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjm5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjµ4ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj|4h²hh³jŽ4h´Mƒubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjx4h²hh³jŽ4h´Mƒubah}”(h]”js4ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jŽ4h´Mƒhju4h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ0DRM ioctl() for userspace to remove an OA config”h]”hŒ0DRM ioctl() for userspace to remove an OA config”…”�”}”(hjò5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:436: ./drivers/gpu/drm/i915/i915_perf.c”h´Mƒhjï5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhju4h²hh³jŽ4h´Mƒubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój 6jôj 6jõ‰jö‰j÷‰uh1jÇh²hhjè%h³Nh´Nubjù)�”}”(hX�**Parameters** ``struct drm_device *dev`` drm device ``void *data`` ioctl data (pointer to u64 integer) copied from userspace ``struct drm_file *file`` drm file **Description** Configs can be removed while being used, the will stop appearing in sysfs and their content will be freed when the stream using the config is closed. **Return** 0 on success or a negative error code on failure.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj6h]”hŒ Parameters”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:436: ./drivers/gpu/drm/i915/i915_perf.c”h´M‡hj6ubj)�”}”(hhh]”(j)�”}”(hŒ&``struct drm_device *dev`` drm device ”h]”(j$)�”}”(hŒ``struct drm_device *dev``”h]”j*)�”}”(hj36h]”hŒstruct drm_device *dev”…”�”}”(hj56h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj16ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:436: ./drivers/gpu/drm/i915/i915_perf.c”h´M„hj-6ubj@)�”}”(hhh]”hÚ)�”}”(hŒ drm device”h]”hŒ drm device”…”�”}”(hjL6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jH6h´M„hjI6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj-6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jH6h´M„hj*6ubj)�”}”(hŒI``void *data`` ioctl data (pointer to u64 integer) copied from userspace ”h]”(j$)�”}”(hŒ``void *data``”h]”j*)�”}”(hjl6h]”hŒ void *data”…”�”}”(hjn6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:436: ./drivers/gpu/drm/i915/i915_perf.c”h´M…hjf6ubj@)�”}”(hhh]”hÚ)�”}”(hŒ9ioctl data (pointer to u64 integer) copied from userspace”h]”hŒ9ioctl data (pointer to u64 integer) copied from userspace”…”�”}”(hj…6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j�6h´M…hj‚6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjf6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�6h´M…hj*6ubj)�”}”(hŒ#``struct drm_file *file`` drm file ”h]”(j$)�”}”(hŒ``struct drm_file *file``”h]”j*)�”}”(hj¥6h]”hŒstruct drm_file *file”…”�”}”(hj§6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj£6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:436: ./drivers/gpu/drm/i915/i915_perf.c”h´M†hjŸ6ubj@)�”}”(hhh]”hÚ)�”}”(hŒdrm file”h]”hŒdrm file”…”�”}”(hj¾6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jº6h´M†hj»6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjŸ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jº6h´M†hj*6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjà6h]”hŒ Description”…”�”}”(hjâ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:436: ./drivers/gpu/drm/i915/i915_perf.c”h´Mˆhj6ubhÚ)�”}”(hŒ•Configs can be removed while being used, the will stop appearing in sysfs and their content will be freed when the stream using the config is closed.”h]”hŒ•Configs can be removed while being used, the will stop appearing in sysfs and their content will be freed when the stream using the config is closed.”…”�”}”(hjö6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:436: ./drivers/gpu/drm/i915/i915_perf.c”h´M‡hj6ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj7h]”hŒReturn”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:436: ./drivers/gpu/drm/i915/i915_perf.c”h´MŠhj6ubhÚ)�”}”(hŒ10 on success or a negative error code on failure.”h]”hŒ10 on success or a negative error code on failure.”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:436: ./drivers/gpu/drm/i915/i915_perf.c”h´M‹hj6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjè%h²hh³Nh´Nubeh}”(h]”Œi915-driver-entry-points”ah ]”h"]”Œi915 driver entry points”ah$]”h&]”uh1hÄhjå#h²hh³hÃh´M¡ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒi915 Perf Stream”h]”hŒi915 Perf Stream”…”�”}”(hj>7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj;7h²hh³hÃh´M¸ubhÚ)�”}”(hŒ’This section covers the stream-semantics-agnostic structures and functions for representing an i915 perf stream FD and associated file operations.”h]”hŒ’This section covers the stream-semantics-agnostic structures and functions for representing an i915 perf stream FD and associated file operations.”…”�”}”(hjL7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Mºhj;7h²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_perf_stream (C struct)”Œc.i915_perf_stream”hNt”auh1j¶hj;7h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒi915_perf_stream”h]”jÓ)�”}”(hŒstruct i915_perf_stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjs7h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjo7h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Kubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjo7h²hh³j€7h´Kubj)�”}”(hŒi915_perf_stream”h]”jÜ)�”}”(hjm7h]”hŒi915_perf_stream”…”�”}”(hj“7h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�7ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjo7h²hh³j€7h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjk7h²hh³j€7h´Kubah}”(h]”jf7ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j€7h´Khjh7h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ!state for a single open stream FD”h]”hŒ!state for a single open stream FD”…”�”}”(hjµ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´K¥hj²7h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjh7h²hh³j€7h´Kubeh}”(h]”h ]”(jóŒstruct”eh"]”h$]”h&]”jòjójójÍ7jôjÍ7jõ‰jö‰j÷‰uh1jÇh²hhj;7h³Nh´Nubjù)�”}”(hX”**Definition**:: struct i915_perf_stream { struct i915_perf *perf; struct intel_uncore *uncore; struct intel_engine_cs *engine; struct mutex lock; u32 sample_flags; int sample_size; struct i915_gem_context *ctx; bool enabled; bool hold_preemption; const struct i915_perf_stream_ops *ops; struct i915_oa_config *oa_config; struct llist_head oa_config_bos; struct intel_context *pinned_ctx; u32 specific_ctx_id; u32 specific_ctx_id_mask; struct hrtimer poll_check_timer; wait_queue_head_t poll_wq; bool pollin; bool periodic; int period_exponent; struct { const struct i915_oa_format *format; struct i915_vma *vma; u8 *vaddr; u32 last_ctx_id; spinlock_t ptr_lock; u32 head; u32 tail; } oa_buffer; struct i915_vma *noa_wait; u64 poll_oa_period; }; **Members** ``perf`` i915_perf backpointer ``uncore`` mmio access path ``engine`` Engine associated with this performance stream. ``lock`` Lock associated with operations on stream ``sample_flags`` Flags representing the `DRM_I915_PERF_PROP_SAMPLE_*` properties given when opening a stream, representing the contents of a single sample as read() by userspace. ``sample_size`` Considering the configured contents of a sample combined with the required header size, this is the total size of a single sample record. ``ctx`` ``NULL`` if measuring system-wide across all contexts or a specific context that is being monitored. ``enabled`` Whether the stream is currently enabled, considering whether the stream was opened in a disabled state and based on `I915_PERF_IOCTL_ENABLE` and `I915_PERF_IOCTL_DISABLE` calls. ``hold_preemption`` Whether preemption is put on hold for command submissions done on the **ctx**. This is useful for some drivers that cannot easily post process the OA buffer context to subtract delta of performance counters not associated with **ctx**. ``ops`` The callbacks providing the implementation of this specific type of configured stream. ``oa_config`` The OA configuration used by the stream. ``oa_config_bos`` A list of struct i915_oa_config_bo allocated lazily each time **oa_config** changes. ``pinned_ctx`` The OA context specific information. ``specific_ctx_id`` The id of the specific context. ``specific_ctx_id_mask`` The mask used to masking specific_ctx_id bits. ``poll_check_timer`` High resolution timer that will periodically check for data in the circular OA buffer for notifying userspace (e.g. during a read() or poll()). ``poll_wq`` The wait queue that hrtimer callback wakes when it sees data ready to read in the circular OA buffer. ``pollin`` Whether there is data available to read. ``periodic`` Whether periodic sampling is currently enabled. ``period_exponent`` The OA unit sampling frequency is derived from this. ``oa_buffer`` State of the OA buffer. ``oa_buffer.ptr_lock`` Locks reads and writes to all head/tail state Consider: the head and tail pointer state needs to be read consistently from a hrtimer callback (atomic context) and read() fop (user context) with tail pointer updates happening in atomic context and head updates in user context and the (unlikely) possibility of read() errors needing to reset all head/tail state. Note: Contention/performance aren't currently a significant concern here considering the relatively low frequency of hrtimer callbacks (5ms period) and that reads typically only happen in response to a hrtimer event and likely complete before the next callback. Note: This lock is not held *while* reading and copying data to userspace so the value of head observed in htrimer callbacks won't represent any partial consumption of data. ``oa_buffer.head`` Although we can always read back the head pointer register, we prefer to avoid trusting the HW state, just to avoid any risk that some hardware condition could * somehow bump the head pointer unpredictably and cause us to forward the wrong OA buffer data to userspace. ``oa_buffer.tail`` The last verified tail that can be read by userspace. ``noa_wait`` A batch buffer doing a wait on the GPU for the NOA logic to be reprogrammed. ``poll_oa_period`` The period in nanoseconds at which the OA buffer should be checked for available data.”h]”(hÚ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÙ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕ7ubhŒ:”…”�”}”(hjÕ7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´K©hjÑ7ubjA#)�”}”(hXostruct i915_perf_stream { struct i915_perf *perf; struct intel_uncore *uncore; struct intel_engine_cs *engine; struct mutex lock; u32 sample_flags; int sample_size; struct i915_gem_context *ctx; bool enabled; bool hold_preemption; const struct i915_perf_stream_ops *ops; struct i915_oa_config *oa_config; struct llist_head oa_config_bos; struct intel_context *pinned_ctx; u32 specific_ctx_id; u32 specific_ctx_id_mask; struct hrtimer poll_check_timer; wait_queue_head_t poll_wq; bool pollin; bool periodic; int period_exponent; struct { const struct i915_oa_format *format; struct i915_vma *vma; u8 *vaddr; u32 last_ctx_id; spinlock_t ptr_lock; u32 head; u32 tail; } oa_buffer; struct i915_vma *noa_wait; u64 poll_oa_period; };”h]”hXostruct i915_perf_stream { struct i915_perf *perf; struct intel_uncore *uncore; struct intel_engine_cs *engine; struct mutex lock; u32 sample_flags; int sample_size; struct i915_gem_context *ctx; bool enabled; bool hold_preemption; const struct i915_perf_stream_ops *ops; struct i915_oa_config *oa_config; struct llist_head oa_config_bos; struct intel_context *pinned_ctx; u32 specific_ctx_id; u32 specific_ctx_id_mask; struct hrtimer poll_check_timer; wait_queue_head_t poll_wq; bool pollin; bool periodic; int period_exponent; struct { const struct i915_oa_format *format; struct i915_vma *vma; u8 *vaddr; u32 last_ctx_id; spinlock_t ptr_lock; u32 head; u32 tail; } oa_buffer; struct i915_vma *noa_wait; u64 poll_oa_period; };”…”�”}”hjò7sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´K«hjÑ7ubhÚ)�”}”(hŒ **Members**”h]”j)�”}”(hj8h]”hŒMembers”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´KÍhjÑ7ubj)�”}”(hhh]”(j)�”}”(hŒ``perf`` i915_perf backpointer ”h]”(j$)�”}”(hŒ``perf``”h]”j*)�”}”(hj"8h]”hŒperf”…”�”}”(hj$8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj 8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Kªhj8ubj@)�”}”(hhh]”hÚ)�”}”(hŒi915_perf backpointer”h]”hŒi915_perf backpointer”…”�”}”(hj;8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j78h´Kªhj88ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j78h´Kªhj8ubj)�”}”(hŒ``uncore`` mmio access path ”h]”(j$)�”}”(hŒ ``uncore``”h]”j*)�”}”(hj[8h]”hŒuncore”…”�”}”(hj]8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjY8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´K¯hjU8ubj@)�”}”(hhh]”hÚ)�”}”(hŒmmio access path”h]”hŒmmio access path”…”�”}”(hjt8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jp8h´K¯hjq8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjU8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jp8h´K¯hj8ubj)�”}”(hŒ;``engine`` Engine associated with this performance stream. ”h]”(j$)�”}”(hŒ ``engine``”h]”j*)�”}”(hj”8h]”hŒengine”…”�”}”(hj–8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj’8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´K´hjŽ8ubj@)�”}”(hhh]”hÚ)�”}”(hŒ/Engine associated with this performance stream.”h]”hŒ/Engine associated with this performance stream.”…”�”}”(hj­8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j©8h´K´hjª8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjŽ8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©8h´K´hj8ubj)�”}”(hŒ3``lock`` Lock associated with operations on stream ”h]”(j$)�”}”(hŒ``lock``”h]”j*)�”}”(hjÍ8h]”hŒlock”…”�”}”(hjÏ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjË8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´K¹hjÇ8ubj@)�”}”(hhh]”hÚ)�”}”(hŒ)Lock associated with operations on stream”h]”hŒ)Lock associated with operations on stream”…”�”}”(hjæ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jâ8h´K¹hjã8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÇ8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jâ8h´K¹hj8ubj)�”}”(hŒ³``sample_flags`` Flags representing the `DRM_I915_PERF_PROP_SAMPLE_*` properties given when opening a stream, representing the contents of a single sample as read() by userspace. ”h]”(j$)�”}”(hŒ``sample_flags``”h]”j*)�”}”(hj9h]”hŒ sample_flags”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´KÀhj9ubj@)�”}”(hhh]”hÚ)�”}”(hŒ¡Flags representing the `DRM_I915_PERF_PROP_SAMPLE_*` properties given when opening a stream, representing the contents of a single sample as read() by userspace.”h]”(hŒFlags representing the ”…”�”}”(hj9h²hh³Nh´Nubjc)�”}”(hŒ`DRM_I915_PERF_PROP_SAMPLE_*`”h]”hŒDRM_I915_PERF_PROP_SAMPLE_*”…”�”}”(hj'9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chj9ubhŒm properties given when opening a stream, representing the contents of a single sample as read() by userspace.”…”�”}”(hj9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´K¾hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j9h´KÀhj8ubj)�”}”(hŒš``sample_size`` Considering the configured contents of a sample combined with the required header size, this is the total size of a single sample record. ”h]”(j$)�”}”(hŒ``sample_size``”h]”j*)�”}”(hjR9h]”hŒ sample_size”…”�”}”(hjT9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjP9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´KÇhjL9ubj@)�”}”(hhh]”hÚ)�”}”(hŒ‰Considering the configured contents of a sample combined with the required header size, this is the total size of a single sample record.”h]”hŒ‰Considering the configured contents of a sample combined with the required header size, this is the total size of a single sample record.”…”�”}”(hjk9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´KÅhjh9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjL9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jg9h´KÇhj8ubj)�”}”(hŒm``ctx`` ``NULL`` if measuring system-wide across all contexts or a specific context that is being monitored. ”h]”(j$)�”}”(hŒ``ctx``”h]”j*)�”}”(hjŒ9h]”hŒctx”…”�”}”(hjŽ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjŠ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´KÍhj†9ubj@)�”}”(hhh]”hÚ)�”}”(hŒd``NULL`` if measuring system-wide across all contexts or a specific context that is being monitored.”h]”(j*)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj©9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¥9ubhŒ\ if measuring system-wide across all contexts or a specific context that is being monitored.”…”�”}”(hj¥9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´KÌhj¢9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj†9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¡9h´KÍhj8ubj)�”}”(hŒ¾``enabled`` Whether the stream is currently enabled, considering whether the stream was opened in a disabled state and based on `I915_PERF_IOCTL_ENABLE` and `I915_PERF_IOCTL_DISABLE` calls. ”h]”(j$)�”}”(hŒ ``enabled``”h]”j*)�”}”(hjÔ9h]”hŒenabled”…”�”}”(hjÖ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÒ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´KÔhjÎ9ubj@)�”}”(hhh]”hÚ)�”}”(hŒ±Whether the stream is currently enabled, considering whether the stream was opened in a disabled state and based on `I915_PERF_IOCTL_ENABLE` and `I915_PERF_IOCTL_DISABLE` calls.”h]”(hŒtWhether the stream is currently enabled, considering whether the stream was opened in a disabled state and based on ”…”�”}”(hjí9h²hh³Nh´Nubjc)�”}”(hŒ`I915_PERF_IOCTL_ENABLE`”h]”hŒI915_PERF_IOCTL_ENABLE”…”�”}”(hjõ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjí9ubhŒ and ”…”�”}”(hjí9h²hh³Nh´Nubjc)�”}”(hŒ`I915_PERF_IOCTL_DISABLE`”h]”hŒI915_PERF_IOCTL_DISABLE”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjí9ubhŒ calls.”…”�”}”(hjí9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´KÒhjê9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÎ9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jé9h´KÔhj8ubj)�”}”(hX``hold_preemption`` Whether preemption is put on hold for command submissions done on the **ctx**. This is useful for some drivers that cannot easily post process the OA buffer context to subtract delta of performance counters not associated with **ctx**. ”h]”(j$)�”}”(hŒ``hold_preemption``”h]”j*)�”}”(hj2:h]”hŒhold_preemption”…”�”}”(hj4:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj0:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´KÜhj,:ubj@)�”}”(hhh]”hÚ)�”}”(hŒëWhether preemption is put on hold for command submissions done on the **ctx**. This is useful for some drivers that cannot easily post process the OA buffer context to subtract delta of performance counters not associated with **ctx**.”h]”(hŒFWhether preemption is put on hold for command submissions done on the ”…”�”}”(hjK:h²hh³Nh´Nubj)�”}”(hŒ**ctx**”h]”hŒctx”…”�”}”(hjS:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjK:ubhŒ–. This is useful for some drivers that cannot easily post process the OA buffer context to subtract delta of performance counters not associated with ”…”�”}”(hjK:h²hh³Nh´Nubj)�”}”(hŒ**ctx**”h]”hŒctx”…”�”}”(hje:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjK:ubhŒ.”…”�”}”(hjK:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´KÙhjH:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj,:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jG:h´KÜhj8ubj)�”}”(hŒ_``ops`` The callbacks providing the implementation of this specific type of configured stream. ”h]”(j$)�”}”(hŒ``ops``”h]”j*)�”}”(hj�:h]”hŒops”…”�”}”(hj’:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjŽ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´KâhjŠ:ubj@)�”}”(hhh]”hÚ)�”}”(hŒVThe callbacks providing the implementation of this specific type of configured stream.”h]”hŒVThe callbacks providing the implementation of this specific type of configured stream.”…”�”}”(hj©:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Káhj¦:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjŠ:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥:h´Kâhj8ubj)�”}”(hŒ7``oa_config`` The OA configuration used by the stream. ”h]”(j$)�”}”(hŒ ``oa_config``”h]”j*)�”}”(hjÊ:h]”hŒ oa_config”…”�”}”(hjÌ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÈ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´KçhjÄ:ubj@)�”}”(hhh]”hÚ)�”}”(hŒ(The OA configuration used by the stream.”h]”hŒ(The OA configuration used by the stream.”…”�”}”(hjã:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jß:h´Kçhjà:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÄ:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jß:h´Kçhj8ubj)�”}”(hŒg``oa_config_bos`` A list of struct i915_oa_config_bo allocated lazily each time **oa_config** changes. ”h]”(j$)�”}”(hŒ``oa_config_bos``”h]”j*)�”}”(hj;h]”hŒ oa_config_bos”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Kíhjý:ubj@)�”}”(hhh]”hÚ)�”}”(hŒTA list of struct i915_oa_config_bo allocated lazily each time **oa_config** changes.”h]”(hŒ>A list of struct i915_oa_config_bo allocated lazily each time ”…”�”}”(hj;h²hh³Nh´Nubj)�”}”(hŒ **oa_config**”h]”hŒ oa_config”…”�”}”(hj$;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;ubhŒ changes.”…”�”}”(hj;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Kìhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjý:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;h´Kíhj8ubj)�”}”(hŒ4``pinned_ctx`` The OA context specific information. ”h]”(j$)�”}”(hŒ``pinned_ctx``”h]”j*)�”}”(hjO;h]”hŒ pinned_ctx”…”�”}”(hjQ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjM;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´KòhjI;ubj@)�”}”(hhh]”hÚ)�”}”(hŒ$The OA context specific information.”h]”hŒ$The OA context specific information.”…”�”}”(hjh;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jd;h´Kòhje;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjI;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jd;h´Kòhj8ubj)�”}”(hŒ4``specific_ctx_id`` The id of the specific context. ”h]”(j$)�”}”(hŒ``specific_ctx_id``”h]”j*)�”}”(hjˆ;h]”hŒspecific_ctx_id”…”�”}”(hjŠ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj†;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´K÷hj‚;ubj@)�”}”(hhh]”hÚ)�”}”(hŒThe id of the specific context.”h]”hŒThe id of the specific context.”…”�”}”(hj¡;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j�;h´K÷hjž;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj‚;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�;h´K÷hj8ubj)�”}”(hŒH``specific_ctx_id_mask`` The mask used to masking specific_ctx_id bits. ”h]”(j$)�”}”(hŒ``specific_ctx_id_mask``”h]”j*)�”}”(hjÁ;h]”hŒspecific_ctx_id_mask”…”�”}”(hjÃ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¿;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Kühj»;ubj@)�”}”(hhh]”hÚ)�”}”(hŒ.The mask used to masking specific_ctx_id bits.”h]”hŒ.The mask used to masking specific_ctx_id bits.”…”�”}”(hjÚ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÖ;h´Kühj×;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj»;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÖ;h´Kühj8ubj)�”}”(hŒ¥``poll_check_timer`` High resolution timer that will periodically check for data in the circular OA buffer for notifying userspace (e.g. during a read() or poll()). ”h]”(j$)�”}”(hŒ``poll_check_timer``”h]”j*)�”}”(hjú;h]”hŒpoll_check_timer”…”�”}”(hjü;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjø;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Mhjô;ubj@)�”}”(hhh]”hÚ)�”}”(hŒ�High resolution timer that will periodically check for data in the circular OA buffer for notifying userspace (e.g. during a read() or poll()).”h]”hŒ�High resolution timer that will periodically check for data in the circular OA buffer for notifying userspace (e.g. during a read() or poll()).”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Mhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjô;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j<h´Mhj8ubj)�”}”(hŒr``poll_wq`` The wait queue that hrtimer callback wakes when it sees data ready to read in the circular OA buffer. ”h]”(j$)�”}”(hŒ ``poll_wq``”h]”j*)�”}”(hj4<h]”hŒpoll_wq”…”�”}”(hj6<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj2<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´M hj.<ubj@)�”}”(hhh]”hÚ)�”}”(hŒeThe wait queue that hrtimer callback wakes when it sees data ready to read in the circular OA buffer.”h]”hŒeThe wait queue that hrtimer callback wakes when it sees data ready to read in the circular OA buffer.”…”�”}”(hjM<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´MhjJ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj.<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jI<h´M hj8ubj)�”}”(hŒ4``pollin`` Whether there is data available to read. ”h]”(j$)�”}”(hŒ ``pollin``”h]”j*)�”}”(hjn<h]”hŒpollin”…”�”}”(hjp<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjl<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Mhjh<ubj@)�”}”(hhh]”hÚ)�”}”(hŒ(Whether there is data available to read.”h]”hŒ(Whether there is data available to read.”…”�”}”(hj‡<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jƒ<h´Mhj„<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjh<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒ<h´Mhj8ubj)�”}”(hŒ=``periodic`` Whether periodic sampling is currently enabled. ”h]”(j$)�”}”(hŒ ``periodic``”h]”j*)�”}”(hj§<h]”hŒperiodic”…”�”}”(hj©<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¥<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Mhj¡<ubj@)�”}”(hhh]”hÚ)�”}”(hŒ/Whether periodic sampling is currently enabled.”h]”hŒ/Whether periodic sampling is currently enabled.”…”�”}”(hjÀ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¼<h´Mhj½<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¡<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼<h´Mhj8ubj)�”}”(hŒI``period_exponent`` The OA unit sampling frequency is derived from this. ”h]”(j$)�”}”(hŒ``period_exponent``”h]”j*)�”}”(hjà<h]”hŒperiod_exponent”…”�”}”(hjâ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÞ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´MhjÚ<ubj@)�”}”(hhh]”hÚ)�”}”(hŒ4The OA unit sampling frequency is derived from this.”h]”hŒ4The OA unit sampling frequency is derived from this.”…”�”}”(hjù<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jõ<h´Mhjö<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÚ<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõ<h´Mhj8ubj)�”}”(hŒ&``oa_buffer`` State of the OA buffer. ”h]”(j$)�”}”(hŒ ``oa_buffer``”h]”j*)�”}”(hj=h]”hŒ oa_buffer”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Mhj=ubj@)�”}”(hhh]”hÚ)�”}”(hŒState of the OA buffer.”h]”hŒState of the OA buffer.”…”�”}”(hj2=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j.=h´Mhj/=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.=h´Mhj8ubj)�”}”(hX8``oa_buffer.ptr_lock`` Locks reads and writes to all head/tail state Consider: the head and tail pointer state needs to be read consistently from a hrtimer callback (atomic context) and read() fop (user context) with tail pointer updates happening in atomic context and head updates in user context and the (unlikely) possibility of read() errors needing to reset all head/tail state. Note: Contention/performance aren't currently a significant concern here considering the relatively low frequency of hrtimer callbacks (5ms period) and that reads typically only happen in response to a hrtimer event and likely complete before the next callback. Note: This lock is not held *while* reading and copying data to userspace so the value of head observed in htrimer callbacks won't represent any partial consumption of data. ”h]”(j$)�”}”(hŒ``oa_buffer.ptr_lock``”h]”j*)�”}”(hjR=h]”hŒoa_buffer.ptr_lock”…”�”}”(hjT=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjP=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´M8hjL=ubj@)�”}”(hhh]”(hÚ)�”}”(hŒ-Locks reads and writes to all head/tail state”h]”hŒ-Locks reads and writes to all head/tail state”…”�”}”(hjk=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´M&hjh=ubhÚ)�”}”(hX;Consider: the head and tail pointer state needs to be read consistently from a hrtimer callback (atomic context) and read() fop (user context) with tail pointer updates happening in atomic context and head updates in user context and the (unlikely) possibility of read() errors needing to reset all head/tail state.”h]”hX;Consider: the head and tail pointer state needs to be read consistently from a hrtimer callback (atomic context) and read() fop (user context) with tail pointer updates happening in atomic context and head updates in user context and the (unlikely) possibility of read() errors needing to reset all head/tail state.”…”�”}”(hjz=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´M)hjh=ubhÚ)�”}”(hXNote: Contention/performance aren't currently a significant concern here considering the relatively low frequency of hrtimer callbacks (5ms period) and that reads typically only happen in response to a hrtimer event and likely complete before the next callback.”h]”hXNote: Contention/performance aren’t currently a significant concern here considering the relatively low frequency of hrtimer callbacks (5ms period) and that reads typically only happen in response to a hrtimer event and likely complete before the next callback.”…”�”}”(hj‰=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´M0hjh=ubhÚ)�”}”(hŒ­Note: This lock is not held *while* reading and copying data to userspace so the value of head observed in htrimer callbacks won't represent any partial consumption of data.”h]”(hŒNote: This lock is not held ”…”�”}”(hj˜=h²hh³Nh´Nubj¹>)�”}”(hŒ*while*”h]”hŒwhile”…”�”}”(hj =h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¸>hj˜=ubhŒŒ reading and copying data to userspace so the value of head observed in htrimer callbacks won’t represent any partial consumption of data.”…”�”}”(hj˜=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´M6hjh=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j?hjL=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jg=h´M8hj8ubj)�”}”(hX ``oa_buffer.head`` Although we can always read back the head pointer register, we prefer to avoid trusting the HW state, just to avoid any risk that some hardware condition could * somehow bump the head pointer unpredictably and cause us to forward the wrong OA buffer data to userspace. ”h]”(j$)�”}”(hŒ``oa_buffer.head``”h]”j*)�”}”(hjË=h]”hŒoa_buffer.head”…”�”}”(hjÍ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÉ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´MBhjÅ=ubj@)�”}”(hhh]”hÚ)�”}”(hX Although we can always read back the head pointer register, we prefer to avoid trusting the HW state, just to avoid any risk that some hardware condition could * somehow bump the head pointer unpredictably and cause us to forward the wrong OA buffer data to userspace.”h]”hX Although we can always read back the head pointer register, we prefer to avoid trusting the HW state, just to avoid any risk that some hardware condition could * somehow bump the head pointer unpredictably and cause us to forward the wrong OA buffer data to userspace.”…”�”}”(hjä=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´M=hjá=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÅ=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jà=h´MBhj8ubj)�”}”(hŒI``oa_buffer.tail`` The last verified tail that can be read by userspace. ”h]”(j$)�”}”(hŒ``oa_buffer.tail``”h]”j*)�”}”(hj>h]”hŒoa_buffer.tail”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´MHhjÿ=ubj@)�”}”(hhh]”hÚ)�”}”(hŒ5The last verified tail that can be read by userspace.”h]”hŒ5The last verified tail that can be read by userspace.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´MGhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÿ=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j>h´MHhj8ubj)�”}”(hŒZ``noa_wait`` A batch buffer doing a wait on the GPU for the NOA logic to be reprogrammed. ”h]”(j$)�”}”(hŒ ``noa_wait``”h]”j*)�”}”(hj?>h]”hŒnoa_wait”…”�”}”(hjA>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj=>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´MOhj9>ubj@)�”}”(hhh]”hÚ)�”}”(hŒLA batch buffer doing a wait on the GPU for the NOA logic to be reprogrammed.”h]”hŒLA batch buffer doing a wait on the GPU for the NOA logic to be reprogrammed.”…”�”}”(hjX>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´MNhjU>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj9>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jT>h´MOhj8ubj)�”}”(hŒi``poll_oa_period`` The period in nanoseconds at which the OA buffer should be checked for available data.”h]”(j$)�”}”(hŒ``poll_oa_period``”h]”j*)�”}”(hjy>h]”hŒpoll_oa_period”…”�”}”(hj{>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjw>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:445: ./drivers/gpu/drm/i915/i915_perf_types.h”h´MThjs>ubj@)�”}”(hhh]”hÚ)�”}”(hŒVThe period in nanoseconds at which the OA buffer should be checked for available data.”h]”hŒVThe period in nanoseconds at which the OA buffer should be checked for available data.”…”�”}”(hj’>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jŽ>h´MThj�>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjs>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŽ>h´MThj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑ7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj;7h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_perf_stream_ops (C struct)”Œc.i915_perf_stream_ops”hNt”auh1j¶hj;7h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒi915_perf_stream_ops”h]”jÓ)�”}”(hŒstruct i915_perf_stream_ops”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÒ>h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjÎ>h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:447: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Kubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÎ>h²hh³jß>h´Kubj)�”}”(hŒi915_perf_stream_ops”h]”jÜ)�”}”(hjÌ>h]”hŒi915_perf_stream_ops”…”�”}”(hjò>h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjî>ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÎ>h²hh³jß>h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÊ>h²hh³jß>h´Kubah}”(h]”jÅ>ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jß>h´KhjÇ>h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ)the OPs to support a specific stream type”h]”hŒ)the OPs to support a specific stream type”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:447: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Kehj?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÇ>h²hh³jß>h´Kubeh}”(h]”h ]”(jóŒstruct”eh"]”h$]”h&]”jòjójój,?jôj,?jõ‰jö‰j÷‰uh1jÇh²hhj;7h³Nh´Nubjù)�”}”(hXÌ**Definition**:: struct i915_perf_stream_ops { void (*enable)(struct i915_perf_stream *stream); void (*disable)(struct i915_perf_stream *stream); void (*poll_wait)(struct i915_perf_stream *stream, struct file *file, poll_table *wait); int (*wait_unlocked)(struct i915_perf_stream *stream); int (*read)(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset); void (*destroy)(struct i915_perf_stream *stream); }; **Members** ``enable`` Enables the collection of HW samples, either in response to `I915_PERF_IOCTL_ENABLE` or implicitly called when stream is opened without `I915_PERF_FLAG_DISABLED`. ``disable`` Disables the collection of HW samples, either in response to `I915_PERF_IOCTL_DISABLE` or implicitly called before destroying the stream. ``poll_wait`` Call poll_wait, passing a wait queue that will be woken once there is something ready to read() for the stream ``wait_unlocked`` For handling a blocking read, wait until there is something to ready to read() for the stream. E.g. wait on the same wait queue that would be passed to poll_wait(). ``read`` Copy buffered metrics as records to userspace **buf**: the userspace, destination buffer **count**: the number of bytes to copy, requested by userspace **offset**: zero at the start of the read, updated as the read proceeds, it represents how many bytes have been copied so far and the buffer offset for copying the next record. Copy as many buffered i915 perf samples and records for this stream to userspace as will fit in the given buffer. Only write complete records; returning -``ENOSPC`` if there isn't room for a complete record. Return any error condition that results in a short read such as -``ENOSPC`` or -``EFAULT``, even though these may be squashed before returning to userspace. ``destroy`` Cleanup any stream specific resources. The stream will always be disabled before this is called.”h]”(hÚ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj8?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4?ubhŒ:”…”�”}”(hj4?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:447: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Kihj0?ubjA#)�”}”(hX»struct i915_perf_stream_ops { void (*enable)(struct i915_perf_stream *stream); void (*disable)(struct i915_perf_stream *stream); void (*poll_wait)(struct i915_perf_stream *stream, struct file *file, poll_table *wait); int (*wait_unlocked)(struct i915_perf_stream *stream); int (*read)(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset); void (*destroy)(struct i915_perf_stream *stream); };”h]”hX»struct i915_perf_stream_ops { void (*enable)(struct i915_perf_stream *stream); void (*disable)(struct i915_perf_stream *stream); void (*poll_wait)(struct i915_perf_stream *stream, struct file *file, poll_table *wait); int (*wait_unlocked)(struct i915_perf_stream *stream); int (*read)(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset); void (*destroy)(struct i915_perf_stream *stream); };”…”�”}”hjQ?sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:447: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Kkhj0?ubhÚ)�”}”(hŒ **Members**”h]”j)�”}”(hjb?h]”hŒMembers”…”�”}”(hjd?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:447: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Kthj0?ubj)�”}”(hhh]”(j)�”}”(hŒ®``enable`` Enables the collection of HW samples, either in response to `I915_PERF_IOCTL_ENABLE` or implicitly called when stream is opened without `I915_PERF_FLAG_DISABLED`. ”h]”(j$)�”}”(hŒ ``enable``”h]”j*)�”}”(hj�?h]”hŒenable”…”�”}”(hjƒ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:447: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Klhj{?ubj@)�”}”(hhh]”hÚ)�”}”(hŒ¢Enables the collection of HW samples, either in response to `I915_PERF_IOCTL_ENABLE` or implicitly called when stream is opened without `I915_PERF_FLAG_DISABLED`.”h]”(hŒ)�”}”(hŒstruct i915_perf *perf”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjBubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjBubh)�”}”(hhh]”jÜ)�”}”(hŒ i915_perf”h]”hŒ i915_perf”…”�”}”(hj6Bh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj3Bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j8BŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjþAsbŒc.read_properties_unlocked”†”asbuh1hhjBubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjBubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjdBh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjBubjÜ)�”}”(hŒperf”h]”hŒperf”…”�”}”(hjqBh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjBubj>)�”}”(hŒu64 __user *uprops”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj�Bh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŠBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j�BŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jRBŒc.read_properties_unlocked”†”asbuh1hhj†Bubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj†BubhŒ__user”…”�”}”(hj†Bh²hh³Nh´Nubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj†Bubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjËBh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj†BubjÜ)�”}”(hŒuprops”h]”hŒuprops”…”�”}”(hjØBh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj†Bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjBubj>)�”}”(hŒ u32 n_props”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjôBh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjñBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jöBŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jRBŒc.read_properties_unlocked”†”asbuh1hhjíBubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjíBubjÜ)�”}”(hŒn_props”h]”hŒn_props”…”�”}”(hj Ch²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjíBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjBubj>)�”}”(h•Œ"struct perf_open_properties *props”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj9Ch²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj5Cubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj5Cubh)�”}”(hhh]”jÜ)�”}”(hŒperf_open_properties”h]”hŒperf_open_properties”…”�”}”(hjWCh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjTCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jYCŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jRBŒc.read_properties_unlocked”†”asbuh1hhj5Cubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj5Cubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjƒCh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj5CubjÜ)�”}”(hŒprops”h]”hŒprops”…”�”}”(hj�Ch²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj5Cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjBubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj×Ah²hh³jéAh´Mpubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÓAh²hh³jéAh´Mpubah}”(h]”jÎAah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jéAh´MphjÐAh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ0validate + copy userspace stream open properties”h]”hŒ0validate + copy userspace stream open properties”…”�”}”(hjºCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:450: ./drivers/gpu/drm/i915/i915_perf.c”h´Mphj·Ch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÐAh²hh³jéAh´Mpubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójÒCjôjÒCjõ‰jö‰j÷‰uh1jÇh²hhj;7h³Nh´Nubjù)�”}”(hX**Parameters** ``struct i915_perf *perf`` i915 perf instance ``u64 __user *uprops`` The array of u64 key value pairs given by userspace ``u32 n_props`` The number of key value pairs expected in **uprops** ``struct perf_open_properties *props`` The stream configuration built up while validating properties **Description** Note this function only validates properties in isolation it doesn't validate that the combination of properties makes sense or that all properties necessary for a particular kind of stream have been set. Note that there currently aren't any ordering requirements for properties so we shouldn't validate or assume anything about ordering here. This doesn't rule out defining new properties with ordering requirements in the future.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÜCh]”hŒ Parameters”…”�”}”(hjÞCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚCubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:450: ./drivers/gpu/drm/i915/i915_perf.c”h´MthjÖCubj)�”}”(hhh]”(j)�”}”(hŒ.``struct i915_perf *perf`` i915 perf instance ”h]”(j$)�”}”(hŒ``struct i915_perf *perf``”h]”j*)�”}”(hjûCh]”hŒstruct i915_perf *perf”…”�”}”(hjýCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjùCubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:450: ./drivers/gpu/drm/i915/i915_perf.c”h´MqhjõCubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 perf instance”h]”hŒi915 perf instance”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jDh´MqhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjõCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jDh´MqhjòCubj)�”}”(hŒK``u64 __user *uprops`` The array of u64 key value pairs given by userspace ”h]”(j$)�”}”(hŒ``u64 __user *uprops``”h]”j*)�”}”(hj4Dh]”hŒu64 __user *uprops”…”�”}”(hj6Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj2Dubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:450: ./drivers/gpu/drm/i915/i915_perf.c”h´Mrhj.Dubj@)�”}”(hhh]”hÚ)�”}”(hŒ3The array of u64 key value pairs given by userspace”h]”hŒ3The array of u64 key value pairs given by userspace”…”�”}”(hjMDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jIDh´MrhjJDubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj.Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jIDh´MrhjòCubj)�”}”(hŒE``u32 n_props`` The number of key value pairs expected in **uprops** ”h]”(j$)�”}”(hŒ``u32 n_props``”h]”j*)�”}”(hjmDh]”hŒ u32 n_props”…”�”}”(hjoDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjkDubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:450: ./drivers/gpu/drm/i915/i915_perf.c”h´MshjgDubj@)�”}”(hhh]”hÚ)�”}”(hŒ4The number of key value pairs expected in **uprops**”h]”(hŒ*The number of key value pairs expected in ”…”�”}”(hj†Dh²hh³Nh´Nubj)�”}”(hŒ **uprops**”h]”hŒuprops”…”�”}”(hjŽDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j‚Dh´MshjƒDubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjgDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚Dh´MshjòCubj)�”}”(hŒe``struct perf_open_properties *props`` The stream configuration built up while validating properties ”h]”(j$)�”}”(hŒ&``struct perf_open_properties *props``”h]”j*)�”}”(hj´Dh]”hŒ"struct perf_open_properties *props”…”�”}”(hj¶Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj²Dubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:450: ./drivers/gpu/drm/i915/i915_perf.c”h´Mthj®Dubj@)�”}”(hhh]”hÚ)�”}”(hŒ=The stream configuration built up while validating properties”h]”hŒ=The stream configuration built up while validating properties”…”�”}”(hjÍDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÉDh´MthjÊDubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj®Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÉDh´MthjòCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖCubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjïDh]”hŒ Description”…”�”}”(hjñDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjíDubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:450: ./drivers/gpu/drm/i915/i915_perf.c”h´MvhjÖCubhÚ)�”}”(hŒÌNote this function only validates properties in isolation it doesn't validate that the combination of properties makes sense or that all properties necessary for a particular kind of stream have been set.”h]”hŒÎNote this function only validates properties in isolation it doesn’t validate that the combination of properties makes sense or that all properties necessary for a particular kind of stream have been set.”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:450: ./drivers/gpu/drm/i915/i915_perf.c”h´MuhjÖCubhÚ)�”}”(hŒâNote that there currently aren't any ordering requirements for properties so we shouldn't validate or assume anything about ordering here. This doesn't rule out defining new properties with ordering requirements in the future.”h]”hŒèNote that there currently aren’t any ordering requirements for properties so we shouldn’t validate or assume anything about ordering here. This doesn’t rule out defining new properties with ordering requirements in the future.”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:450: ./drivers/gpu/drm/i915/i915_perf.c”h´MyhjÖCubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj;7h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ(i915_perf_open_ioctl_locked (C function)”Œc.i915_perf_open_ioctl_locked”hNt”auh1j¶hj;7h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ›int i915_perf_open_ioctl_locked (struct i915_perf *perf, struct drm_i915_perf_open_param *param, struct perf_open_properties *props, struct drm_file *file)”h]”jÓ)�”}”(hŒšint i915_perf_open_ioctl_locked(struct i915_perf *perf, struct drm_i915_perf_open_param *param, struct perf_open_properties *props, struct drm_file *file)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjCEh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj?Eh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´M¹ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjREh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj?Eh²hh³jQEh´M¹ubj)�”}”(hŒi915_perf_open_ioctl_locked”h]”jÜ)�”}”(hŒi915_perf_open_ioctl_locked”h]”hŒi915_perf_open_ioctl_locked”…”�”}”(hjdEh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj`Eubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj?Eh²hh³jQEh´M¹ubj8)�”}”(hŒ{(struct i915_perf *perf, struct drm_i915_perf_open_param *param, struct perf_open_properties *props, struct drm_file *file)”h]”(j>)�”}”(hŒstruct i915_perf *perf”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj€Eh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj|Eubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj|Eubh)�”}”(hhh]”jÜ)�”}”(hŒ i915_perf”h]”hŒ i915_perf”…”�”}”(hjžEh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj›Eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j EŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjfEsbŒc.i915_perf_open_ioctl_locked”†”asbuh1hhj|Eubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj|Eubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÌEh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj|EubjÜ)�”}”(hŒperf”h]”hŒperf”…”�”}”(hjÙEh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj|Eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjxEubj>)�”}”(hŒ&struct drm_i915_perf_open_param *param”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjòEh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjîEubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjîEubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_perf_open_param”h]”hŒdrm_i915_perf_open_param”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj Fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jFŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jºEŒc.i915_perf_open_ioctl_locked”†”asbuh1hhjîEubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjîEubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj)�”}”(hŒ"struct perf_open_properties *props”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjbFh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj^Fubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj^Fubh)�”}”(hhh]”jÜ)�”}”(hŒperf_open_properties”h]”hŒperf_open_properties”…”�”}”(hj€Fh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj}Fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j‚FŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jºEŒc.i915_perf_open_ioctl_locked”†”asbuh1hhj^Fubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj^Fubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¬Fh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj^FubjÜ)�”}”(hŒprops”h]”hŒprops”…”�”}”(hj¹Fh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj^Fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjxEubj>)�”}”(hŒstruct drm_file *file”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÒFh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjÎFubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÎFubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_file”h]”hŒdrm_file”…”�”}”(hjðFh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjíFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jòFŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jºEŒc.i915_perf_open_ioctl_locked”†”asbuh1hhjÎFubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÎFubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÎFubjÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj)Gh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÎFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjxEubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj?Eh²hh³jQEh´M¹ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj;Eh²hh³jQEh´M¹ubah}”(h]”j6Eah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jQEh´M¹hj8Eh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ-DRM ioctl() for userspace to open a stream FD”h]”hŒ-DRM ioctl() for userspace to open a stream FD”…”�”}”(hjSGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´M¹hjPGh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj8Eh²hh³jQEh´M¹ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójkGjôjkGjõ‰jö‰j÷‰uh1jÇh²hhj;7h³Nh´Nubjù)�”}”(hX **Parameters** ``struct i915_perf *perf`` i915 perf instance ``struct drm_i915_perf_open_param *param`` The open parameters passed to 'DRM_I915_PERF_OPEN` ``struct perf_open_properties *props`` individually validated u64 property value pairs ``struct drm_file *file`` drm file **Description** See i915_perf_ioctl_open() for interface details. Implements further stream config validation and stream initialization on behalf of i915_perf_open_ioctl() with the :c:type:`gt->perf `.lock mutex taken to serialize with any non-file-operation driver hooks. **Note** at this point the **props** have only been validated in isolation and it's still necessary to validate that the combination of properties makes sense. In the case where userspace is interested in OA unit metrics then further config validation and stream initialization details will be handled by i915_oa_stream_init(). The code here should only validate config state that will be relevant to all stream types / backends. **Return** zero on success or a negative error code.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjuGh]”hŒ Parameters”…”�”}”(hjwGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjsGubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´M½hjoGubj)�”}”(hhh]”(j)�”}”(hŒ.``struct i915_perf *perf`` i915 perf instance ”h]”(j$)�”}”(hŒ``struct i915_perf *perf``”h]”j*)�”}”(hj”Gh]”hŒstruct i915_perf *perf”…”�”}”(hj–Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj’Gubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´MºhjŽGubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 perf instance”h]”hŒi915 perf instance”…”�”}”(hj­Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j©Gh´MºhjªGubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjŽGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©Gh´Mºhj‹Gubj)�”}”(hŒ^``struct drm_i915_perf_open_param *param`` The open parameters passed to 'DRM_I915_PERF_OPEN` ”h]”(j$)�”}”(hŒ*``struct drm_i915_perf_open_param *param``”h]”j*)�”}”(hjÍGh]”hŒ&struct drm_i915_perf_open_param *param”…”�”}”(hjÏGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjËGubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´M»hjÇGubj@)�”}”(hhh]”hÚ)�”}”(hŒ2The open parameters passed to 'DRM_I915_PERF_OPEN`”h]”hŒ4The open parameters passed to ‘DRM_I915_PERF_OPEN`”…”�”}”(hjæGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jâGh´M»hjãGubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÇGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jâGh´M»hj‹Gubj)�”}”(hŒW``struct perf_open_properties *props`` individually validated u64 property value pairs ”h]”(j$)�”}”(hŒ&``struct perf_open_properties *props``”h]”j*)�”}”(hjHh]”hŒ"struct perf_open_properties *props”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´M¼hjHubj@)�”}”(hhh]”hÚ)�”}”(hŒ/individually validated u64 property value pairs”h]”hŒ/individually validated u64 property value pairs”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jHh´M¼hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jHh´M¼hj‹Gubj)�”}”(hŒ#``struct drm_file *file`` drm file ”h]”(j$)�”}”(hŒ``struct drm_file *file``”h]”j*)�”}”(hj?Hh]”hŒstruct drm_file *file”…”�”}”(hjAHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj=Hubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´M½hj9Hubj@)�”}”(hhh]”hÚ)�”}”(hŒdrm file”h]”hŒdrm file”…”�”}”(hjXHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jTHh´M½hjUHubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj9Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jTHh´M½hj‹Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjoGubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjzHh]”hŒ Description”…”�”}”(hj|Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjxHubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´M¿hjoGubhÚ)�”}”(hŒ1See i915_perf_ioctl_open() for interface details.”h]”hŒ1See i915_perf_ioctl_open() for interface details.”…”�”}”(hj�Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´M¾hjoGubhÚ)�”}”(hŒÒImplements further stream config validation and stream initialization on behalf of i915_perf_open_ioctl() with the :c:type:`gt->perf `.lock mutex taken to serialize with any non-file-operation driver hooks.”h]”(hŒsImplements further stream config validation and stream initialization on behalf of i915_perf_open_ioctl() with the ”…”�”}”(hjŸHh²hh³Nh´Nubh)�”}”(hŒ:c:type:`gt->perf `”h]”j*)�”}”(hj©Hh]”hŒgt->perf”…”�”}”(hj«Hh²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hj§Hubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒgt”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´MÀhjŸHubhŒH.lock mutex taken to serialize with any non-file-operation driver hooks.”…”�”}”(hjŸHh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÆHh´MÀhjoGubhÚ)�”}”(hŒ**Note**”h]”j)�”}”(hjÓHh]”hŒNote”…”�”}”(hjÕHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑHubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´MÄhjoGubhÚ)�”}”(hŒ–at this point the **props** have only been validated in isolation and it's still necessary to validate that the combination of properties makes sense.”h]”(hŒat this point the ”…”�”}”(hjéHh²hh³Nh´Nubj)�”}”(hŒ **props**”h]”hŒprops”…”�”}”(hjñHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjéHubhŒ} have only been validated in isolation and it’s still necessary to validate that the combination of properties makes sense.”…”�”}”(hjéHh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´MÅhjoGubhÚ)�”}”(hX In the case where userspace is interested in OA unit metrics then further config validation and stream initialization details will be handled by i915_oa_stream_init(). The code here should only validate config state that will be relevant to all stream types / backends.”h]”hX In the case where userspace is interested in OA unit metrics then further config validation and stream initialization details will be handled by i915_oa_stream_init(). The code here should only validate config state that will be relevant to all stream types / backends.”…”�”}”(hj Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´MÉhjoGubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjIh]”hŒReturn”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´MÎhjoGubhÚ)�”}”(hŒ)zero on success or a negative error code.”h]”hŒ)zero on success or a negative error code.”…”�”}”(hj1Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:452: ./drivers/gpu/drm/i915/i915_perf.c”h´MÎhjoGubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj;7h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ%i915_perf_destroy_locked (C function)”Œc.i915_perf_destroy_locked”hNt”auh1j¶hj;7h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ?void i915_perf_destroy_locked (struct i915_perf_stream *stream)”h]”jÓ)�”}”(hŒ>void i915_perf_destroy_locked(struct i915_perf_stream *stream)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj`Ih²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj\Ih²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:454: ./drivers/gpu/drm/i915/i915_perf.c”h´Msubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj\Ih²hh³jnIh´Msubj)�”}”(hŒi915_perf_destroy_locked”h]”jÜ)�”}”(hŒi915_perf_destroy_locked”h]”hŒi915_perf_destroy_locked”…”�”}”(hj�Ih²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj}Iubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj\Ih²hh³jnIh´Msubj8)�”}”(hŒ!(struct i915_perf_stream *stream)”h]”j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj�Ih²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj™Iubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj™Iubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hj»Ih²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¸Iubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j½IŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjƒIsbŒc.i915_perf_destroy_locked”†”asbuh1hhj™Iubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj™Iubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjéIh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj™IubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjöIh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj™Iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj•Iubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj\Ih²hh³jnIh´Msubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjXIh²hh³jnIh´Msubah}”(h]”jSIah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jnIh´MshjUIh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒdestroy an i915 perf stream”h]”hŒdestroy an i915 perf stream”…”�”}”(hj Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:454: ./drivers/gpu/drm/i915/i915_perf.c”h´MshjJh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjUIh²hh³jnIh´Msubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój8Jjôj8Jjõ‰jö‰j÷‰uh1jÇh²hhj;7h³Nh´Nubjù)�”}”(hXM**Parameters** ``struct i915_perf_stream *stream`` An i915 perf stream **Description** Frees all resources associated with the given i915 perf **stream**, disabling any associated data capture in the process. **Note** The :c:type:`gt->perf `.lock mutex has been taken to serialize with any non-file-operation driver hooks.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjBJh]”hŒ Parameters”…”�”}”(hjDJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@Jubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:454: ./drivers/gpu/drm/i915/i915_perf.c”h´Mwhjperf `.lock mutex has been taken to serialize with any non-file-operation driver hooks.”h]”(hŒThe ”…”�”}”(hjëJh²hh³Nh´Nubh)�”}”(hŒ:c:type:`gt->perf `”h]”j*)�”}”(hjõJh]”hŒgt->perf”…”�”}”(hj÷Jh²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjóJubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒgt”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:454: ./drivers/gpu/drm/i915/i915_perf.c”h´MyhjëJubhŒQ.lock mutex has been taken to serialize with any non-file-operation driver hooks.”…”�”}”(hjëJh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jKh´Myhj)�”}”(hŒstruct file *file”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj�Kh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj‹Kubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj‹Kubh)�”}”(hhh]”jÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj­Kh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjªKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j¯KŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j\KŒc.i915_perf_read”†”asbuh1hhj‹Kubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj‹Kubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÙKh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj‹KubjÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjæKh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj‹Kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj‡Kubj>)�”}”(hŒchar __user *buf”h]”(jn)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÿKh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjûKubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjûKubhŒ__user”…”�”}”(hjûKh²hh³Nh´Nubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjûKubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj-Lh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjûKubjÜ)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj:Lh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjûKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj‡Kubj>)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjVLh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjSLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jXLŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j\KŒc.i915_perf_read”†”asbuh1hhjOLubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjOLubjÜ)�”}”(hŒcount”h]”hŒcount”…”�”}”(hj‚Lh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjOLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj‡Kubj>)�”}”(hŒ loff_t *ppos”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjžLh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj›Lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j LŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j\KŒc.i915_perf_read”†”asbuh1hhj—Lubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj—Lubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÊLh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj—LubjÜ)�”}”(hŒppos”h]”hŒppos”…”�”}”(hj×Lh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj—Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj‡Kubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj9Kh²hh³jaKh´MS ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj5Kh²hh³jaKh´MS ubah}”(h]”j0Kah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jaKh´MS hj2Kh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ+handles read() FOP for i915 perf stream FDs”h]”hŒ+handles read() FOP for i915 perf stream FDs”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:456: ./drivers/gpu/drm/i915/i915_perf.c”h´MS hjþLh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj2Kh²hh³jaKh´MS ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójMjôjMjõ‰jö‰j÷‰uh1jÇh²hhj;7h³Nh´Nubjù)�”}”(hX'**Parameters** ``struct file *file`` An i915 perf stream file ``char __user *buf`` destination buffer given by userspace ``size_t count`` the number of bytes userspace wants to read ``loff_t *ppos`` (inout) file seek position (unused) **Description** The entry point for handling a read() on a stream file descriptor from userspace. Most of the work is left to the i915_perf_read_locked() and :c:type:`i915_perf_stream_ops->read ` but to save having stream implementations (of which we might have multiple later) we handle blocking read here. We can also consistently treat trying to read from a disabled stream as an IO error so implementations can assume the stream is enabled while reading. **Return** The number of bytes copied or a negative error code on failure.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj#Mh]”hŒ Parameters”…”�”}”(hj%Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!Mubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:456: ./drivers/gpu/drm/i915/i915_perf.c”h´MW hjMubj)�”}”(hhh]”(j)�”}”(hŒ/``struct file *file`` An i915 perf stream file ”h]”(j$)�”}”(hŒ``struct file *file``”h]”j*)�”}”(hjBMh]”hŒstruct file *file”…”�”}”(hjDMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj@Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:456: ./drivers/gpu/drm/i915/i915_perf.c”h´MT hjread ` but to save having stream implementations (of which we might have multiple later) we handle blocking read here.”h]”(hŒŽThe entry point for handling a read() on a stream file descriptor from userspace. Most of the work is left to the i915_perf_read_locked() and ”…”�”}”(hj>Nh²hh³Nh´Nubh)�”}”(hŒ;:c:type:`i915_perf_stream_ops->read `”h]”j*)�”}”(hjHNh]”hŒi915_perf_stream_ops->read”…”�”}”(hjJNh²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjFNubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒi915_perf_stream_ops”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:456: ./drivers/gpu/drm/i915/i915_perf.c”h´MX hj>NubhŒp but to save having stream implementations (of which we might have multiple later) we handle blocking read here.”…”�”}”(hj>Nh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jeNh´MX hjMubhÚ)�”}”(hŒ–We can also consistently treat trying to read from a disabled stream as an IO error so implementations can assume the stream is enabled while reading.”h]”hŒ–We can also consistently treat trying to read from a disabled stream as an IO error so implementations can assume the stream is enabled while reading.”…”�”}”(hjpNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:456: ./drivers/gpu/drm/i915/i915_perf.c”h´M] hjMubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj�Nh]”hŒReturn”…”�”}”(hjƒNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:456: ./drivers/gpu/drm/i915/i915_perf.c”h´Ma hjMubhÚ)�”}”(hŒ?The number of bytes copied or a negative error code on failure.”h]”hŒ?The number of bytes copied or a negative error code on failure.”…”�”}”(hj—Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:456: ./drivers/gpu/drm/i915/i915_perf.c”h´Mb hjMubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj;7h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_perf_ioctl (C function)”Œc.i915_perf_ioctl”hNt”auh1j¶hj;7h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒMlong i915_perf_ioctl (struct file *file, unsigned int cmd, unsigned long arg)”h]”jÓ)�”}”(hŒLlong i915_perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)”h]”(jn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÆNh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÂNh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:458: ./drivers/gpu/drm/i915/i915_perf.c”h´MZubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÂNh²hh³jÔNh´MZubj)�”}”(hŒi915_perf_ioctl”h]”jÜ)�”}”(hŒi915_perf_ioctl”h]”hŒi915_perf_ioctl”…”�”}”(hjçNh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjãNubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÂNh²hh³jÔNh´MZubj8)�”}”(hŒ8(struct file *file, unsigned int cmd, unsigned long arg)”h]”(j>)�”}”(hŒstruct file *file”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjÿNubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÿNubh)�”}”(hhh]”jÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj!Oh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j#OŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjéNsbŒc.i915_perf_ioctl”†”asbuh1hhjÿNubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÿNubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjOOh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÿNubjÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj\Oh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÿNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjûNubj>)�”}”(hŒunsigned int cmd”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjuOh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjqOubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjqOubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hj‘Oh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjqOubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjqOubjÜ)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hj­Oh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjqOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjûNubj>)�”}”(hŒunsigned long arg”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÆOh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÂOubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÂOubjn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjâOh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÂOubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÂOubjÜ)�”}”(hŒarg”h]”hŒarg”…”�”}”(hjþOh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÂOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjûNubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÂNh²hh³jÔNh´MZubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj¾Nh²hh³jÔNh´MZubah}”(h]”j¹Nah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÔNh´MZhj»Nh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ/support ioctl() usage with i915 perf stream FDs”h]”hŒ/support ioctl() usage with i915 perf stream FDs”…”�”}”(hj(Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:458: ./drivers/gpu/drm/i915/i915_perf.c”h´MZhj%Ph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj»Nh²hh³jÔNh´MZubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój@Pjôj@Pjõ‰jö‰j÷‰uh1jÇh²hhj;7h³Nh´Nubjù)�”}”(hX>**Parameters** ``struct file *file`` An i915 perf stream file ``unsigned int cmd`` the ioctl request ``unsigned long arg`` the ioctl data **Description** Implementation deferred to i915_perf_ioctl_locked(). **Return** zero on success or a negative error code. Returns -EINVAL for an unknown ioctl request.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjJPh]”hŒ Parameters”…”�”}”(hjLPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHPubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:458: ./drivers/gpu/drm/i915/i915_perf.c”h´M^hjDPubj)�”}”(hhh]”(j)�”}”(hŒ/``struct file *file`` An i915 perf stream file ”h]”(j$)�”}”(hŒ``struct file *file``”h]”j*)�”}”(hjiPh]”hŒstruct file *file”…”�”}”(hjkPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjgPubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:458: ./drivers/gpu/drm/i915/i915_perf.c”h´M[hjcPubj@)�”}”(hhh]”hÚ)�”}”(hŒAn i915 perf stream file”h]”hŒAn i915 perf stream file”…”�”}”(hj‚Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j~Ph´M[hjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjcPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j~Ph´M[hj`Pubj)�”}”(hŒ'``unsigned int cmd`` the ioctl request ”h]”(j$)�”}”(hŒ``unsigned int cmd``”h]”j*)�”}”(hj¢Ph]”hŒunsigned int cmd”…”�”}”(hj¤Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:458: ./drivers/gpu/drm/i915/i915_perf.c”h´M\hjœPubj@)�”}”(hhh]”hÚ)�”}”(hŒthe ioctl request”h]”hŒthe ioctl request”…”�”}”(hj»Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j·Ph´M\hj¸Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjœPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·Ph´M\hj`Pubj)�”}”(hŒ%``unsigned long arg`` the ioctl data ”h]”(j$)�”}”(hŒ``unsigned long arg``”h]”j*)�”}”(hjÛPh]”hŒunsigned long arg”…”�”}”(hjÝPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÙPubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:458: ./drivers/gpu/drm/i915/i915_perf.c”h´M]hjÕPubj@)�”}”(hhh]”hÚ)�”}”(hŒthe ioctl data”h]”hŒthe ioctl data”…”�”}”(hjôPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jðPh´M]hjñPubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÕPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jðPh´M]hj`Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjDPubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjQh]”hŒ Description”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:458: ./drivers/gpu/drm/i915/i915_perf.c”h´M_hjDPubhÚ)�”}”(hŒ4Implementation deferred to i915_perf_ioctl_locked().”h]”hŒ4Implementation deferred to i915_perf_ioctl_locked().”…”�”}”(hj,Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:458: ./drivers/gpu/drm/i915/i915_perf.c”h´M^hjDPubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj=Qh]”hŒReturn”…”�”}”(hj?Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;Qubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:458: ./drivers/gpu/drm/i915/i915_perf.c”h´M`hjDPubhÚ)�”}”(hŒWzero on success or a negative error code. Returns -EINVAL for an unknown ioctl request.”h]”hŒWzero on success or a negative error code. Returns -EINVAL for an unknown ioctl request.”…”�”}”(hjSQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:458: ./drivers/gpu/drm/i915/i915_perf.c”h´MahjDPubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj;7h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ$i915_perf_enable_locked (C function)”Œc.i915_perf_enable_locked”hNt”auh1j¶hj;7h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ>void i915_perf_enable_locked (struct i915_perf_stream *stream)”h]”jÓ)�”}”(hŒ=void i915_perf_enable_locked(struct i915_perf_stream *stream)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‚Qh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj~Qh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:460: ./drivers/gpu/drm/i915/i915_perf.c”h´Mç ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘Qh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj~Qh²hh³j�Qh´Mç ubj)�”}”(hŒi915_perf_enable_locked”h]”jÜ)�”}”(hŒi915_perf_enable_locked”h]”hŒi915_perf_enable_locked”…”�”}”(hj£Qh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŸQubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj~Qh²hh³j�Qh´Mç ubj8)�”}”(hŒ!(struct i915_perf_stream *stream)”h]”j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj¿Qh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj»Qubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌQh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj»Qubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hjÝQh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÚQubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jßQŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj¥QsbŒc.i915_perf_enable_locked”†”asbuh1hhj»Qubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýQh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj»Qubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj Rh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj»QubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj»Qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj·Qubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj~Qh²hh³j�Qh´Mç ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjzQh²hh³j�Qh´Mç ubah}”(h]”juQah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j�Qh´Mç hjwQh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ%handle `I915_PERF_IOCTL_ENABLE` ioctl”h]”(hŒhandle ”…”�”}”(hjBRh²hh³Nh´Nubjc)�”}”(hŒ`I915_PERF_IOCTL_ENABLE`”h]”hŒI915_PERF_IOCTL_ENABLE”…”�”}”(hjJRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjBRubhŒ ioctl”…”�”}”(hjBRh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:460: ./drivers/gpu/drm/i915/i915_perf.c”h´Mç hj?Rh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjwQh²hh³j�Qh´Mç ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójlRjôjlRjõ‰jö‰j÷‰uh1jÇh²hhj;7h³Nh´Nubjù)�”}”(hX>**Parameters** ``struct i915_perf_stream *stream`` A disabled i915 perf stream **Description** [Re]enables the associated capture of data for this stream. If a stream was previously enabled then there's currently no intention to provide userspace any guarantee about the preservation of previously buffered data.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjvRh]”hŒ Parameters”…”�”}”(hjxRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtRubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:460: ./drivers/gpu/drm/i915/i915_perf.c”h´Më hjpRubj)�”}”(hhh]”j)�”}”(hŒ@``struct i915_perf_stream *stream`` A disabled i915 perf stream ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hj•Rh]”hŒstruct i915_perf_stream *stream”…”�”}”(hj—Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj“Rubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:460: ./drivers/gpu/drm/i915/i915_perf.c”h´Mè hj�Rubj@)�”}”(hhh]”hÚ)�”}”(hŒA disabled i915 perf stream”h]”hŒA disabled i915 perf stream”…”�”}”(hj®Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jªRh´Mè hj«Rubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj�Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jªRh´Mè hjŒRubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjpRubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjÐRh]”hŒ Description”…”�”}”(hjÒRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎRubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:460: ./drivers/gpu/drm/i915/i915_perf.c”h´Mê hjpRubhÚ)�”}”(hŒ;[Re]enables the associated capture of data for this stream.”h]”hŒ;[Re]enables the associated capture of data for this stream.”…”�”}”(hjæRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:460: ./drivers/gpu/drm/i915/i915_perf.c”h´Mé hjpRubhÚ)�”}”(hŒ�If a stream was previously enabled then there's currently no intention to provide userspace any guarantee about the preservation of previously buffered data.”h]”hŒŸIf a stream was previously enabled then there’s currently no intention to provide userspace any guarantee about the preservation of previously buffered data.”…”�”}”(hjõRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:460: ./drivers/gpu/drm/i915/i915_perf.c”h´Më hjpRubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj;7h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ%i915_perf_disable_locked (C function)”Œc.i915_perf_disable_locked”hNt”auh1j¶hj;7h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ?void i915_perf_disable_locked (struct i915_perf_stream *stream)”h]”jÓ)�”}”(hŒ>void i915_perf_disable_locked(struct i915_perf_stream *stream)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj$Sh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj Sh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:462: ./drivers/gpu/drm/i915/i915_perf.c”h´Mubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Sh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj Sh²hh³j2Sh´Mubj)�”}”(hŒi915_perf_disable_locked”h]”jÜ)�”}”(hŒi915_perf_disable_locked”h]”hŒi915_perf_disable_locked”…”�”}”(hjESh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjASubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj Sh²hh³j2Sh´Mubj8)�”}”(hŒ!(struct i915_perf_stream *stream)”h]”j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjaSh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj]Subj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj]Subh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj|Subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j�SŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjGSsbŒc.i915_perf_disable_locked”†”asbuh1hhj]Subj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj]Subj’)�”}”(hj•h]”hŒ*”…”�”}”(hj­Sh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj]SubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjºSh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj]Subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjYSubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj Sh²hh³j2Sh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjSh²hh³j2Sh´Mubah}”(h]”jSah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j2Sh´MhjSh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ&handle `I915_PERF_IOCTL_DISABLE` ioctl”h]”(hŒhandle ”…”�”}”(hjäSh²hh³Nh´Nubjc)�”}”(hŒ`I915_PERF_IOCTL_DISABLE`”h]”hŒI915_PERF_IOCTL_DISABLE”…”�”}”(hjìSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjäSubhŒ ioctl”…”�”}”(hjäSh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:462: ./drivers/gpu/drm/i915/i915_perf.c”h´MhjáSh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjSh²hh³j2Sh´Mubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójTjôjTjõ‰jö‰j÷‰uh1jÇh²hhj;7h³Nh´Nubjù)�”}”(hX/**Parameters** ``struct i915_perf_stream *stream`` An enabled i915 perf stream **Description** Disables the associated capture of data for this stream. The intention is that disabling an re-enabling a stream will ideally be cheaper than destroying and re-opening a stream with the same configuration, though there are no formal guarantees about what state or buffered data must be retained between disabling and re-enabling a stream. **Note** while a stream is disabled it's considered an error for userspace to attempt to read from the stream (-EIO).”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjTh]”hŒ Parameters”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:462: ./drivers/gpu/drm/i915/i915_perf.c”h´MhjTubj)�”}”(hhh]”j)�”}”(hŒ@``struct i915_perf_stream *stream`` An enabled i915 perf stream ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hj7Th]”hŒstruct i915_perf_stream *stream”…”�”}”(hj9Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj5Tubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:462: ./drivers/gpu/drm/i915/i915_perf.c”h´Mhj1Tubj@)�”}”(hhh]”hÚ)�”}”(hŒAn enabled i915 perf stream”h]”hŒAn enabled i915 perf stream”…”�”}”(hjPTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jLTh´MhjMTubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj1Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jLTh´Mhj.Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjTubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjrTh]”hŒ Description”…”�”}”(hjtTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjpTubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:462: ./drivers/gpu/drm/i915/i915_perf.c”h´MhjTubhÚ)�”}”(hŒ8Disables the associated capture of data for this stream.”h]”hŒ8Disables the associated capture of data for this stream.”…”�”}”(hjˆTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:462: ./drivers/gpu/drm/i915/i915_perf.c”h´MhjTubhÚ)�”}”(hXThe intention is that disabling an re-enabling a stream will ideally be cheaper than destroying and re-opening a stream with the same configuration, though there are no formal guarantees about what state or buffered data must be retained between disabling and re-enabling a stream.”h]”hXThe intention is that disabling an re-enabling a stream will ideally be cheaper than destroying and re-opening a stream with the same configuration, though there are no formal guarantees about what state or buffered data must be retained between disabling and re-enabling a stream.”…”�”}”(hj—Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:462: ./drivers/gpu/drm/i915/i915_perf.c”h´MhjTubhÚ)�”}”(hŒ**Note**”h]”j)�”}”(hj¨Th]”hŒNote”…”�”}”(hjªTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦Tubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:462: ./drivers/gpu/drm/i915/i915_perf.c”h´M hjTubhÚ)�”}”(hŒlwhile a stream is disabled it's considered an error for userspace to attempt to read from the stream (-EIO).”h]”hŒnwhile a stream is disabled it’s considered an error for userspace to attempt to read from the stream (-EIO).”…”�”}”(hj¾Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:462: ./drivers/gpu/drm/i915/i915_perf.c”h´M hjTubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj;7h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_perf_poll (C function)”Œc.i915_perf_poll”hNt”auh1j¶hj;7h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ=__poll_t i915_perf_poll (struct file *file, poll_table *wait)”h]”jÓ)�”}”(hŒ<__poll_t i915_perf_poll(struct file *file, poll_table *wait)”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒ__poll_t”h]”hŒ__poll_t”…”�”}”(hjðTh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjíTubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jòTŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõŒi915_perf_poll”sbŒc.i915_perf_poll”†”asbuh1hhjéTh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:464: ./drivers/gpu/drm/i915/i915_perf.c”h´MÎ ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjéTh²hh³jUh´MÎ ubj)�”}”(hŒi915_perf_poll”h]”jÜ)�”}”(hjUh]”hŒi915_perf_poll”…”�”}”(hj$Uh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj Uubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjéTh²hh³jUh´MÎ ubj8)�”}”(hŒ%(struct file *file, poll_table *wait)”h]”(j>)�”}”(hŒstruct file *file”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj?Uh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj;Uubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj;Uubh)�”}”(hhh]”jÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj]Uh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjZUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j_UŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j UŒc.i915_perf_poll”†”asbuh1hhj;Uubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{Uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj;Uubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj‰Uh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj;UubjÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj–Uh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj;Uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj7Uubj>)�”}”(hŒpoll_table *wait”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒ poll_table”h]”hŒ poll_table”…”�”}”(hj²Uh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¯Uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j´UŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j UŒc.i915_perf_poll”†”asbuh1hhj«Uubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj«Uubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÞUh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj«UubjÜ)�”}”(hŒwait”h]”hŒwait”…”�”}”(hjëUh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj«Uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj7Uubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjéTh²hh³jUh´MÎ ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjåTh²hh³jUh´MÎ ubah}”(h]”jàTah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jUh´MÎ hjâTh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ6call poll_wait() with a suitable wait queue for stream”h]”hŒ6call poll_wait() with a suitable wait queue for stream”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:464: ./drivers/gpu/drm/i915/i915_perf.c”h´MÎ hjVh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjâTh²hh³jUh´MÎ ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój-Vjôj-Vjõ‰jö‰j÷‰uh1jÇh²hhj;7h³Nh´Nubjù)�”}”(hXŽ**Parameters** ``struct file *file`` An i915 perf stream file ``poll_table *wait`` poll() state table **Description** For handling userspace polling on an i915 perf stream, this ensures poll_wait() gets called with a wait queue that will be woken for new stream data. **Note** Implementation deferred to i915_perf_poll_locked() **Return** any poll events that are ready without sleeping”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj7Vh]”hŒ Parameters”…”�”}”(hj9Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5Vubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:464: ./drivers/gpu/drm/i915/i915_perf.c”h´MÒ hj1Vubj)�”}”(hhh]”(j)�”}”(hŒ/``struct file *file`` An i915 perf stream file ”h]”(j$)�”}”(hŒ``struct file *file``”h]”j*)�”}”(hjVVh]”hŒstruct file *file”…”�”}”(hjXVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjTVubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:464: ./drivers/gpu/drm/i915/i915_perf.c”h´MÏ hjPVubj@)�”}”(hhh]”hÚ)�”}”(hŒAn i915 perf stream file”h]”hŒAn i915 perf stream file”…”�”}”(hjoVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jkVh´MÏ hjlVubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjPVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jkVh´MÏ hjMVubj)�”}”(hŒ(``poll_table *wait`` poll() state table ”h]”(j$)�”}”(hŒ``poll_table *wait``”h]”j*)�”}”(hj�Vh]”hŒpoll_table *wait”…”�”}”(hj‘Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj�Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:464: ./drivers/gpu/drm/i915/i915_perf.c”h´MÐ hj‰Vubj@)�”}”(hhh]”hÚ)�”}”(hŒpoll() state table”h]”hŒpoll() state table”…”�”}”(hj¨Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¤Vh´MÐ hj¥Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj‰Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤Vh´MÐ hjMVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj1VubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjÊVh]”hŒ Description”…”�”}”(hjÌVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:464: ./drivers/gpu/drm/i915/i915_perf.c”h´MÒ hj1VubhÚ)�”}”(hŒ•For handling userspace polling on an i915 perf stream, this ensures poll_wait() gets called with a wait queue that will be woken for new stream data.”h]”hŒ•For handling userspace polling on an i915 perf stream, this ensures poll_wait() gets called with a wait queue that will be woken for new stream data.”…”�”}”(hjàVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:464: ./drivers/gpu/drm/i915/i915_perf.c”h´MÑ hj1VubhÚ)�”}”(hŒ**Note**”h]”j)�”}”(hjñVh]”hŒNote”…”�”}”(hjóVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjïVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:464: ./drivers/gpu/drm/i915/i915_perf.c”h´MÕ hj1VubhÚ)�”}”(hŒ2Implementation deferred to i915_perf_poll_locked()”h]”hŒ2Implementation deferred to i915_perf_poll_locked()”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:464: ./drivers/gpu/drm/i915/i915_perf.c”h´MÖ hj1VubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjWh]”hŒReturn”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:464: ./drivers/gpu/drm/i915/i915_perf.c”h´MØ hj1VubhÚ)�”}”(hŒ/any poll events that are ready without sleeping”h]”hŒ/any poll events that are ready without sleeping”…”�”}”(hj.Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:464: ./drivers/gpu/drm/i915/i915_perf.c”h´MØ hj1Vubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj;7h²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ"i915_perf_poll_locked (C function)”Œc.i915_perf_poll_locked”hNt”auh1j¶hj;7h²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ•)�”}”(hŒe__poll_t i915_perf_poll_locked (struct i915_perf_stream *stream, struct file *file, poll_table *wait)”h]”jÓ)�”}”(hŒd__poll_t i915_perf_poll_locked(struct i915_perf_stream *stream, struct file *file, poll_table *wait)”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒ__poll_t”h]”hŒ__poll_t”…”�”}”(hj`Wh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj]Wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jbWŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõŒi915_perf_poll_locked”sbŒc.i915_perf_poll_locked”†”asbuh1hhjYWh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:466: ./drivers/gpu/drm/i915/i915_perf.c”h´M® ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚Wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjYWh²hh³j�Wh´M® ubj)�”}”(hŒi915_perf_poll_locked”h]”jÜ)�”}”(hj~Wh]”hŒi915_perf_poll_locked”…”�”}”(hj”Wh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�Wubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjYWh²hh³j�Wh´M® ubj8)�”}”(hŒF(struct i915_perf_stream *stream, struct file *file, poll_table *wait)”h]”(j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj¯Wh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj«Wubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj«Wubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hjÍWh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÊWubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÏWŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j|WŒc.i915_perf_poll_locked”†”asbuh1hhj«Wubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj«Wubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjùWh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj«WubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj«Wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj§Wubj>)�”}”(hŒstruct file *file”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjXubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjXubh)�”}”(hhh]”jÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj=Xh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj:Xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j?XŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j|WŒc.i915_perf_poll_locked”†”asbuh1hhjXubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjXubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjiXh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjXubjÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjvXh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj§Wubj>)�”}”(hŒpoll_table *wait”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒ poll_table”h]”hŒ poll_table”…”�”}”(hj’Xh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�Xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j”XŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j|WŒc.i915_perf_poll_locked”†”asbuh1hhj‹Xubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj‹Xubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¾Xh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj‹XubjÜ)�”}”(hŒwait”h]”hŒwait”…”�”}”(hjËXh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj‹Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj§Wubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjYWh²hh³j�Wh´M® ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjUWh²hh³j�Wh´M® ubah}”(h]”jPWah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j�Wh´M® hjRWh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ1poll_wait() with a suitable wait queue for stream”h]”hŒ1poll_wait() with a suitable wait queue for stream”…”�”}”(hjõXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:466: ./drivers/gpu/drm/i915/i915_perf.c”h´M® hjòXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjRWh²hh³j�Wh´M® ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój Yjôj Yjõ‰jö‰j÷‰uh1jÇh²hhj;7h³Nh´Nubjù)�”}”(hXÑ**Parameters** ``struct i915_perf_stream *stream`` An i915 perf stream ``struct file *file`` An i915 perf stream file ``poll_table *wait`` poll() state table **Description** For handling userspace polling on an i915 perf stream, this calls through to :c:type:`i915_perf_stream_ops->poll_wait ` to call poll_wait() with a wait queue that will be woken for new stream data. **Return** any poll events that are ready without sleeping”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjYh]”hŒ Parameters”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:466: ./drivers/gpu/drm/i915/i915_perf.c”h´M² hjYubj)�”}”(hhh]”(j)�”}”(hŒ8``struct i915_perf_stream *stream`` An i915 perf stream ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hj6Yh]”hŒstruct i915_perf_stream *stream”…”�”}”(hj8Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj4Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:466: ./drivers/gpu/drm/i915/i915_perf.c”h´M¯ hj0Yubj@)�”}”(hhh]”hÚ)�”}”(hŒAn i915 perf stream”h]”hŒAn i915 perf stream”…”�”}”(hjOYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jKYh´M¯ hjLYubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj0Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jKYh´M¯ hj-Yubj)�”}”(hŒ/``struct file *file`` An i915 perf stream file ”h]”(j$)�”}”(hŒ``struct file *file``”h]”j*)�”}”(hjoYh]”hŒstruct file *file”…”�”}”(hjqYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjmYubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:466: ./drivers/gpu/drm/i915/i915_perf.c”h´M° hjiYubj@)�”}”(hhh]”hÚ)�”}”(hŒAn i915 perf stream file”h]”hŒAn i915 perf stream file”…”�”}”(hjˆYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j„Yh´M° hj…Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjiYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j„Yh´M° hj-Yubj)�”}”(hŒ(``poll_table *wait`` poll() state table ”h]”(j$)�”}”(hŒ``poll_table *wait``”h]”j*)�”}”(hj¨Yh]”hŒpoll_table *wait”…”�”}”(hjªYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¦Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:466: ./drivers/gpu/drm/i915/i915_perf.c”h´M± hj¢Yubj@)�”}”(hhh]”hÚ)�”}”(hŒpoll() state table”h]”hŒpoll() state table”…”�”}”(hjÁYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j½Yh´M± hj¾Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¢Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j½Yh´M± hj-Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjYubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjãYh]”hŒ Description”…”�”}”(hjåYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáYubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:466: ./drivers/gpu/drm/i915/i915_perf.c”h´M³ hjYubhÚ)�”}”(hŒÛFor handling userspace polling on an i915 perf stream, this calls through to :c:type:`i915_perf_stream_ops->poll_wait ` to call poll_wait() with a wait queue that will be woken for new stream data.”h]”(hŒMFor handling userspace polling on an i915 perf stream, this calls through to ”…”�”}”(hjùYh²hh³Nh´Nubh)�”}”(hŒ@:c:type:`i915_perf_stream_ops->poll_wait `”h]”j*)�”}”(hjZh]”hŒi915_perf_stream_ops->poll_wait”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjZubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùj’jŒi915_perf_stream_ops”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:466: ./drivers/gpu/drm/i915/i915_perf.c”h´M² hjùYubhŒN to call poll_wait() with a wait queue that will be woken for new stream data.”…”�”}”(hjùYh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j Zh´M² hjYubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj-Zh]”hŒReturn”…”�”}”(hj/Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+Zubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:466: ./drivers/gpu/drm/i915/i915_perf.c”h´M¶ hjYubhÚ)�”}”(hŒ/any poll events that are ready without sleeping”h]”hŒ/any poll events that are ready without sleeping”…”�”}”(hjCZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:466: ./drivers/gpu/drm/i915/i915_perf.c”h´M· hjYubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj;7h²hh³Nh´Nubeh}”(h]”Œi915-perf-stream”ah ]”h"]”Œi915 perf stream”ah$]”h&]”uh1hÄhjå#h²hh³hÃh´M¸ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ)i915 Perf Observation Architecture Stream”h]”hŒ)i915 Perf Observation Architecture Stream”…”�”}”(hjdZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjaZh²hh³hÃh´MÖubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_oa_ops (C struct)”Œ c.i915_oa_ops”hNt”auh1j¶hjaZh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ i915_oa_ops”h]”jÓ)�”}”(hŒstruct i915_oa_ops”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj‹Zh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj‡Zh²hh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Kubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™Zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj‡Zh²hh³j˜Zh´Kubj)�”}”(hŒ i915_oa_ops”h]”jÜ)�”}”(hj…Zh]”hŒ i915_oa_ops”…”�”}”(hj«Zh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj§Zubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj‡Zh²hh³j˜Zh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjƒZh²hh³j˜Zh´Kubah}”(h]”j~Zah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j˜Zh´Khj€Zh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ0Gen specific implementation of an OA unit stream”h]”hŒ0Gen specific implementation of an OA unit stream”…”�”}”(hjÍZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´MZhjÊZh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj€Zh²hh³j˜Zh´Kubeh}”(h]”h ]”(jóŒstruct”eh"]”h$]”h&]”jòjójójåZjôjåZjõ‰jö‰j÷‰uh1jÇh²hhjaZh³Nh´Nubjù)�”}”(hX×**Definition**:: struct i915_oa_ops { bool (*is_valid_b_counter_reg)(struct i915_perf *perf, u32 addr); bool (*is_valid_mux_reg)(struct i915_perf *perf, u32 addr); bool (*is_valid_flex_reg)(struct i915_perf *perf, u32 addr); int (*enable_metric_set)(struct i915_perf_stream *stream, struct i915_active *active); void (*disable_metric_set)(struct i915_perf_stream *stream); void (*oa_enable)(struct i915_perf_stream *stream); void (*oa_disable)(struct i915_perf_stream *stream); int (*read)(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset); u32 (*oa_hw_tail_read)(struct i915_perf_stream *stream); }; **Members** ``is_valid_b_counter_reg`` Validates register's address for programming boolean counters for a particular platform. ``is_valid_mux_reg`` Validates register's address for programming mux for a particular platform. ``is_valid_flex_reg`` Validates register's address for programming flex EU filtering for a particular platform. ``enable_metric_set`` Selects and applies any MUX configuration to set up the Boolean and Custom (B/C) counters that are part of the counter reports being sampled. May apply system constraints such as disabling EU clock gating as required. ``disable_metric_set`` Remove system constraints associated with using the OA unit. ``oa_enable`` Enable periodic sampling ``oa_disable`` Disable periodic sampling ``read`` Copy data from the circular OA buffer into a given userspace buffer. ``oa_hw_tail_read`` read the OA tail pointer register In particular this enables us to share all the fiddly code for handling the OA unit tail pointer race that affects multiple generations.”h]”(hÚ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjñZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjíZubhŒ:”…”�”}”(hjíZh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´M^hjéZubjA#)�”}”(hXŠstruct i915_oa_ops { bool (*is_valid_b_counter_reg)(struct i915_perf *perf, u32 addr); bool (*is_valid_mux_reg)(struct i915_perf *perf, u32 addr); bool (*is_valid_flex_reg)(struct i915_perf *perf, u32 addr); int (*enable_metric_set)(struct i915_perf_stream *stream, struct i915_active *active); void (*disable_metric_set)(struct i915_perf_stream *stream); void (*oa_enable)(struct i915_perf_stream *stream); void (*oa_disable)(struct i915_perf_stream *stream); int (*read)(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset); u32 (*oa_hw_tail_read)(struct i915_perf_stream *stream); };”h]”hXŠstruct i915_oa_ops { bool (*is_valid_b_counter_reg)(struct i915_perf *perf, u32 addr); bool (*is_valid_mux_reg)(struct i915_perf *perf, u32 addr); bool (*is_valid_flex_reg)(struct i915_perf *perf, u32 addr); int (*enable_metric_set)(struct i915_perf_stream *stream, struct i915_active *active); void (*disable_metric_set)(struct i915_perf_stream *stream); void (*oa_enable)(struct i915_perf_stream *stream); void (*oa_disable)(struct i915_perf_stream *stream); int (*read)(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset); u32 (*oa_hw_tail_read)(struct i915_perf_stream *stream); };”…”�”}”hj [sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´M`hjéZubhÚ)�”}”(hŒ **Members**”h]”j)�”}”(hj[h]”hŒMembers”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´MlhjéZubj)�”}”(hhh]”(j)�”}”(hŒt``is_valid_b_counter_reg`` Validates register's address for programming boolean counters for a particular platform. ”h]”(j$)�”}”(hŒ``is_valid_b_counter_reg``”h]”j*)�”}”(hj:[h]”hŒis_valid_b_counter_reg”…”�”}”(hj<[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj8[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´M`hj4[ubj@)�”}”(hhh]”hÚ)�”}”(hŒXValidates register's address for programming boolean counters for a particular platform.”h]”hŒZValidates register’s address for programming boolean counters for a particular platform.”…”�”}”(hjS[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´M_hjP[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj4[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jO[h´M`hj1[ubj)�”}”(hŒa``is_valid_mux_reg`` Validates register's address for programming mux for a particular platform. ”h]”(j$)�”}”(hŒ``is_valid_mux_reg``”h]”j*)�”}”(hjt[h]”hŒis_valid_mux_reg”…”�”}”(hjv[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjr[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Mfhjn[ubj@)�”}”(hhh]”hÚ)�”}”(hŒKValidates register's address for programming mux for a particular platform.”h]”hŒMValidates register’s address for programming mux for a particular platform.”…”�”}”(hj�[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´MehjŠ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjn[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‰[h´Mfhj1[ubj)�”}”(hŒp``is_valid_flex_reg`` Validates register's address for programming flex EU filtering for a particular platform. ”h]”(j$)�”}”(hŒ``is_valid_flex_reg``”h]”j*)�”}”(hj®[h]”hŒis_valid_flex_reg”…”�”}”(hj°[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¬[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Mlhj¨[ubj@)�”}”(hhh]”hÚ)�”}”(hŒYValidates register's address for programming flex EU filtering for a particular platform.”h]”hŒ[Validates register’s address for programming flex EU filtering for a particular platform.”…”�”}”(hjÇ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´MkhjÄ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¨[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÃ[h´Mlhj1[ubj)�”}”(hŒð``enable_metric_set`` Selects and applies any MUX configuration to set up the Boolean and Custom (B/C) counters that are part of the counter reports being sampled. May apply system constraints such as disabling EU clock gating as required. ”h]”(j$)�”}”(hŒ``enable_metric_set``”h]”j*)�”}”(hjè[h]”hŒenable_metric_set”…”�”}”(hjê[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjæ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Mthjâ[ubj@)�”}”(hhh]”hÚ)�”}”(hŒÙSelects and applies any MUX configuration to set up the Boolean and Custom (B/C) counters that are part of the counter reports being sampled. May apply system constraints such as disabling EU clock gating as required.”h]”hŒÙSelects and applies any MUX configuration to set up the Boolean and Custom (B/C) counters that are part of the counter reports being sampled. May apply system constraints such as disabling EU clock gating as required.”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´Mqhjþ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjâ[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jý[h´Mthj1[ubj)�”}”(hŒT``disable_metric_set`` Remove system constraints associated with using the OA unit. ”h]”(j$)�”}”(hŒ``disable_metric_set``”h]”j*)�”}”(hj"\h]”hŒdisable_metric_set”…”�”}”(hj$\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj \ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³Œ`/var/lib/git/docbuild/linux/Documentation/gpu/i915:472: ./drivers/gpu/drm/i915/i915_perf_types.h”h´M{hj\ubj@)�”}”(hhh]”hÚ)�”}”(hŒ)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj®]h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjª]ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjª]ubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hjÌ]h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÉ]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÎ]Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj”]sbŒc.i915_oa_stream_init”†”asbuh1hhjª]ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjª]ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjú]h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjª]ubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjª]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¦]ubj>)�”}”(hŒ&struct drm_i915_perf_open_param *param”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj ^h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj^ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj^ubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_perf_open_param”h]”hŒdrm_i915_perf_open_param”…”�”}”(hj>^h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj;^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j@^Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jè]Œc.i915_oa_stream_init”†”asbuh1hhj^ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj^ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjj^h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj^ubjÜ)�”}”(hŒparam”h]”hŒparam”…”�”}”(hjw^h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¦]ubj>)�”}”(hŒ"struct perf_open_properties *props”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj�^h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjŒ^ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŒ^ubh)�”}”(hhh]”jÜ)�”}”(hŒperf_open_properties”h]”hŒperf_open_properties”…”�”}”(hj®^h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj«^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j°^Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jè]Œc.i915_oa_stream_init”†”asbuh1hhjŒ^ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŒ^ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÚ^h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjŒ^ubjÜ)�”}”(hŒprops”h]”hŒprops”…”�”}”(hjç^h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŒ^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj¦]ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjm]h²hh³j]h´M� ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhji]h²hh³j]h´M� ubah}”(h]”jd]ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j]h´M� hjf]h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ.validate combined props for OA stream and init”h]”hŒ.validate combined props for OA stream and init”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:475: ./drivers/gpu/drm/i915/i915_perf.c”h´M� hj_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjf]h²hh³j]h´M� ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój)_jôj)_jõ‰jö‰j÷‰uh1jÇh²hhjaZh³Nh´Nubjù)�”}”(hX**Parameters** ``struct i915_perf_stream *stream`` An i915 perf stream ``struct drm_i915_perf_open_param *param`` The open parameters passed to `DRM_I915_PERF_OPEN` ``struct perf_open_properties *props`` The property state that configures stream (individually validated) **Description** While read_properties_unlocked() validates properties in isolation it doesn't ensure that the combination necessarily makes sense. At this point it has been determined that userspace wants a stream of OA metrics, but still we need to further validate the combined properties are OK. If the configuration makes sense then we can allocate memory for a circular OA buffer and apply the requested metric set configuration. **Return** zero on success or a negative error code.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj3_h]”hŒ Parameters”…”�”}”(hj5_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:475: ./drivers/gpu/drm/i915/i915_perf.c”h´M“ hj-_ubj)�”}”(hhh]”(j)�”}”(hŒ8``struct i915_perf_stream *stream`` An i915 perf stream ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hjR_h]”hŒstruct i915_perf_stream *stream”…”�”}”(hjT_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjP_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:475: ./drivers/gpu/drm/i915/i915_perf.c”h´M� hjL_ubj@)�”}”(hhh]”hÚ)�”}”(hŒAn i915 perf stream”h]”hŒAn i915 perf stream”…”�”}”(hjk_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jg_h´M� hjh_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjL_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jg_h´M� hjI_ubj)�”}”(hŒ^``struct drm_i915_perf_open_param *param`` The open parameters passed to `DRM_I915_PERF_OPEN` ”h]”(j$)�”}”(hŒ*``struct drm_i915_perf_open_param *param``”h]”j*)�”}”(hj‹_h]”hŒ&struct drm_i915_perf_open_param *param”…”�”}”(hj�_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj‰_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:475: ./drivers/gpu/drm/i915/i915_perf.c”h´M‘ hj…_ubj@)�”}”(hhh]”hÚ)�”}”(hŒ2The open parameters passed to `DRM_I915_PERF_OPEN`”h]”(hŒThe open parameters passed to ”…”�”}”(hj¤_h²hh³Nh´Nubjc)�”}”(hŒ`DRM_I915_PERF_OPEN`”h]”hŒDRM_I915_PERF_OPEN”…”�”}”(hj¬_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chj¤_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j _h´M‘ hj¡_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj…_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j _h´M‘ hjI_ubj)�”}”(hŒj``struct perf_open_properties *props`` The property state that configures stream (individually validated) ”h]”(j$)�”}”(hŒ&``struct perf_open_properties *props``”h]”j*)�”}”(hjÒ_h]”hŒ"struct perf_open_properties *props”…”�”}”(hjÔ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÐ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:475: ./drivers/gpu/drm/i915/i915_perf.c”h´M’ hjÌ_ubj@)�”}”(hhh]”hÚ)�”}”(hŒBThe property state that configures stream (individually validated)”h]”hŒBThe property state that configures stream (individually validated)”…”�”}”(hjë_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jç_h´M’ hjè_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÌ_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jç_h´M’ hjI_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj-_ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj `h]”hŒ Description”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj `ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:475: ./drivers/gpu/drm/i915/i915_perf.c”h´M” hj-_ubhÚ)�”}”(hŒ‚While read_properties_unlocked() validates properties in isolation it doesn't ensure that the combination necessarily makes sense.”h]”hŒ„While read_properties_unlocked() validates properties in isolation it doesn’t ensure that the combination necessarily makes sense.”…”�”}”(hj#`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:475: ./drivers/gpu/drm/i915/i915_perf.c”h´M“ hj-_ubhÚ)�”}”(hŒ—At this point it has been determined that userspace wants a stream of OA metrics, but still we need to further validate the combined properties are OK.”h]”hŒ—At this point it has been determined that userspace wants a stream of OA metrics, but still we need to further validate the combined properties are OK.”…”�”}”(hj2`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:475: ./drivers/gpu/drm/i915/i915_perf.c”h´M– hj-_ubhÚ)�”}”(hŒ‡If the configuration makes sense then we can allocate memory for a circular OA buffer and apply the requested metric set configuration.”h]”hŒ‡If the configuration makes sense then we can allocate memory for a circular OA buffer and apply the requested metric set configuration.”…”�”}”(hjA`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:475: ./drivers/gpu/drm/i915/i915_perf.c”h´Mš hj-_ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjR`h]”hŒReturn”…”�”}”(hjT`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjP`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:475: ./drivers/gpu/drm/i915/i915_perf.c”h´M� hj-_ubhÚ)�”}”(hŒ)zero on success or a negative error code.”h]”hŒ)zero on success or a negative error code.”…”�”}”(hjh`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:475: ./drivers/gpu/drm/i915/i915_perf.c”h´Mž hj-_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjaZh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_oa_read (C function)”Œc.i915_oa_read”hNt”auh1j¶hjaZh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒbint i915_oa_read (struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset)”h]”jÓ)�”}”(hŒaint i915_oa_read(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj—`h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj“`h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:477: ./drivers/gpu/drm/i915/i915_perf.c”h´Mïubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj“`h²hh³j¥`h´Mïubj)�”}”(hŒ i915_oa_read”h]”jÜ)�”}”(hŒ i915_oa_read”h]”hŒ i915_oa_read”…”�”}”(hj¸`h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj´`ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj“`h²hh³j¥`h´Mïubj8)�”}”(hŒQ(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset)”h]”(j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÔ`h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjÐ`ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÐ`ubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hjò`h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjï`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jô`Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjº`sbŒc.i915_oa_read”†”asbuh1hhjÐ`ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÐ`ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÐ`ubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hj-ah²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÐ`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÌ`ubj>)�”}”(hŒchar __user *buf”h]”(jn)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjFah²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjBaubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjBaubhŒ__user”…”�”}”(hjBah²hh³Nh´Nubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjBaubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjtah²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjBaubjÜ)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj�ah²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjBaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÌ`ubj>)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj�ah²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjšaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jŸaŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jaŒc.i915_oa_read”†”asbuh1hhj–aubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj–aubjÜ)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjÉah²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj–aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÌ`ubj>)�”}”(hŒsize_t *offset”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjåah²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjâaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jçaŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jaŒc.i915_oa_read”†”asbuh1hhjÞaubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÞaubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÞaubjÜ)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÞaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÌ`ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj“`h²hh³j¥`h´Mïubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj�`h²hh³j¥`h´Mïubah}”(h]”jŠ`ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j¥`h´MïhjŒ`h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ?just calls through to :c:type:`i915_oa_ops->read `”h]”(hŒjust calls through to ”…”�”}”(hjHbh²hh³Nh´Nubh)�”}”(hŒ):c:type:`i915_oa_ops->read `”h]”j*)�”}”(hjRbh]”hŒi915_oa_ops->read”…”�”}”(hjTbh²hh³Nh´Nubah}”(h]”h ]”(jjóŒc-type”eh"]”h$]”h&]”uh1j)hjPbubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jóŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jùjü)�”}”jÿ]”jaŒc.i915_oa_read”†”asbjŒ i915_oa_ops”uh1hh³j¥`h´MïhjHbubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:477: ./drivers/gpu/drm/i915/i915_perf.c”h´MïhjEbh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjŒ`h²hh³j¥`h´Mïubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój„bjôj„bjõ‰jö‰j÷‰uh1jÇh²hhjaZh³Nh´Nubjù)�”}”(hXÕ**Parameters** ``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ``char __user *buf`` destination buffer given by userspace ``size_t count`` the number of bytes userspace wants to read ``size_t *offset`` (inout): the current position for writing into **buf** **Description** Updates **offset** according to the number of bytes successfully copied into the userspace buffer. **Return** zero on success or a negative error code”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjŽbh]”hŒ Parameters”…”�”}”(hj�bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŒbubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:477: ./drivers/gpu/drm/i915/i915_perf.c”h´Móhjˆbubj)�”}”(hhh]”(j)�”}”(hŒN``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hj­bh]”hŒstruct i915_perf_stream *stream”…”�”}”(hj¯bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj«bubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:477: ./drivers/gpu/drm/i915/i915_perf.c”h´Mðhj§bubj@)�”}”(hhh]”hÚ)�”}”(hŒ)An i915-perf stream opened for OA metrics”h]”hŒ)An i915-perf stream opened for OA metrics”…”�”}”(hjÆbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÂbh´MðhjÃbubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj§bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÂbh´Mðhj¤bubj)�”}”(hŒ;``char __user *buf`` destination buffer given by userspace ”h]”(j$)�”}”(hŒ``char __user *buf``”h]”j*)�”}”(hjæbh]”hŒchar __user *buf”…”�”}”(hjèbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjäbubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:477: ./drivers/gpu/drm/i915/i915_perf.c”h´Mñhjàbubj@)�”}”(hhh]”hÚ)�”}”(hŒ%destination buffer given by userspace”h]”hŒ%destination buffer given by userspace”…”�”}”(hjÿbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jûbh´Mñhjübubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjàbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jûbh´Mñhj¤bubj)�”}”(hŒ=``size_t count`` the number of bytes userspace wants to read ”h]”(j$)�”}”(hŒ``size_t count``”h]”j*)�”}”(hjch]”hŒ size_t count”…”�”}”(hj!ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:477: ./drivers/gpu/drm/i915/i915_perf.c”h´Mòhjcubj@)�”}”(hhh]”hÚ)�”}”(hŒ+the number of bytes userspace wants to read”h]”hŒ+the number of bytes userspace wants to read”…”�”}”(hj8ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j4ch´Mòhj5cubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j4ch´Mòhj¤bubj)�”}”(hŒJ``size_t *offset`` (inout): the current position for writing into **buf** ”h]”(j$)�”}”(hŒ``size_t *offset``”h]”j*)�”}”(hjXch]”hŒsize_t *offset”…”�”}”(hjZch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjVcubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:477: ./drivers/gpu/drm/i915/i915_perf.c”h´MóhjRcubj@)�”}”(hhh]”hÚ)�”}”(hŒ6(inout): the current position for writing into **buf**”h]”(hŒ/(inout): the current position for writing into ”…”�”}”(hjqch²hh³Nh´Nubj)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjych²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjqcubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jmch´Móhjncubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjRcubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jmch´Móhj¤bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆbubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj¡ch]”hŒ Description”…”�”}”(hj£ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸcubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:477: ./drivers/gpu/drm/i915/i915_perf.c”h´MõhjˆbubhÚ)�”}”(hŒbUpdates **offset** according to the number of bytes successfully copied into the userspace buffer.”h]”(hŒUpdates ”…”�”}”(hj·ch²hh³Nh´Nubj)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hj¿ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·cubhŒP according to the number of bytes successfully copied into the userspace buffer.”…”�”}”(hj·ch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:477: ./drivers/gpu/drm/i915/i915_perf.c”h´MôhjˆbubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjÚch]”hŒReturn”…”�”}”(hjÜch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØcubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:477: ./drivers/gpu/drm/i915/i915_perf.c”h´M÷hjˆbubhÚ)�”}”(hŒ(zero on success or a negative error code”h]”hŒ(zero on success or a negative error code”…”�”}”(hjðch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:477: ./drivers/gpu/drm/i915/i915_perf.c”h´Møhjˆbubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjaZh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ"i915_oa_stream_enable (C function)”Œc.i915_oa_stream_enable”hNt”auh1j¶hjaZh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj\dh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjXdubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjidh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjXdubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hjzdh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjwdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j|dŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjBdsbŒc.i915_oa_stream_enable”†”asbuh1hhjXdubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjXdubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¨dh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjXdubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjµdh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjXdubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjTdubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjdh²hh³j-dh´Mé ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjdh²hh³j-dh´Mé ubah}”(h]”jdah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j-dh´Mé hjdh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ-handle `I915_PERF_IOCTL_ENABLE` for OA stream”h]”(hŒhandle ”…”�”}”(hjßdh²hh³Nh´Nubjc)�”}”(hŒ`I915_PERF_IOCTL_ENABLE`”h]”hŒI915_PERF_IOCTL_ENABLE”…”�”}”(hjçdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjßdubhŒ for OA stream”…”�”}”(hjßdh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:479: ./drivers/gpu/drm/i915/i915_perf.c”h´Mé hjÜdh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjdh²hh³j-dh´Mé ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój ejôj ejõ‰jö‰j÷‰uh1jÇh²hhjaZh³Nh´Nubjù)�”}”(hXi**Parameters** ``struct i915_perf_stream *stream`` An i915 perf stream opened for OA metrics **Description** [Re]enables hardware periodic sampling according to the period configured when opening the stream. This also starts a hrtimer that will periodically check for data in the circular OA buffer for notifying userspace (e.g. during a read() or poll()).”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjeh]”hŒ Parameters”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:479: ./drivers/gpu/drm/i915/i915_perf.c”h´Mí hj eubj)�”}”(hhh]”j)�”}”(hŒN``struct i915_perf_stream *stream`` An i915 perf stream opened for OA metrics ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hj2eh]”hŒstruct i915_perf_stream *stream”…”�”}”(hj4eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj0eubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:479: ./drivers/gpu/drm/i915/i915_perf.c”h´Mê hj,eubj@)�”}”(hhh]”hÚ)�”}”(hŒ)An i915 perf stream opened for OA metrics”h]”hŒ)An i915 perf stream opened for OA metrics”…”�”}”(hjKeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jGeh´Mê hjHeubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj,eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jGeh´Mê hj)eubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj eubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjmeh]”hŒ Description”…”�”}”(hjoeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkeubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:479: ./drivers/gpu/drm/i915/i915_perf.c”h´Mì hj eubhÚ)�”}”(hŒ÷[Re]enables hardware periodic sampling according to the period configured when opening the stream. This also starts a hrtimer that will periodically check for data in the circular OA buffer for notifying userspace (e.g. during a read() or poll()).”h]”hŒ÷[Re]enables hardware periodic sampling according to the period configured when opening the stream. This also starts a hrtimer that will periodically check for data in the circular OA buffer for notifying userspace (e.g. during a read() or poll()).”…”�”}”(hjƒeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:479: ./drivers/gpu/drm/i915/i915_perf.c”h´Më hj eubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjaZh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ#i915_oa_stream_disable (C function)”Œc.i915_oa_stream_disable”hNt”auh1j¶hjaZh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ=void i915_oa_stream_disable (struct i915_perf_stream *stream)”h]”jÓ)�”}”(hŒ)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjïeh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjëeubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjëeubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hj fh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jfŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjÕesbŒc.i915_oa_stream_disable”†”asbuh1hhjëeubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjëeubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj;fh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjëeubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjHfh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjëeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjçeubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj®eh²hh³jÀeh´M+ ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjªeh²hh³jÀeh´M+ ubah}”(h]”j¥eah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÀeh´M+ hj§eh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ.handle `I915_PERF_IOCTL_DISABLE` for OA stream”h]”(hŒhandle ”…”�”}”(hjrfh²hh³Nh´Nubjc)�”}”(hŒ`I915_PERF_IOCTL_DISABLE`”h]”hŒI915_PERF_IOCTL_DISABLE”…”�”}”(hjzfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjrfubhŒ for OA stream”…”�”}”(hjrfh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:481: ./drivers/gpu/drm/i915/i915_perf.c”h´M+ hjofh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj§eh²hh³jÀeh´M+ ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójœfjôjœfjõ‰jö‰j÷‰uh1jÇh²hhjaZh³Nh´Nubjù)�”}”(hX<**Parameters** ``struct i915_perf_stream *stream`` An i915 perf stream opened for OA metrics **Description** Stops the OA unit from periodically writing counter reports into the circular OA buffer. This also stops the hrtimer that periodically checks for data in the circular OA buffer, for notifying userspace.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¦fh]”hŒ Parameters”…”�”}”(hj¨fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤fubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:481: ./drivers/gpu/drm/i915/i915_perf.c”h´M/ hj fubj)�”}”(hhh]”j)�”}”(hŒN``struct i915_perf_stream *stream`` An i915 perf stream opened for OA metrics ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hjÅfh]”hŒstruct i915_perf_stream *stream”…”�”}”(hjÇfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÃfubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:481: ./drivers/gpu/drm/i915/i915_perf.c”h´M, hj¿fubj@)�”}”(hhh]”hÚ)�”}”(hŒ)An i915 perf stream opened for OA metrics”h]”hŒ)An i915 perf stream opened for OA metrics”…”�”}”(hjÞfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÚfh´M, hjÛfubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¿fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÚfh´M, hj¼fubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj fubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjgh]”hŒ Description”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþfubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:481: ./drivers/gpu/drm/i915/i915_perf.c”h´M. hj fubhÚ)�”}”(hŒÊStops the OA unit from periodically writing counter reports into the circular OA buffer. This also stops the hrtimer that periodically checks for data in the circular OA buffer, for notifying userspace.”h]”hŒÊStops the OA unit from periodically writing counter reports into the circular OA buffer. This also stops the hrtimer that periodically checks for data in the circular OA buffer, for notifying userspace.”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:481: ./drivers/gpu/drm/i915/i915_perf.c”h´M- hj fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjaZh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ"i915_oa_wait_unlocked (C function)”Œc.i915_oa_wait_unlocked”hNt”auh1j¶hjaZh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ;int i915_oa_wait_unlocked (struct i915_perf_stream *stream)”h]”jÓ)�”}”(hŒ:int i915_oa_wait_unlocked(struct i915_perf_stream *stream)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjEgh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjAgh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:483: ./drivers/gpu/drm/i915/i915_perf.c”h´MÆubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjAgh²hh³jSgh´MÆubj)�”}”(hŒi915_oa_wait_unlocked”h]”jÜ)�”}”(hŒi915_oa_wait_unlocked”h]”hŒi915_oa_wait_unlocked”…”�”}”(hjfgh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjbgubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjAgh²hh³jSgh´MÆubj8)�”}”(hŒ!(struct i915_perf_stream *stream)”h]”j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj‚gh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj~gubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj~gubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hj gh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j¢gŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjhgsbŒc.i915_oa_wait_unlocked”†”asbuh1hhj~gubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj~gubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÎgh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj~gubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjÛgh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj~gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjzgubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjAgh²hh³jSgh´MÆubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj=gh²hh³jSgh´MÆubah}”(h]”j8gah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jSgh´MÆhj:gh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ+handles blocking IO until OA data available”h]”hŒ+handles blocking IO until OA data available”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:483: ./drivers/gpu/drm/i915/i915_perf.c”h´MÆhjhh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj:gh²hh³jSgh´MÆubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójhjôjhjõ‰jö‰j÷‰uh1jÇh²hhjaZh³Nh´Nubjù)�”}”(hX**Parameters** ``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics **Description** Called when userspace tries to read() from a blocking stream FD opened for OA metrics. It waits until the hrtimer callback finds a non-empty OA buffer and wakes us. **Note** it's acceptable to have this return with some false positives since any subsequent read handling will return -EAGAIN if there isn't really data ready for userspace yet. **Return** zero on success or a negative error code”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj'hh]”hŒ Parameters”…”�”}”(hj)hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%hubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:483: ./drivers/gpu/drm/i915/i915_perf.c”h´MÊhj!hubj)�”}”(hhh]”j)�”}”(hŒN``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hjFhh]”hŒstruct i915_perf_stream *stream”…”�”}”(hjHhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjDhubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:483: ./drivers/gpu/drm/i915/i915_perf.c”h´MÇhj@hubj@)�”}”(hhh]”hÚ)�”}”(hŒ)An i915-perf stream opened for OA metrics”h]”hŒ)An i915-perf stream opened for OA metrics”…”�”}”(hj_hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j[hh´MÇhj\hubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj@hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[hh´MÇhj=hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!hubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj�hh]”hŒ Description”…”�”}”(hjƒhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:483: ./drivers/gpu/drm/i915/i915_perf.c”h´MÉhj!hubhÚ)�”}”(hŒ¤Called when userspace tries to read() from a blocking stream FD opened for OA metrics. It waits until the hrtimer callback finds a non-empty OA buffer and wakes us.”h]”hŒ¤Called when userspace tries to read() from a blocking stream FD opened for OA metrics. It waits until the hrtimer callback finds a non-empty OA buffer and wakes us.”…”�”}”(hj—hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:483: ./drivers/gpu/drm/i915/i915_perf.c”h´MÈhj!hubhÚ)�”}”(hŒ**Note**”h]”j)�”}”(hj¨hh]”hŒNote”…”�”}”(hjªhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦hubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:483: ./drivers/gpu/drm/i915/i915_perf.c”h´MÌhj!hubhÚ)�”}”(hŒ¨it's acceptable to have this return with some false positives since any subsequent read handling will return -EAGAIN if there isn't really data ready for userspace yet.”h]”hŒ¬it’s acceptable to have this return with some false positives since any subsequent read handling will return -EAGAIN if there isn’t really data ready for userspace yet.”…”�”}”(hj¾hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:483: ./drivers/gpu/drm/i915/i915_perf.c”h´MÍhj!hubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjÏhh]”hŒReturn”…”�”}”(hjÑhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍhubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:483: ./drivers/gpu/drm/i915/i915_perf.c”h´MÑhj!hubhÚ)�”}”(hŒ(zero on success or a negative error code”h]”hŒ(zero on success or a negative error code”…”�”}”(hjåhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:483: ./drivers/gpu/drm/i915/i915_perf.c”h´MÑhj!hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjaZh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒi915_oa_poll_wait (C function)”Œc.i915_oa_poll_wait”hNt”auh1j¶hjaZh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ]void i915_oa_poll_wait (struct i915_perf_stream *stream, struct file *file, poll_table *wait)”h]”jÓ)�”}”(hŒ\void i915_oa_poll_wait(struct i915_perf_stream *stream, struct file *file, poll_table *wait)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjih²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:485: ./drivers/gpu/drm/i915/i915_perf.c”h´MÞubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjih²hh³j"ih´MÞubj)�”}”(hŒi915_oa_poll_wait”h]”jÜ)�”}”(hŒi915_oa_poll_wait”h]”hŒi915_oa_poll_wait”…”�”}”(hj5ih²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj1iubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjih²hh³j"ih´MÞubj8)�”}”(hŒF(struct i915_perf_stream *stream, struct file *file, poll_table *wait)”h]”(j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjQih²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjMiubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjMiubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hjoih²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjliubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jqiŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj7isbŒc.i915_oa_poll_wait”†”asbuh1hhjMiubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjMiubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj�ih²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjMiubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjªih²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjMiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjIiubj>)�”}”(hŒstruct file *file”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÃih²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj¿iubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¿iubh)�”}”(hhh]”jÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjáih²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÞiubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jãiŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j‹iŒc.i915_oa_poll_wait”†”asbuh1hhj¿iubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¿iubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj jh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj¿iubjÜ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¿iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjIiubj>)�”}”(hŒpoll_table *wait”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒ poll_table”h]”hŒ poll_table”…”�”}”(hj6jh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj3jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j8jŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j‹iŒc.i915_oa_poll_wait”†”asbuh1hhj/jubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj/jubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjbjh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj/jubjÜ)�”}”(hŒwait”h]”hŒwait”…”�”}”(hjojh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj/jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjIiubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjih²hh³j"ih´MÞubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj ih²hh³j"ih´MÞubah}”(h]”jiah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j"ih´MÞhj ih²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ(call poll_wait() for an OA stream poll()”h]”hŒ(call poll_wait() for an OA stream poll()”…”�”}”(hj™jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:485: ./drivers/gpu/drm/i915/i915_perf.c”h´MÞhj–jh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj ih²hh³j"ih´MÞubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój±jjôj±jjõ‰jö‰j÷‰uh1jÇh²hhjaZh³Nh´Nubjù)�”}”(hX¢**Parameters** ``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ``struct file *file`` An i915 perf stream file ``poll_table *wait`` poll() state table **Description** For handling userspace polling on an i915 perf stream opened for OA metrics, this starts a poll_wait with the wait queue that our hrtimer callback wakes when it sees data ready to read in the circular OA buffer.”•h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj»jh]”hŒ Parameters”…”�”}”(hj½jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹jubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:485: ./drivers/gpu/drm/i915/i915_perf.c”h´Mâhjµjubj)�”}”(hhh]”(j)�”}”(hŒN``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hjÚjh]”hŒstruct i915_perf_stream *stream”…”�”}”(hjÜjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjØjubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:485: ./drivers/gpu/drm/i915/i915_perf.c”h´MßhjÔjubj@)�”}”(hhh]”hÚ)�”}”(hŒ)An i915-perf stream opened for OA metrics”h]”hŒ)An i915-perf stream opened for OA metrics”…”�”}”(hjójh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jïjh´Mßhjðjubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÔjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jïjh´MßhjÑjubj)�”}”(hŒ/``struct file *file`` An i915 perf stream file ”h]”(j$)�”}”(hŒ``struct file *file``”h]”j*)�”}”(hjkh]”hŒstruct file *file”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:485: ./drivers/gpu/drm/i915/i915_perf.c”h´Màhj kubj@)�”}”(hhh]”hÚ)�”}”(hŒAn i915 perf stream file”h]”hŒAn i915 perf stream file”…”�”}”(hj,kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j(kh´Màhj)kubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(kh´MàhjÑjubj)�”}”(hŒ(``poll_table *wait`` poll() state table ”h]”(j$)�”}”(hŒ``poll_table *wait``”h]”j*)�”}”(hjLkh]”hŒpoll_table *wait”…”�”}”(hjNkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjJkubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:485: ./drivers/gpu/drm/i915/i915_perf.c”h´MáhjFkubj@)�”}”(hhh]”hÚ)�”}”(hŒpoll() state table”h]”hŒpoll() state table”…”�”}”(hjekh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jakh´Máhjbkubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjFkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jakh´MáhjÑjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjµjubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj‡kh]”hŒ Description”…”�”}”(hj‰kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj…kubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:485: ./drivers/gpu/drm/i915/i915_perf.c”h´MãhjµjubhÚ)�”}”(hŒÓFor handling userspace polling on an i915 perf stream opened for OA metrics, this starts a poll_wait with the wait queue that our hrtimer callback wakes when it sees data ready to read in the circular OA buffer.”h]”hŒÓFor handling userspace polling on an i915 perf stream opened for OA metrics, this starts a poll_wait with the wait queue that our hrtimer callback wakes when it sees data ready to read in the circular OA buffer.”…”�”}”(hj�kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:485: ./drivers/gpu/drm/i915/i915_perf.c”h´Mâhjµjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhjaZh²hh³Nh´Nubeh}”(h]”Œ)i915-perf-observation-architecture-stream”ah ]”h"]”Œ)i915 perf observation architecture stream”ah$]”h&]”uh1hÄhjå#h²hh³hÃh´MÖubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒOther i915 Perf Internals”h]”hŒOther i915 Perf Internals”…”�”}”(hj¾kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj»kh²hh³hÃh´MéubhÚ)�”}”(hŒÛThis section simply includes all other currently documented i915 perf internals, in no particular order, but may include some more minor utilities or platform specific details than found in the more high-level sections.”h]”hŒÛThis section simply includes all other currently documented i915 perf internals, in no particular order, but may include some more minor utilities or platform specific details than found in the more high-level sections.”…”�”}”(hjÌkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Mëhj»kh²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒperf_open_properties (C struct)”Œc.perf_open_properties”hNt”auh1j¶hj»kh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒperf_open_properties”h]”jÓ)�”}”(hŒstruct perf_open_properties”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjókh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjïkh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Kubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjïkh²hh³jlh´Kubj)�”}”(hŒperf_open_properties”h]”jÜ)�”}”(hjíkh]”hŒperf_open_properties”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjlubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjïkh²hh³jlh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjëkh²hh³jlh´Kubah}”(h]”jækah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jlh´Khjèkh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ/for validated properties given to open a stream”h]”hŒ/for validated properties given to open a stream”…”�”}”(hj5lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MXhj2lh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjèkh²hh³jlh´Kubeh}”(h]”h ]”(jóŒstruct”eh"]”h$]”h&]”jòjójójMljôjMljõ‰jö‰j÷‰uh1jÇh²hhj»kh³Nh´Nubjù)�”}”(hXW**Definition**:: struct perf_open_properties { u32 sample_flags; u64 single_context:1; u64 hold_preemption:1; u64 ctx_handle; int metrics_set; int oa_format; bool oa_periodic; int oa_period_exponent; struct intel_engine_cs *engine; bool has_sseu; struct intel_sseu sseu; u64 poll_oa_period; }; **Members** ``sample_flags`` `DRM_I915_PERF_PROP_SAMPLE_*` properties are tracked as flags ``single_context`` Whether a single or all gpu contexts should be monitored ``hold_preemption`` Whether the preemption is disabled for the filtered context ``ctx_handle`` A gem ctx handle for use with **single_context** ``metrics_set`` An ID for an OA unit metric set advertised via sysfs ``oa_format`` An OA unit HW report format ``oa_periodic`` Whether to enable periodic OA unit sampling ``oa_period_exponent`` The OA unit sampling period is derived from this ``engine`` The engine (typically rcs0) being monitored by the OA unit ``has_sseu`` Whether **sseu** was specified by userspace ``sseu`` internal SSEU configuration computed either from the userspace specified configuration in the opening parameters or a default value (see get_default_sseu_config()) ``poll_oa_period`` The period in nanoseconds at which the CPU will check for OA data availability”h]”(hÚ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjYlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUlubhŒ:”…”�”}”(hjUlh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M\hjQlubjA#)�”}”(hXDstruct perf_open_properties { u32 sample_flags; u64 single_context:1; u64 hold_preemption:1; u64 ctx_handle; int metrics_set; int oa_format; bool oa_periodic; int oa_period_exponent; struct intel_engine_cs *engine; bool has_sseu; struct intel_sseu sseu; u64 poll_oa_period; };”h]”hXDstruct perf_open_properties { u32 sample_flags; u64 single_context:1; u64 hold_preemption:1; u64 ctx_handle; int metrics_set; int oa_format; bool oa_periodic; int oa_period_exponent; struct intel_engine_cs *engine; bool has_sseu; struct intel_sseu sseu; u64 poll_oa_period; };”…”�”}”hjrlsbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M^hjQlubhÚ)�”}”(hŒ **Members**”h]”j)�”}”(hjƒlh]”hŒMembers”…”�”}”(hj…lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�lubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MmhjQlubj)�”}”(hhh]”(j)�”}”(hŒO``sample_flags`` `DRM_I915_PERF_PROP_SAMPLE_*` properties are tracked as flags ”h]”(j$)�”}”(hŒ``sample_flags``”h]”j*)�”}”(hj¢lh]”hŒ sample_flags”…”�”}”(hj¤lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj lubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MZhjœlubj@)�”}”(hhh]”hÚ)�”}”(hŒ=`DRM_I915_PERF_PROP_SAMPLE_*` properties are tracked as flags”h]”(jc)�”}”(hŒ`DRM_I915_PERF_PROP_SAMPLE_*`”h]”hŒDRM_I915_PERF_PROP_SAMPLE_*”…”�”}”(hj¿lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chj»lubhŒ properties are tracked as flags”…”�”}”(hj»lh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j·lh´MZhj¸lubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjœlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·lh´MZhj™lubj)�”}”(hŒL``single_context`` Whether a single or all gpu contexts should be monitored ”h]”(j$)�”}”(hŒ``single_context``”h]”j*)�”}”(hjélh]”hŒsingle_context”…”�”}”(hjëlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjçlubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M[hjãlubj@)�”}”(hhh]”hÚ)�”}”(hŒ8Whether a single or all gpu contexts should be monitored”h]”hŒ8Whether a single or all gpu contexts should be monitored”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jþlh´M[hjÿlubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjãlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jþlh´M[hj™lubj)�”}”(hŒP``hold_preemption`` Whether the preemption is disabled for the filtered context ”h]”(j$)�”}”(hŒ``hold_preemption``”h]”j*)�”}”(hj"mh]”hŒhold_preemption”…”�”}”(hj$mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj mubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M]hjmubj@)�”}”(hhh]”hÚ)�”}”(hŒ;Whether the preemption is disabled for the filtered context”h]”hŒ;Whether the preemption is disabled for the filtered context”…”�”}”(hj;mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M\hj8mubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7mh´M]hj™lubj)�”}”(hŒ@``ctx_handle`` A gem ctx handle for use with **single_context** ”h]”(j$)�”}”(hŒ``ctx_handle``”h]”j*)�”}”(hj\mh]”hŒ ctx_handle”…”�”}”(hj^mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjZmubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M^hjVmubj@)�”}”(hhh]”hÚ)�”}”(hŒ0A gem ctx handle for use with **single_context**”h]”(hŒA gem ctx handle for use with ”…”�”}”(hjumh²hh³Nh´Nubj)�”}”(hŒ**single_context**”h]”hŒsingle_context”…”�”}”(hj}mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjumubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jqmh´M^hjrmubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjVmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jqmh´M^hj™lubj)�”}”(hŒE``metrics_set`` An ID for an OA unit metric set advertised via sysfs ”h]”(j$)�”}”(hŒ``metrics_set``”h]”j*)�”}”(hj£mh]”hŒ metrics_set”…”�”}”(hj¥mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¡mubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M_hj�mubj@)�”}”(hhh]”hÚ)�”}”(hŒ4An ID for an OA unit metric set advertised via sysfs”h]”hŒ4An ID for an OA unit metric set advertised via sysfs”…”�”}”(hj¼mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¸mh´M_hj¹mubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj�mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¸mh´M_hj™lubj)�”}”(hŒ*``oa_format`` An OA unit HW report format ”h]”(j$)�”}”(hŒ ``oa_format``”h]”j*)�”}”(hjÜmh]”hŒ oa_format”…”�”}”(hjÞmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÚmubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M`hjÖmubj@)�”}”(hhh]”hÚ)�”}”(hŒAn OA unit HW report format”h]”hŒAn OA unit HW report format”…”�”}”(hjõmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jñmh´M`hjòmubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÖmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jñmh´M`hj™lubj)�”}”(hŒ<``oa_periodic`` Whether to enable periodic OA unit sampling ”h]”(j$)�”}”(hŒ``oa_periodic``”h]”j*)�”}”(hjnh]”hŒ oa_periodic”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjnubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mahjnubj@)�”}”(hhh]”hÚ)�”}”(hŒ+Whether to enable periodic OA unit sampling”h]”hŒ+Whether to enable periodic OA unit sampling”…”�”}”(hj.nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j*nh´Mahj+nubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j*nh´Mahj™lubj)�”}”(hŒH``oa_period_exponent`` The OA unit sampling period is derived from this ”h]”(j$)�”}”(hŒ``oa_period_exponent``”h]”j*)�”}”(hjNnh]”hŒoa_period_exponent”…”�”}”(hjPnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjLnubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MbhjHnubj@)�”}”(hhh]”hÚ)�”}”(hŒ0The OA unit sampling period is derived from this”h]”hŒ0The OA unit sampling period is derived from this”…”�”}”(hjgnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jcnh´Mbhjdnubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjHnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jcnh´Mbhj™lubj)�”}”(hŒF``engine`` The engine (typically rcs0) being monitored by the OA unit ”h]”(j$)�”}”(hŒ ``engine``”h]”j*)�”}”(hj‡nh]”hŒengine”…”�”}”(hj‰nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj…nubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mchj�nubj@)�”}”(hhh]”hÚ)�”}”(hŒ:The engine (typically rcs0) being monitored by the OA unit”h]”hŒ:The engine (typically rcs0) being monitored by the OA unit”…”�”}”(hj nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jœnh´Mchj�nubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj�nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jœnh´Mchj™lubj)�”}”(hŒ9``has_sseu`` Whether **sseu** was specified by userspace ”h]”(j$)�”}”(hŒ ``has_sseu``”h]”j*)�”}”(hjÀnh]”hŒhas_sseu”…”�”}”(hjÂnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¾nubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mdhjºnubj@)�”}”(hhh]”hÚ)�”}”(hŒ+Whether **sseu** was specified by userspace”h]”(hŒWhether ”…”�”}”(hjÙnh²hh³Nh´Nubj)�”}”(hŒ**sseu**”h]”hŒsseu”…”�”}”(hjánh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙnubhŒ was specified by userspace”…”�”}”(hjÙnh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÕnh´MdhjÖnubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjºnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÕnh´Mdhj™lubj)�”}”(hŒ­``sseu`` internal SSEU configuration computed either from the userspace specified configuration in the opening parameters or a default value (see get_default_sseu_config()) ”h]”(j$)�”}”(hŒ``sseu``”h]”j*)�”}”(hj oh]”hŒsseu”…”�”}”(hj oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj oubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mghjoubj@)�”}”(hhh]”hÚ)�”}”(hŒ£internal SSEU configuration computed either from the userspace specified configuration in the opening parameters or a default value (see get_default_sseu_config())”h]”hŒ£internal SSEU configuration computed either from the userspace specified configuration in the opening parameters or a default value (see get_default_sseu_config())”…”�”}”(hj$oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mehj!oubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j oh´Mghj™lubj)�”}”(hŒa``poll_oa_period`` The period in nanoseconds at which the CPU will check for OA data availability”h]”(j$)�”}”(hŒ``poll_oa_period``”h]”j*)�”}”(hjEoh]”hŒpoll_oa_period”…”�”}”(hjGoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjCoubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mhhj?oubj@)�”}”(hhh]”hÚ)�”}”(hŒNThe period in nanoseconds at which the CPU will check for OA data availability”h]”hŒNThe period in nanoseconds at which the CPU will check for OA data availability”…”�”}”(hj^oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jZoh´Mhhj[oubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj?oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jZoh´Mhhj™lubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjQlubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj»kh²hh³Nh´NubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj‡oh]”hŒ Description”…”�”}”(hj‰oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj…oubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mlhj»kh²hubhÚ)�”}”(hŒ¹As read_properties_unlocked() enumerates and validates the properties given to open a stream of metrics the configuration is built up in the structure which starts out zero initialized.”h]”hŒ¹As read_properties_unlocked() enumerates and validates the properties given to open a stream of metrics the configuration is built up in the structure which starts out zero initialized.”…”�”}”(hj�oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mihj»kh²hubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ%oa_buffer_check_unlocked (C function)”Œc.oa_buffer_check_unlocked”hNt”auh1j¶hj»kh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ?bool oa_buffer_check_unlocked (struct i915_perf_stream *stream)”h]”jÓ)�”}”(hŒ>bool oa_buffer_check_unlocked(struct i915_perf_stream *stream)”h]”(jn)�”}”(hjqh]”hŒbool”…”�”}”(hjÅoh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÁoh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÁoh²hh³jÒoh´M ubj)�”}”(hŒoa_buffer_check_unlocked”h]”jÜ)�”}”(hŒoa_buffer_check_unlocked”h]”hŒoa_buffer_check_unlocked”…”�”}”(hjåoh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjáoubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÁoh²hh³jÒoh´M ubj8)�”}”(hŒ!(struct i915_perf_stream *stream)”h]”j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjýoubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjýoubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j!pŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjçosbŒc.oa_buffer_check_unlocked”†”asbuh1hhjýoubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjýoubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjMph²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjýoubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjZph²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjýoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjùoubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÁoh²hh³jÒoh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj½oh²hh³jÒoh´M ubah}”(h]”j¸oah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÒoh´M hjºoh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ(check for data and update tail ptr state”h]”hŒ(check for data and update tail ptr state”…”�”}”(hj„ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M hj�ph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjºoh²hh³jÒoh´M ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójœpjôjœpjõ‰jö‰j÷‰uh1jÇh²hhj»kh³Nh´Nubjù)�”}”(hXø**Parameters** ``struct i915_perf_stream *stream`` i915 stream instance **Description** This is either called via fops (for blocking reads in user ctx) or the poll check hrtimer (atomic ctx) to check the OA buffer tail pointer and check if there is data available for userspace to read. This function is central to providing a workaround for the OA unit tail pointer having a race with respect to what data is visible to the CPU. It is responsible for reading tail pointers from the hardware and giving the pointers time to 'age' before they are made available for reading. (See description of OA_TAIL_MARGIN_NSEC above for further details.) Besides returning true when there is data available to read() this function also updates the tail in the oa_buffer object. **Note** It's safe to read OA config state here unlocked, assuming that this is only called while the stream is enabled, while the global OA configuration can't be modified. **Return** ``true`` if the OA buffer contains data, else ``false``”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj¦ph]”hŒ Parameters”…”�”}”(hj¨ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤pubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M hj pubj)�”}”(hhh]”j)�”}”(hŒ9``struct i915_perf_stream *stream`` i915 stream instance ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hjÅph]”hŒstruct i915_perf_stream *stream”…”�”}”(hjÇph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÃpubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M hj¿pubj@)�”}”(hhh]”hÚ)�”}”(hŒi915 stream instance”h]”hŒi915 stream instance”…”�”}”(hjÞph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÚph´M hjÛpubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¿pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÚph´M hj¼pubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj pubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjqh]”hŒ Description”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþpubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M hj pubhÚ)�”}”(hŒÆThis is either called via fops (for blocking reads in user ctx) or the poll check hrtimer (atomic ctx) to check the OA buffer tail pointer and check if there is data available for userspace to read.”h]”hŒÆThis is either called via fops (for blocking reads in user ctx) or the poll check hrtimer (atomic ctx) to check the OA buffer tail pointer and check if there is data available for userspace to read.”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M hj pubhÚ)�”}”(hXbThis function is central to providing a workaround for the OA unit tail pointer having a race with respect to what data is visible to the CPU. It is responsible for reading tail pointers from the hardware and giving the pointers time to 'age' before they are made available for reading. (See description of OA_TAIL_MARGIN_NSEC above for further details.)”h]”hXfThis function is central to providing a workaround for the OA unit tail pointer having a race with respect to what data is visible to the CPU. It is responsible for reading tail pointers from the hardware and giving the pointers time to ‘age’ before they are made available for reading. (See description of OA_TAIL_MARGIN_NSEC above for further details.)”…”�”}”(hj%qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mhj pubhÚ)�”}”(hŒzBesides returning true when there is data available to read() this function also updates the tail in the oa_buffer object.”h]”hŒzBesides returning true when there is data available to read() this function also updates the tail in the oa_buffer object.”…”�”}”(hj4qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mhj pubhÚ)�”}”(hŒ**Note**”h]”j)�”}”(hjEqh]”hŒNote”…”�”}”(hjGqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjCqubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mhj pubhÚ)�”}”(hŒ¤It's safe to read OA config state here unlocked, assuming that this is only called while the stream is enabled, while the global OA configuration can't be modified.”h]”hŒ¨It’s safe to read OA config state here unlocked, assuming that this is only called while the stream is enabled, while the global OA configuration can’t be modified.”…”�”}”(hj[qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mhj pubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjlqh]”hŒReturn”…”�”}”(hjnqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjjqubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mhj pubhÚ)�”}”(hŒ7``true`` if the OA buffer contains data, else ``false``”h]”(j*)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj†qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj‚qubhŒ& if the OA buffer contains data, else ”…”�”}”(hj‚qh²hh³Nh´Nubj*)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj˜qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj‚qubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mhj pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj»kh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒappend_oa_status (C function)”Œc.append_oa_status”hNt”auh1j¶hj»kh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ‹int append_oa_status (struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset, enum drm_i915_perf_record_type type)”h]”jÓ)�”}”(hŒŠint append_oa_status(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset, enum drm_i915_perf_record_type type)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjÍqh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÉqh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mfubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÉqh²hh³jÛqh´Mfubj)�”}”(hŒappend_oa_status”h]”jÜ)�”}”(hŒappend_oa_status”h]”hŒappend_oa_status”…”�”}”(hjîqh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjêqubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjÉqh²hh³jÛqh´Mfubj8)�”}”(hŒv(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset, enum drm_i915_perf_record_type type)”h]”(j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj rh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjrubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjrubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hj(rh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj%rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j*rŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjðqsbŒc.append_oa_status”†”asbuh1hhjrubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjrubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjVrh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjrubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjcrh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjrubj>)�”}”(hŒchar __user *buf”h]”(jn)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj|rh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjxrubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjxrubhŒ__user”…”�”}”(hjxrh²hh³Nh´Nubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjxrubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjªrh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjxrubjÜ)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj·rh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjxrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjrubj>)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÓrh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÐrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÕrŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jDrŒc.append_oa_status”†”asbuh1hhjÌrubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÌrubjÜ)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjÿrh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÌrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjrubj>)�”}”(hŒsize_t *offset”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jsŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jDrŒc.append_oa_status”†”asbuh1hhjsubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9sh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjsubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjGsh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjsubjÜ)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjTsh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjsubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjrubj>)�”}”(hŒ#enum drm_i915_perf_record_type type”h]”(jD)�”}”(hjµh]”hŒenum”…”�”}”(hjmsh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjisubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjisubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_perf_record_type”h]”hŒdrm_i915_perf_record_type”…”�”}”(hj‹sh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjˆsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j�sŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jDrŒc.append_oa_status”†”asbuh1hhjisubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©sh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjisubjÜ)�”}”(hŒtype”h]”hŒtype”…”�”}”(hj·sh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjisubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjrubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjÉqh²hh³jÛqh´Mfubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÅqh²hh³jÛqh´Mfubah}”(h]”jÀqah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÛqh´MfhjÂqh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ5Appends a status record to a userspace read() buffer.”h]”hŒ5Appends a status record to a userspace read() buffer.”…”�”}”(hjásh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MfhjÞsh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÂqh²hh³jÛqh´Mfubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójùsjôjùsjõ‰jö‰j÷‰uh1jÇh²hhj»kh³Nh´Nubjù)�”}”(hXn**Parameters** ``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ``char __user *buf`` destination buffer given by userspace ``size_t count`` the number of bytes userspace wants to read ``size_t *offset`` (inout): the current position for writing into **buf** ``enum drm_i915_perf_record_type type`` The kind of status to report to userspace **Description** Writes a status record (such as `DRM_I915_PERF_RECORD_OA_REPORT_LOST`) into the userspace read() buffer. The **buf** **offset** will only be updated on success. **Return** 0 on success, negative error code on failure.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjth]”hŒ Parameters”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mjhjýsubj)�”}”(hhh]”(j)�”}”(hŒN``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hj"th]”hŒstruct i915_perf_stream *stream”…”�”}”(hj$th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj tubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mghjtubj@)�”}”(hhh]”hÚ)�”}”(hŒ)An i915-perf stream opened for OA metrics”h]”hŒ)An i915-perf stream opened for OA metrics”…”�”}”(hj;th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j7th´Mghj8tubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7th´Mghjtubj)�”}”(hŒ;``char __user *buf`` destination buffer given by userspace ”h]”(j$)�”}”(hŒ``char __user *buf``”h]”j*)�”}”(hj[th]”hŒchar __user *buf”…”�”}”(hj]th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjYtubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MhhjUtubj@)�”}”(hhh]”hÚ)�”}”(hŒ%destination buffer given by userspace”h]”hŒ%destination buffer given by userspace”…”�”}”(hjtth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jpth´Mhhjqtubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjUtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jpth´Mhhjtubj)�”}”(hŒ=``size_t count`` the number of bytes userspace wants to read ”h]”(j$)�”}”(hŒ``size_t count``”h]”j*)�”}”(hj”th]”hŒ size_t count”…”�”}”(hj–th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj’tubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MihjŽtubj@)�”}”(hhh]”hÚ)�”}”(hŒ+the number of bytes userspace wants to read”h]”hŒ+the number of bytes userspace wants to read”…”�”}”(hj­th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j©th´Mihjªtubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjŽtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©th´Mihjtubj)�”}”(hŒJ``size_t *offset`` (inout): the current position for writing into **buf** ”h]”(j$)�”}”(hŒ``size_t *offset``”h]”j*)�”}”(hjÍth]”hŒsize_t *offset”…”�”}”(hjÏth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjËtubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MjhjÇtubj@)�”}”(hhh]”hÚ)�”}”(hŒ6(inout): the current position for writing into **buf**”h]”(hŒ/(inout): the current position for writing into ”…”�”}”(hjæth²hh³Nh´Nubj)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjîth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjætubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jâth´Mjhjãtubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÇtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jâth´Mjhjtubj)�”}”(hŒR``enum drm_i915_perf_record_type type`` The kind of status to report to userspace ”h]”(j$)�”}”(hŒ'``enum drm_i915_perf_record_type type``”h]”j*)�”}”(hjuh]”hŒ#enum drm_i915_perf_record_type type”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjuubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mkhjuubj@)�”}”(hhh]”hÚ)�”}”(hŒ)The kind of status to report to userspace”h]”hŒ)The kind of status to report to userspace”…”�”}”(hj-uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j)uh´Mkhj*uubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)uh´Mkhjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjýsubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjOuh]”hŒ Description”…”�”}”(hjQuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MmhjýsubhÚ)�”}”(hŒhWrites a status record (such as `DRM_I915_PERF_RECORD_OA_REPORT_LOST`) into the userspace read() buffer.”h]”(hŒ Writes a status record (such as ”…”�”}”(hjeuh²hh³Nh´Nubjc)�”}”(hŒ%`DRM_I915_PERF_RECORD_OA_REPORT_LOST`”h]”hŒ#DRM_I915_PERF_RECORD_OA_REPORT_LOST”…”�”}”(hjmuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjeuubhŒ#) into the userspace read() buffer.”…”�”}”(hjeuh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MlhjýsubhÚ)�”}”(hŒ7The **buf** **offset** will only be updated on success.”h]”(hŒThe ”…”�”}”(hj†uh²hh³Nh´Nubj)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjŽuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†uubhŒ ”…”�”}”(hj†uh²hh³Nh´Nubj)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hj uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†uubhŒ! will only be updated on success.”…”�”}”(hj†uh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MohjýsubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj»uh]”hŒReturn”…”�”}”(hj½uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹uubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MqhjýsubhÚ)�”}”(hŒ-0 on success, negative error code on failure.”h]”hŒ-0 on success, negative error code on failure.”…”�”}”(hjÑuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mrhjýsubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj»kh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒappend_oa_sample (C function)”Œc.append_oa_sample”hNt”auh1j¶hj»kh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒxint append_oa_sample (struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset, const u8 *report)”h]”jÓ)�”}”(hŒwint append_oa_sample(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset, const u8 *report)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjüuh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mˆubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjüuh²hh³jvh´Mˆubj)�”}”(hŒappend_oa_sample”h]”jÜ)�”}”(hŒappend_oa_sample”h]”hŒappend_oa_sample”…”�”}”(hj!vh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjvubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjüuh²hh³jvh´Mˆubj8)�”}”(hŒc(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset, const u8 *report)”h]”(j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj=vh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj9vubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj9vubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hj[vh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjXvubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j]vŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj#vsbŒc.append_oa_sample”†”asbuh1hhj9vubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{vh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj9vubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj‰vh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj9vubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hj–vh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj9vubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj5vubj>)�”}”(hŒchar __user *buf”h]”(jn)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¯vh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj«vubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½vh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj«vubhŒ__user”…”�”}”(hj«vh²hh³Nh´Nubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj«vubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjÝvh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj«vubjÜ)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjêvh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj«vubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj5vubj>)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jwŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jwvŒc.append_oa_sample”†”asbuh1hhjÿvubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÿvubjÜ)�”}”(hŒcount”h]”hŒcount”…”�”}”(hj2wh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÿvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj5vubj>)�”}”(hŒsize_t *offset”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjNwh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjKwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jPwŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jwvŒc.append_oa_sample”†”asbuh1hhjGwubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjGwubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjzwh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjGwubjÜ)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hj‡wh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjGwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj5vubj>)�”}”(hŒconst u8 *report”h]”(jD)�”}”(hŒconst”h]”hŒconst”…”�”}”(hj wh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjœwubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjœwubh)�”}”(hhh]”jÜ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj¿wh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¼wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÁwŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jwvŒc.append_oa_sample”†”asbuh1hhjœwubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjœwubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjëwh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjœwubjÜ)�”}”(hŒreport”h]”hŒreport”…”�”}”(hjøwh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjœwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj5vubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjüuh²hh³jvh´Mˆubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjøuh²hh³jvh´Mˆubah}”(h]”jóuah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jvh´Mˆhjõuh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ5Copies single OA report into userspace read() buffer.”h]”hŒ5Copies single OA report into userspace read() buffer.”…”�”}”(hj"xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mˆhjxh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjõuh²hh³jvh´Mˆubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój:xjôj:xjõ‰jö‰j÷‰uh1jÇh²hhj»kh³Nh´Nubjù)�”}”(hXú**Parameters** ``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ``char __user *buf`` destination buffer given by userspace ``size_t count`` the number of bytes userspace wants to read ``size_t *offset`` (inout): the current position for writing into **buf** ``const u8 *report`` A single OA report to (optionally) include as part of the sample **Description** The contents of a sample are configured through `DRM_I915_PERF_PROP_SAMPLE_*` properties when opening a stream, tracked as `stream->sample_flags`. This function copies the requested components of a single sample to the given read() **buf**. The **buf** **offset** will only be updated on success. **Return** 0 on success, negative error code on failure.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjDxh]”hŒ Parameters”…”�”}”(hjFxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MŒhj>xubj)�”}”(hhh]”(j)�”}”(hŒN``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hjcxh]”hŒstruct i915_perf_stream *stream”…”�”}”(hjexh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjaxubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M‰hj]xubj@)�”}”(hhh]”hÚ)�”}”(hŒ)An i915-perf stream opened for OA metrics”h]”hŒ)An i915-perf stream opened for OA metrics”…”�”}”(hj|xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jxxh´M‰hjyxubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj]xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jxxh´M‰hjZxubj)�”}”(hŒ;``char __user *buf`` destination buffer given by userspace ”h]”(j$)�”}”(hŒ``char __user *buf``”h]”j*)�”}”(hjœxh]”hŒchar __user *buf”…”�”}”(hjžxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjšxubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MŠhj–xubj@)�”}”(hhh]”hÚ)�”}”(hŒ%destination buffer given by userspace”h]”hŒ%destination buffer given by userspace”…”�”}”(hjµxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j±xh´MŠhj²xubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj–xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±xh´MŠhjZxubj)�”}”(hŒ=``size_t count`` the number of bytes userspace wants to read ”h]”(j$)�”}”(hŒ``size_t count``”h]”j*)�”}”(hjÕxh]”hŒ size_t count”…”�”}”(hj×xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÓxubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M‹hjÏxubj@)�”}”(hhh]”hÚ)�”}”(hŒ+the number of bytes userspace wants to read”h]”hŒ+the number of bytes userspace wants to read”…”�”}”(hjîxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jêxh´M‹hjëxubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÏxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêxh´M‹hjZxubj)�”}”(hŒJ``size_t *offset`` (inout): the current position for writing into **buf** ”h]”(j$)�”}”(hŒ``size_t *offset``”h]”j*)�”}”(hjyh]”hŒsize_t *offset”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj yubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MŒhjyubj@)�”}”(hhh]”hÚ)�”}”(hŒ6(inout): the current position for writing into **buf**”h]”(hŒ/(inout): the current position for writing into ”…”�”}”(hj'yh²hh³Nh´Nubj)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hj/yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'yubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j#yh´MŒhj$yubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j#yh´MŒhjZxubj)�”}”(hŒV``const u8 *report`` A single OA report to (optionally) include as part of the sample ”h]”(j$)�”}”(hŒ``const u8 *report``”h]”j*)�”}”(hjUyh]”hŒconst u8 *report”…”�”}”(hjWyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjSyubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M�hjOyubj@)�”}”(hhh]”hÚ)�”}”(hŒ@A single OA report to (optionally) include as part of the sample”h]”hŒ@A single OA report to (optionally) include as part of the sample”…”�”}”(hjnyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jjyh´M�hjkyubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjOyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jjyh´M�hjZxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj>xubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj�yh]”hŒ Description”…”�”}”(hj’yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽyubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M�hj>xubhÚ)�”}”(hŒðThe contents of a sample are configured through `DRM_I915_PERF_PROP_SAMPLE_*` properties when opening a stream, tracked as `stream->sample_flags`. This function copies the requested components of a single sample to the given read() **buf**.”h]”(hŒ0The contents of a sample are configured through ”…”�”}”(hj¦yh²hh³Nh´Nubjc)�”}”(hŒ`DRM_I915_PERF_PROP_SAMPLE_*`”h]”hŒDRM_I915_PERF_PROP_SAMPLE_*”…”�”}”(hj®yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chj¦yubhŒ. properties when opening a stream, tracked as ”…”�”}”(hj¦yh²hh³Nh´Nubjc)�”}”(hŒ`stream->sample_flags`”h]”hŒstream->sample_flags”…”�”}”(hjÀyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chj¦yubhŒW. This function copies the requested components of a single sample to the given read() ”…”�”}”(hj¦yh²hh³Nh´Nubj)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjÒyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦yubhŒ.”…”�”}”(hj¦yh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MŽhj>xubhÚ)�”}”(hŒ7The **buf** **offset** will only be updated on success.”h]”(hŒThe ”…”�”}”(hjëyh²hh³Nh´Nubj)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjóyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjëyubhŒ ”…”�”}”(hjëyh²hh³Nh´Nubj)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjëyubhŒ! will only be updated on success.”…”�”}”(hjëyh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M“hj>xubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj zh]”hŒReturn”…”�”}”(hj"zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M•hj>xubhÚ)�”}”(hŒ-0 on success, negative error code on failure.”h]”hŒ-0 on success, negative error code on failure.”…”�”}”(hj6zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M–hj>xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj»kh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ#gen8_append_oa_reports (C function)”Œc.gen8_append_oa_reports”hNt”auh1j¶hj»kh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒlint gen8_append_oa_reports (struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset)”h]”jÓ)�”}”(hŒkint gen8_append_oa_reports(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjezh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjazh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MÄubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjazh²hh³jszh´MÄubj)�”}”(hŒgen8_append_oa_reports”h]”jÜ)�”}”(hŒgen8_append_oa_reports”h]”hŒgen8_append_oa_reports”…”�”}”(hj†zh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj‚zubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjazh²hh³jszh´MÄubj8)�”}”(hŒQ(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset)”h]”(j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj¢zh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjžzubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjžzubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hjÀzh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj½zubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÂzŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjˆzsbŒc.gen8_append_oa_reports”†”asbuh1hhjžzubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjžzubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjîzh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjžzubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjûzh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjžzubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjšzubj>)�”}”(hŒchar __user *buf”h]”(jn)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj{ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj{ubhŒ__user”…”�”}”(hj{h²hh³Nh´Nubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj{ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjB{h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj{ubjÜ)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjO{h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjšzubj>)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjk{h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjh{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jm{Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jÜzŒc.gen8_append_oa_reports”†”asbuh1hhjd{ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjd{ubjÜ)�”}”(hŒcount”h]”hŒcount”…”�”}”(hj—{h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjd{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjšzubj>)�”}”(hŒsize_t *offset”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj³{h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj°{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jµ{Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jÜzŒc.gen8_append_oa_reports”†”asbuh1hhj¬{ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¬{ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjß{h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj¬{ubjÜ)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjì{h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¬{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjšzubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjazh²hh³jszh´MÄubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj]zh²hh³jszh´MÄubah}”(h]”jXzah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jszh´MÄhjZzh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj?~h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj;~ubj )�”•¤}”(hŒ ”h]”hŒ ”…”�”}”(hjL~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj;~ubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hj]~h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjZ~ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j_~Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj%~sbŒc.gen8_oa_read”†”asbuh1hhj;~ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj;~ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj‹~h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj;~ubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hj˜~h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj;~ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj7~ubj>)�”}”(hŒchar __user *buf”h]”(jn)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj±~h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj­~ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj­~ubhŒ__user”…”�”}”(hj­~h²hh³Nh´Nubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj­~ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjß~h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj­~ubjÜ)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjì~h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj­~ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj7~ubj>)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jy~Œc.gen8_oa_read”†”asbuh1hhjubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjubjÜ)�”}”(hŒcount”h]”hŒcount”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj7~ubj>)�”}”(hŒsize_t *offset”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjMubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jRŒmodname”NŒ classname”Njùjü)�”}”jÿ]”jy~Œc.gen8_oa_read”†”asbuh1hhjIubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjIubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjIubjÜ)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj7~ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjþ}h²hh³j~h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjú}h²hh³j~h´M ubah}”(h]”jõ}ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j~h´M hj÷}h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ,copy status records then buffered OA reports”h]”hŒ,copy status records then buffered OA reports”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M hj°h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj÷}h²hh³j~h´M ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójËjôjËjõ‰jö‰j÷‰uh1jÇh²hhj»kh³Nh´Nubjù)�”}”(hX&**Parameters** ``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ``char __user *buf`` destination buffer given by userspace ``size_t count`` the number of bytes userspace wants to read ``size_t *offset`` (inout): the current position for writing into **buf** **Description** Checks OA unit status registers and if necessary appends corresponding status records for userspace (such as for a buffer full condition) and then initiate appending any buffered OA reports. Updates **offset** according to the number of bytes successfully copied into the userspace buffer. NB: some data may be successfully copied to the userspace buffer even if an error is returned, and this is reflected in the updated **offset**. **Return** zero on success or a negative error code”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjÕh]”hŒ Parameters”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M¤hjÏubj)�”}”(hhh]”(j)�”}”(hŒN``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hjôh]”hŒstruct i915_perf_stream *stream”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjòubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M¡hjîubj@)�”}”(hhh]”hÚ)�”}”(hŒ)An i915-perf stream opened for OA metrics”h]”hŒ)An i915-perf stream opened for OA metrics”…”�”}”(hj €h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j €h´M¡hj €ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j €h´M¡hjëubj)�”}”(hŒ;``char __user *buf`` destination buffer given by userspace ”h]”(j$)�”}”(hŒ``char __user *buf``”h]”j*)�”}”(hj-€h]”hŒchar __user *buf”…”�”}”(hj/€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj+€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M¢hj'€ubj@)�”}”(hhh]”hÚ)�”}”(hŒ%destination buffer given by userspace”h]”hŒ%destination buffer given by userspace”…”�”}”(hjF€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jB€h´M¢hjC€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj'€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jB€h´M¢hjëubj)�”}”(hŒ=``size_t count`` the number of bytes userspace wants to read ”h]”(j$)�”}”(hŒ``size_t count``”h]”j*)�”}”(hjf€h]”hŒ size_t count”…”�”}”(hjh€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjd€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M£hj`€ubj@)�”}”(hhh]”hÚ)�”}”(hŒ+the number of bytes userspace wants to read”h]”hŒ+the number of bytes userspace wants to read”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j{€h´M£hj|€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj`€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{€h´M£hjëubj)�”}”(hŒJ``size_t *offset`` (inout): the current position for writing into **buf** ”h]”(j$)�”}”(hŒ``size_t *offset``”h]”j*)�”}”(hjŸ€h]”hŒsize_t *offset”…”�”}”(hj¡€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj�€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M¤hj™€ubj@)�”}”(hhh]”hÚ)�”}”(hŒ6(inout): the current position for writing into **buf**”h]”(hŒ/(inout): the current position for writing into ”…”�”}”(hj¸€h²hh³Nh´Nubj)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjÀ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j´€h´M¤hjµ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj™€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´€h´M¤hjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjè€h]”hŒ Description”…”�”}”(hjê€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjæ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M¦hjÏubhÚ)�”}”(hŒ¾Checks OA unit status registers and if necessary appends corresponding status records for userspace (such as for a buffer full condition) and then initiate appending any buffered OA reports.”h]”hŒ¾Checks OA unit status registers and if necessary appends corresponding status records for userspace (such as for a buffer full condition) and then initiate appending any buffered OA reports.”…”�”}”(hjþ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M¥hjÏubhÚ)�”}”(hŒbUpdates **offset** according to the number of bytes successfully copied into the userspace buffer.”h]”(hŒUpdates ”…”�”}”(hj �h²hh³Nh´Nubj)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj �ubhŒP according to the number of bytes successfully copied into the userspace buffer.”…”�”}”(hj �h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M©hjÏubhÚ)�”}”(hŒ�NB: some data may be successfully copied to the userspace buffer even if an error is returned, and this is reflected in the updated **offset**.”h]”(hŒ„NB: some data may be successfully copied to the userspace buffer even if an error is returned, and this is reflected in the updated ”…”�”}”(hj.�h²hh³Nh´Nubj)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hj6�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.�ubhŒ.”…”�”}”(hj.�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M¬hjÏubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjQ�h]”hŒReturn”…”�”}”(hjS�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjO�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M°hjÏubhÚ)�”}”(hŒ(zero on success or a negative error code”h]”hŒ(zero on success or a negative error code”…”�”}”(hjg�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M±hjÏubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj»kh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ#gen7_append_oa_reports (C function)”Œc.gen7_append_oa_reports”hNt”auh1j¶hj»kh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒlint gen7_append_oa_reports (struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset)”h]”jÓ)�”}”(hŒkint gen7_append_oa_reports(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj–�h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj’�h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Múubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj’�h²hh³j¤�h´Múubj)�”}”(hŒgen7_append_oa_reports”h]”jÜ)�”}”(hŒgen7_append_oa_reports”h]”hŒgen7_append_oa_reports”…”�”}”(hj·�h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj³�ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj’�h²hh³j¤�h´Múubj8)�”}”(hŒQ(struct i915_perf_stream *stream, char __user *buf, size_t count, size_t *offset)”h]”(j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjÓ�h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjÏ�ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÏ�ubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hjñ�h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjî�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jó�Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj¹�sbŒc.gen7_append_oa_reports”†”asbuh1hhjÏ�ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÏ�ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÏ�ubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hj,‚h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÏ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjË�ubj>)�”}”(hŒchar __user *buf”h]”(jn)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjE‚h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjA‚ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjA‚ubhŒ__user”…”�”}”(hjA‚h²hh³Nh´Nubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hje‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjA‚ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjs‚h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjA‚ubjÜ)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj€‚h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjA‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjË�ubj>)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjœ‚h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj™‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jž‚Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j ‚Œc.gen7_append_oa_reports”†”asbuh1hhj•‚ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj•‚ubjÜ)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjÈ‚h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj•‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjË�ubj>)�”}”(hŒsize_t *offset”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjä‚h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjá‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j悌modname”NŒ classname”Njùjü)�”}”jÿ]”j ‚Œc.gen7_append_oa_reports”†”asbuh1hhjÝ‚ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÝ‚ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÝ‚ubjÜ)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÝ‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjË�ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj’�h²hh³j¤�h´Múubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjŽ�h²hh³j¤�h´Múubah}”(h]”j‰�ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j¤�h´Múhj‹�h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjp…h²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjl…ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjl…ubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hjŽ…h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj‹…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j�…Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjV…sbŒc.gen7_oa_read”†”asbuh1hhjl…ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjl…ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj¼…h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjl…ubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjÉ…h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjl…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjh…ubj>)�”}”(hŒchar __user *buf”h]”(jn)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjâ…h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjÞ…ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÞ…ubhŒ__user”…”�”}”(hjÞ…h²hh³Nh´Nubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÞ…ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjÞ…ubjÜ)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÞ…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjh…ubj>)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj9†h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj6†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j;†Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jª…Œc.gen7_oa_read”†”asbuh1hhj2†ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj2†ubjÜ)�”}”(hŒcount”h]”hŒcount”…”�”}”(hje†h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj2†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjh…ubj>)�”}”(hŒsize_t *offset”h]”(h)�”}”(hhh]”jÜ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj�†h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj~†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jƒ†Œmodname”NŒ classname”Njùjü)�”}”jÿ]”jª…Œc.gen7_oa_read”†”asbuh1hhjz†ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjz†ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj­†h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjz†ubjÜ)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjº†h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjz†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjh…ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj/…h²hh³jA…h´Mqubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj+…h²hh³jA…h´Mqubah}”(h]”j&…ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jA…h´Mqhj(…h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ,copy status records then buffered OA reports”h]”hŒ,copy status records then buffered OA reports”…”�”}”(hjä†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mqhjá†h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj(…h²hh³jA…h´Mqubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójü†jôjü†jõ‰jö‰j÷‰uh1jÇh²hhj»kh³Nh´Nubjù)�”}”(hX¤**Parameters** ``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ``char __user *buf`` destination buffer given by userspace ``size_t count`` the number of bytes userspace wants to read ``size_t *offset`` (inout): the current position for writing into **buf** **Description** Checks Gen 7 specific OA unit status registers and if necessary appends corresponding status records for userspace (such as for a buffer full condition) and then initiate appending any buffered OA reports. Updates **offset** according to the number of bytes successfully copied into the userspace buffer. **Return** zero on success or a negative error code”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj‡h]”hŒ Parameters”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Muhj‡ubj)�”}”(hhh]”(j)�”}”(hŒN``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hj%‡h]”hŒstruct i915_perf_stream *stream”…”�”}”(hj'‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj#‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mrhj‡ubj@)�”}”(hhh]”hÚ)�”}”(hŒ)An i915-perf stream opened for OA metrics”h]”hŒ)An i915-perf stream opened for OA metrics”…”�”}”(hj>‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j:‡h´Mrhj;‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:‡h´Mrhj‡ubj)�”}”(hŒ;``char __user *buf`` destination buffer given by userspace ”h]”(j$)�”}”(hŒ``char __user *buf``”h]”j*)�”}”(hj^‡h]”hŒchar __user *buf”…”�”}”(hj`‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj\‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MshjX‡ubj@)�”}”(hhh]”hÚ)�”}”(hŒ%destination buffer given by userspace”h]”hŒ%destination buffer given by userspace”…”�”}”(hjw‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³js‡h´Mshjt‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjX‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³js‡h´Mshj‡ubj)�”}”(hŒ=``size_t count`` the number of bytes userspace wants to read ”h]”(j$)�”}”(hŒ``size_t count``”h]”j*)�”}”(hj—‡h]”hŒ size_t count”…”�”}”(hj™‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj•‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mthj‘‡ubj@)�”}”(hhh]”hÚ)�”}”(hŒ+the number of bytes userspace wants to read”h]”hŒ+the number of bytes userspace wants to read”…”�”}”(hj°‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¬‡h´Mthj­‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj‘‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¬‡h´Mthj‡ubj)�”}”(hŒJ``size_t *offset`` (inout): the current position for writing into **buf** ”h]”(j$)�”}”(hŒ``size_t *offset``”h]”j*)�”}”(hjЇh]”hŒsize_t *offset”…”�”}”(hjÒ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Muhjʇubj@)�”}”(hhh]”hÚ)�”}”(hŒ6(inout): the current position for writing into **buf**”h]”(hŒ/(inout): the current position for writing into ”…”�”}”(hjé‡h²hh³Nh´Nubj)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjñ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjé‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jå‡h´Muhjæ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjʇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jå‡h´Muhj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjˆh]”hŒ Description”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mwhj‡ubhÚ)�”}”(hŒÍChecks Gen 7 specific OA unit status registers and if necessary appends corresponding status records for userspace (such as for a buffer full condition) and then initiate appending any buffered OA reports.”h]”hŒÍChecks Gen 7 specific OA unit status registers and if necessary appends corresponding status records for userspace (such as for a buffer full condition) and then initiate appending any buffered OA reports.”…”�”}”(hj/ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mvhj‡ubhÚ)�”}”(hŒbUpdates **offset** according to the number of bytes successfully copied into the userspace buffer.”h]”(hŒUpdates ”…”�”}”(hj>ˆh²hh³Nh´Nubj)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hjFˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>ˆubhŒP according to the number of bytes successfully copied into the userspace buffer.”…”�”}”(hj>ˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mzhj‡ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjaˆh]”hŒReturn”…”�”}”(hjcˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M}hj‡ubhÚ)�”}”(hŒ(zero on success or a negative error code”h]”hŒ(zero on success or a negative error code”…”�”}”(hjwˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M~hj‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj»kh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ!oa_get_render_ctx_id (C function)”Œc.oa_get_render_ctx_id”hNt”auh1j¶hj»kh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ:int oa_get_render_ctx_id (struct i915_perf_stream *stream)”h]”jÓ)�”}”(hŒ9int oa_get_render_ctx_id(struct i915_perf_stream *stream)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hj¦ˆh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj¢ˆh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Míubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj¢ˆh²hh³j´ˆh´Míubj)�”}”(hŒoa_get_render_ctx_id”h]”jÜ)�”}”(hŒoa_get_render_ctx_id”h]”hŒoa_get_render_ctx_id”…”�”}”(hjLjh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjÈubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj¢ˆh²hh³j´ˆh´Míubj8)�”}”(hŒ!(struct i915_perf_stream *stream)”h]”j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hjãˆh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj߈ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj߈ubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjþˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j‰Œmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjɈsbŒc.oa_get_render_ctx_id”†”asbuh1hhj߈ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj߈ubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj/‰h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj߈ubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hj<‰h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj߈ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjÛˆubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj¢ˆh²hh³j´ˆh´Míubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjžˆh²hh³j´ˆh´Míubah}”(h]”j™ˆah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j´ˆh´Míhj›ˆh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒdetermine and hold ctx hw id”h]”hŒdetermine and hold ctx hw id”…”�”}”(hjf‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Míhjc‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhj›ˆh²hh³j´ˆh´Míubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój~‰jôj~‰jõ‰jö‰j÷‰uh1jÇh²hhj»kh³Nh´Nubjù)�”}”(hXg**Parameters** ``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics **Description** Determine the render context hw id, and ensure it remains fixed for the lifetime of the stream. This ensures that we don't have to worry about updating the context ID in OACONTROL on the fly. **Return** zero on success or a negative error code”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjˆ‰h]”hŒ Parameters”…”�”}”(hjЉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mñhj‚‰ubj)�”}”(hhh]”j)�”}”(hŒN``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hj§‰h]”hŒstruct i915_perf_stream *stream”…”�”}”(hj©‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¥‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mîhj¡‰ubj@)�”}”(hhh]”hÚ)�”}”(hŒ)An i915-perf stream opened for OA metrics”h]”hŒ)An i915-perf stream opened for OA metrics”…”�”}”(hjÀ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j¼‰h´Mîhj½‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¡‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼‰h´Mîhjž‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚‰ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjâ‰h]”hŒ Description”…”�”}”(hjä‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjà‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mðhj‚‰ubhÚ)�”}”(hŒ¿Determine the render context hw id, and ensure it remains fixed for the lifetime of the stream. This ensures that we don't have to worry about updating the context ID in OACONTROL on the fly.”h]”hŒÁDetermine the render context hw id, and ensure it remains fixed for the lifetime of the stream. This ensures that we don’t have to worry about updating the context ID in OACONTROL on the fly.”…”�”}”(hjø‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mïhj‚‰ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hj Šh]”hŒReturn”…”�”}”(hj Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Móhj‚‰ubhÚ)�”}”(hŒ(zero on success or a negative error code”h]”hŒ(zero on success or a negative error code”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Môhj‚‰ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj»kh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ!oa_put_render_ctx_id (C function)”Œc.oa_put_render_ctx_id”hNt”auh1j¶hj»kh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ;void oa_put_render_ctx_id (struct i915_perf_stream *stream)”h]”jÓ)�”}”(hŒ:void oa_put_render_ctx_id(struct i915_perf_stream *stream)”h]”(jn)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjNŠh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjJŠh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MJubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]Šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjJŠh²hh³j\Šh´MJubj)�”}”(hŒoa_put_render_ctx_id”h]”jÜ)�”}”(hŒoa_put_render_ctx_id”h]”hŒoa_put_render_ctx_id”…”�”}”(hjoŠh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjkŠubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjJŠh²hh³j\Šh´MJubj8)�”}”(hŒ!(struct i915_perf_stream *stream)”h]”j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj‹Šh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj‡Šubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜Šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj‡Šubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hj©Šh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¦Šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j«ŠŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjqŠsbŒc.oa_put_render_ctx_id”†”asbuh1hhj‡Šubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj‡Šubj’)�”}”(hj•h]”hŒ*”…”�”}”(hj׊h²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj‡ŠubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjäŠh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj‡Šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjƒŠubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjJŠh²hh³j\Šh´MJubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjFŠh²hh³j\Šh´MJubah}”(h]”jAŠah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³j\Šh´MJhjCŠh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ1counterpart to oa_get_render_ctx_id releases hold”h]”hŒ1counterpart to oa_get_render_ctx_id releases hold”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MJhj ‹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjCŠh²hh³j\Šh´MJubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój&‹jôj&‹jõ‰jö‰j÷‰uh1jÇh²hhj»kh³Nh´Nubjù)�”}”(hŒü**Parameters** ``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics **Description** In case anything needed doing to ensure the context HW ID would remain valid for the lifetime of the stream, then that can be undone here.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj0‹h]”hŒ Parameters”…”�”}”(hj2‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MNhj*‹ubj)�”}”(hhh]”j)�”}”(hŒN``struct i915_perf_stream *stream`` An i915-perf stream opened for OA metrics ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hjO‹h]”hŒstruct i915_perf_stream *stream”…”�”}”(hjQ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjM‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MKhjI‹ubj@)�”}”(hhh]”hÚ)�”}”(hŒ)An i915-perf stream opened for OA metrics”h]”hŒ)An i915-perf stream opened for OA metrics”…”�”}”(hjh‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jd‹h´MKhje‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjI‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jd‹h´MKhjF‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*‹ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hjŠ‹h]”hŒ Description”…”�”}”(hjŒ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MMhj*‹ubhÚ)�”}”(hŒŠIn case anything needed doing to ensure the context HW ID would remain valid for the lifetime of the stream, then that can be undone here.”h]”hŒŠIn case anything needed doing to ensure the context HW ID would remain valid for the lifetime of the stream, then that can be undone here.”…”�”}”(hj ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MLhj*‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj»kh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ#i915_perf_ioctl_locked (C function)”Œc.i915_perf_ioctl_locked”hNt”auh1j¶hj»kh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒblong i915_perf_ioctl_locked (struct i915_perf_stream *stream, unsigned int cmd, unsigned long arg)”h]”jÓ)�”}”(hŒalong i915_perf_ioctl_locked(struct i915_perf_stream *stream, unsigned int cmd, unsigned long arg)”h]”(jn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÏ‹h²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjË‹h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M?ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ‹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjË‹h²hh³jÝ‹h´M?ubj)�”}”(hŒi915_perf_ioctl_locked”h]”jÜ)�”}”(hŒi915_perf_ioctl_locked”h]”hŒi915_perf_ioctl_locked”…”�”}”(hjð‹h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjì‹ubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhjË‹h²hh³jÝ‹h´M?ubj8)�”}”(hŒF(struct i915_perf_stream *stream, unsigned int cmd, unsigned long arg)”h]”(j>)�”}”(hŒstruct i915_perf_stream *stream”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj Œh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChjŒubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŒubh)�”}”(hhh]”jÜ)�”}”(hŒi915_perf_stream”h]”hŒi915_perf_stream”…”�”}”(hj*Œh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj'Œubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”j,ŒŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõjò‹sbŒc.i915_perf_ioctl_locked”†”asbuh1hhjŒubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjŒubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjXŒh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hjŒubjÜ)�”}”(hŒstream”h]”hŒstream”…”�”}”(hjeŒh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjŒubj>)�”}”(hŒunsigned int cmd”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj~Œh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjzŒubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjzŒubjn)�”}”(hŒint”h]”hŒint”…”�”}”(hjšŒh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjzŒubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨Œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjzŒubjÜ)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hj¶Œh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjzŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjŒubj>)�”}”(hŒunsigned long arg”h]”(jn)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÏŒh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjËŒubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjËŒubjn)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjëŒh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhjËŒubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjËŒubjÜ)�”}”(hŒarg”h]”hŒarg”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhjËŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hjŒubeh}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hjË‹h²hh³jÝ‹h´M?ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhjÇ‹h²hh³jÝ‹h´M?ubah}”(h]”j‹ah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jÝ‹h´M?hjÄ‹h²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ/support ioctl() usage with i915 perf stream FDs”h]”hŒ/support ioctl() usage with i915 perf stream FDs”…”�”}”(hj1�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M?hj.�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjÄ‹h²hh³jÝ‹h´M?ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójójI�jôjI�jõ‰jö‰j÷‰uh1jÇh²hhj»kh³Nh´Nubjù)�”}”(hX**Parameters** ``struct i915_perf_stream *stream`` An i915 perf stream ``unsigned int cmd`` the ioctl request ``unsigned long arg`` the ioctl data **Return** zero on success or a negative error code. Returns -EINVAL for an unknown ioctl request.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjS�h]”hŒ Parameters”…”�”}”(hjU�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MChjM�ubj)�”}”(hhh]”(j)�”}”(hŒ8``struct i915_perf_stream *stream`` An i915 perf stream ”h]”(j$)�”}”(hŒ#``struct i915_perf_stream *stream``”h]”j*)�”}”(hjr�h]”hŒstruct i915_perf_stream *stream”…”�”}”(hjt�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjp�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M@hjl�ubj@)�”}”(hhh]”hÚ)�”}”(hŒAn i915 perf stream”h]”hŒAn i915 perf stream”…”�”}”(hj‹�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³j‡�h´M@hjˆ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjl�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‡�h´M@hji�ubj)�”}”(hŒ'``unsigned int cmd`` the ioctl request ”h]”(j$)�”}”(hŒ``unsigned int cmd``”h]”j*)�”}”(hj«�h]”hŒunsigned int cmd”…”�”}”(hj­�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj©�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MAhj¥�ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe ioctl request”h]”hŒthe ioctl request”…”�”}”(hjÄ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jÀ�h´MAhjÁ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj¥�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÀ�h´MAhji�ubj)�”}”(hŒ%``unsigned long arg`` the ioctl data ”h]”(j$)�”}”(hŒ``unsigned long arg``”h]”j*)�”}”(hjä�h]”hŒunsigned long arg”…”�”}”(hjæ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjâ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MBhjÞ�ubj@)�”}”(hhh]”hÚ)�”}”(hŒthe ioctl data”h]”hŒthe ioctl data”…”�”}”(hjý�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jù�h´MBhjú�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hjÞ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jù�h´MBhji�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjM�ubhÚ)�”}”(hŒ **Return**”h]”j)�”}”(hjŽh]”hŒReturn”…”�”}”(hj!Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MDhjM�ubhÚ)�”}”(hŒWzero on success or a negative error code. Returns -EINVAL for an unknown ioctl request.”h]”hŒWzero on success or a negative error code. Returns -EINVAL for an unknown ioctl request.”…”�”}”(hj5Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´MDhjM�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj»kh²hh³Nh´Nubj·)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jÃŒ$i915_perf_ioctl_version (C function)”Œc.i915_perf_ioctl_version”hNt”auh1j¶hj»kh²hh³Nh´NubjÈ)�”}”(hhh]”(jÍ)�”}”(hŒ;int i915_perf_ioctl_version (struct drm_i915_private *i915)”h]”jÓ)�”}”(hŒ:int i915_perf_ioctl_version(struct drm_i915_private *i915)”h]”(jn)�”}”(hŒint”h]”hŒint”…”�”}”(hjdŽh²hh³Nh´Nubah}”(h]”h ]”jzah"]”h$]”h&]”uh1jmhj`Žh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M_ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj`Žh²hh³jrŽh´M_ubj)�”}”(hŒi915_perf_ioctl_version”h]”jÜ)�”}”(hŒi915_perf_ioctl_version”h]”hŒi915_perf_ioctl_version”…”�”}”(hj…Žh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�Žubah}”(h]”h ]”(j0j1eh"]”h$]”h&]”j5j6uh1jhj`Žh²hh³jrŽh´M_ubj8)�”}”(hŒ(struct drm_i915_private *i915)”h]”j>)�”}”(hŒstruct drm_i915_private *i915”h]”(jD)�”}”(hjGh]”hŒstruct”…”�”}”(hj¡Žh²hh³Nh´Nubah}”(h]”h ]”jPah"]”h$]”h&]”uh1jChj�Žubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®Žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj�Žubh)�”}”(hhh]”jÜ)�”}”(hŒdrm_i915_private”h]”hŒdrm_i915_private”…”�”}”(hj¿Žh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj¼Žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jóŒreftype”jõŒ reftarget”jÁŽŒmodname”NŒ classname”Njùjü)�”}”jÿ]”j)�”}”jõj‡ŽsbŒc.i915_perf_ioctl_version”†”asbuh1hhj�Žubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjߎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj�Žubj’)�”}”(hj•h]”hŒ*”…”�”}”(hjíŽh²hh³Nh´Nubah}”(h]”h ]”jžah"]”h$]”h&]”uh1j‘hj�ŽubjÜ)�”}”(hŒi915”h]”hŒi915”…”�”}”(hjúŽh²hh³Nh´Nubah}”(h]”h ]”jèah"]”h$]”h&]”uh1jÛhj�Žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj5j6uh1j=hj™Žubah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j7hj`Žh²hh³jrŽh´M_ubeh}”(h]”h ]”h"]”h$]”h&]”j5j6jÈuh1jÒjÄjÅhj\Žh²hh³jrŽh´M_ubah}”(h]”jWŽah ]”(jÉjÊeh"]”h$]”h&]”jΈjÏ)jÐhuh1jÌh³jrŽh´M_hjYŽh²hubjÒ)�”}”(hhh]”hÚ)�”}”(hŒ"Version of the i915-perf subsystem”h]”hŒ"Version of the i915-perf subsystem”…”�”}”(hj$�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M_hj!�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÑhjYŽh²hh³jrŽh´M_ubeh}”(h]”h ]”(jóŒfunction”eh"]”h$]”h&]”jòjójój<�jôj<�jõ‰jö‰j÷‰uh1jÇh²hhj»kh³Nh´Nubjù)�”}”(hŒœ**Parameters** ``struct drm_i915_private *i915`` The i915 device **Description** This version number is used by userspace to detect available features.”h]”(hÚ)�”}”(hŒ**Parameters**”h]”j)�”}”(hjF�h]”hŒ Parameters”…”�”}”(hjH�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mchj@�ubj)�”}”(hhh]”j)�”}”(hŒ2``struct drm_i915_private *i915`` The i915 device ”h]”(j$)�”}”(hŒ!``struct drm_i915_private *i915``”h]”j*)�”}”(hje�h]”hŒstruct drm_i915_private *i915”…”�”}”(hjg�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjc�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j#h³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´M`hj_�ubj@)�”}”(hhh]”hÚ)�”}”(hŒThe i915 device”h]”hŒThe i915 device”…”�”}”(hj~�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³jz�h´M`hj{�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j?hj_�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jz�h´M`hj\�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@�ubhÚ)�”}”(hŒ**Description**”h]”j)�”}”(hj �h]”hŒ Description”…”�”}”(hj¢�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjž�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mbhj@�ubhÚ)�”}”(hŒFThis version number is used by userspace to detect available features.”h]”hŒFThis version number is used by userspace to detect available features.”…”�”}”(hj¶�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒZ/var/lib/git/docbuild/linux/Documentation/gpu/i915:495: ./drivers/gpu/drm/i915/i915_perf.c”h´Mahj@�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jøhj»kh²hh³Nh´Nubeh}”(h]”Œother-i915-perf-internals”ah ]”h"]”Œother i915 perf internals”ah$]”h&]”uh1hÄhjå#h²hh³hÃh´Méubeh}”(h]”Œperf”ah ]”h"]”Œperf”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´M”ubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒStyle”h]”hŒStyle”…”�”}”(hjß�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjÜ�h²hh³hÃh´MubhÚ)�”}”(hŒ~The drm/i915 driver codebase has some style rules in addition to (and, in some cases, deviating from) the kernel coding style.”h]”hŒ~The drm/i915 driver codebase has some style rules in addition to (and, in some cases, deviating from) the kernel coding style.”…”�”}”(hjí�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´M hjÜ�h²hubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒRegister macro definition style”h]”hŒRegister macro definition style”…”�”}”(hjþ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjû�h²hh³hÃh´MubhÚ)�”}”(hŒ#The style guide for ``i915_reg.h``.”h]”(hŒThe style guide for ”…”�”}”(hj �h²hh³Nh´Nubj*)�”}”(hŒ``i915_reg.h``”h]”hŒ i915_reg.h”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj �ubhŒ.”…”�”}”(hj �h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Mhjû�h²hubhÚ)�”}”(hŒ™Follow the style described here for new macros, and while changing existing macros. Do **not** mass change existing definitions just to update the style.”h]”(hŒWFollow the style described here for new macros, and while changing existing macros. Do ”…”�”}”(hj,�h²hh³Nh´Nubj)�”}”(hŒ**not**”h]”hŒnot”…”�”}”(hj4�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,�ubhŒ; mass change existing definitions just to update the style.”…”�”}”(hj,�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´K hjû�h²hubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ File Layout”h]”hŒ File Layout”…”�”}”(hjP�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjM�h³Nh´NubhÚ)�”}”(hŒBKeep helper macros near the top. For example, _PIPE() and friends.”h]”hŒBKeep helper macros near the top. For example, _PIPE() and friends.”…”�”}”(hj^�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´K&hjM�ubhÚ)�”}”(hŒÖPrefix macros that generally should not be used outside of this file with underscore '_'. For example, _PIPE() and friends, single instances of registers that are defined solely for the use by function-like macros.”h]”hŒÚPrefix macros that generally should not be used outside of this file with underscore ‘_’. For example, _PIPE() and friends, single instances of registers that are defined solely for the use by function-like macros.”…”�”}”(hjm�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´K(hjM�ubhÚ)�”}”(hŒrAvoid using the underscore prefixed macros outside of this file. There are exceptions, but keep them to a minimum.”h]”hŒrAvoid using the underscore prefixed macros outside of this file. There are exceptions, but keep them to a minimum.”…”�”}”(hj|�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´K,hjM�ubhÚ)�”}”(hXThere are two basic types of register definitions: Single registers and register groups. Register groups are registers which have two or more instances, for example one per pipe, port, transcoder, etc. Register groups should be defined using function-like macros.”h]”hXThere are two basic types of register definitions: Single registers and register groups. Register groups are registers which have two or more instances, for example one per pipe, port, transcoder, etc. Register groups should be defined using function-like macros.”…”�”}”(hj‹�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´K/hjM�ubhÚ)�”}”(hŒVFor single registers, define the register offset first, followed by register contents.”h]”hŒVFor single registers, define the register offset first, followed by register contents.”…”�”}”(hjš�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´K4hjM�ubhÚ)�”}”(hŒÏFor register groups, define the register instance offsets first, prefixed with underscore, followed by a function-like macro choosing the right instance based on the parameter, followed by register contents.”h]”hŒÏFor register groups, define the register instance offsets first, prefixed with underscore, followed by a function-like macro choosing the right instance based on the parameter, followed by register contents.”…”�”}”(hj©�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´K7hjM�ubhÚ)�”}”(hŒÎDefine the register contents (i.e. bit and bit field macros) from most significant to least significant bit. Indent the register content macros using two extra spaces between ``#define`` and the macro name.”h]”(hŒ¯Define the register contents (i.e. bit and bit field macros) from most significant to least significant bit. Indent the register content macros using two extra spaces between ”…”�”}”(hj¸�h²hh³Nh´Nubj*)�”}”(hŒ ``#define``”h]”hŒ#define”…”�”}”(hjÀ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¸�ubhŒ and the macro name.”…”�”}”(hj¸�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´K;hjM�ubhÚ)�”}”(hXnDefine bit fields using ``REG_GENMASK(h, l)``. Define bit field contents using ``REG_FIELD_PREP(mask, value)``. This will define the values already shifted in place, so they can be directly OR'd together. For convenience, function-like macros may be used to define bit fields, but do note that the macros may be needed to read as well as write the register contents.”h]”(hŒDefine bit fields using ”…”�”}”(hjÙ�h²hh³Nh´Nubj*)�”}”(hŒ``REG_GENMASK(h, l)``”h]”hŒREG_GENMASK(h, l)”…”�”}”(hjá�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÙ�ubhŒ". Define bit field contents using ”…”�”}”(hjÙ�h²hh³Nh´Nubj*)�”}”(hŒ``REG_FIELD_PREP(mask, value)``”h]”hŒREG_FIELD_PREP(mask, value)”…”�”}”(hjó�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÙ�ubhX. This will define the values already shifted in place, so they can be directly OR’d together. For convenience, function-like macros may be used to define bit fields, but do note that the macros may be needed to read as well as write the register contents.”…”�”}”(hjÙ�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´K?hjM�ubhÚ)�”}”(hŒMDefine bits using ``REG_BIT(N)``. Do **not** add ``_BIT`` suffix to the name.”h]”(hŒDefine bits using ”…”�”}”(hj ‘h²hh³Nh´Nubj*)�”}”(hŒ``REG_BIT(N)``”h]”hŒ REG_BIT(N)”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj ‘ubhŒ. Do ”…”�”}”(hj ‘h²hh³Nh´Nubj)�”}”(hŒ**not**”h]”hŒnot”…”�”}”(hj&‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ‘ubhŒ add ”…”�”}”(hj ‘h²hh³Nh´Nubj*)�”}”(hŒ``_BIT``”h]”hŒ_BIT”…”�”}”(hj8‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj ‘ubhŒ suffix to the name.”…”�”}”(hj ‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´KEhjM�ubhÚ)�”}”(hŒ‡Group the register and its contents together without blank lines, separate from other registers and their contents with one blank line.”h]”hŒ‡Group the register and its contents together without blank lines, separate from other registers and their contents with one blank line.”…”�”}”(hjQ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´KGhjM�ubhÚ)�”}”(hX Indent macro values from macro names using TABs. Align values vertically. Use braces in macro values as needed to avoid unintended precedence after macro substitution. Use spaces in macro values according to kernel coding style. Use lower case in hexadecimal values.”h]”hX Indent macro values from macro names using TABs. Align values vertically. Use braces in macro values as needed to avoid unintended precedence after macro substitution. Use spaces in macro values according to kernel coding style. Use lower case in hexadecimal values.”…”�”}”(hj`‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´KJhjM�ubeh}”(h]”Œ file-layout”ah ]”h"]”Œ file layout”ah$]”h&]”uh1hÄhjû�h²hh³Nh´NubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒNaming”h]”hŒNaming”…”�”}”(hjz‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjw‘h³Nh´NubhÚ)�”}”(hŒ�Try to name registers according to the specs. If the register name changes in the specs from platform to another, stick to the original name.”h]”hŒ�Try to name registers according to the specs. If the register name changes in the specs from platform to another, stick to the original name.”…”�”}”(hjˆ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´KRhjw‘ubhÚ)�”}”(hŒ±Try to reuse existing register macro definitions. Only add new macros for new register offsets, or when the register contents have changed enough to warrant a full redefinition.”h]”hŒ±Try to reuse existing register macro definitions. Only add new macros for new register offsets, or when the register contents have changed enough to warrant a full redefinition.”…”�”}”(hj—‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´KUhjw‘ubhÚ)�”}”(hŒÛWhen a register macro changes for a new platform, prefix the new macro using the platform acronym or generation. For example, ``SKL_`` or ``GEN8_``. The prefix signifies the start platform/generation using the register.”h]”(hŒ~When a register macro changes for a new platform, prefix the new macro using the platform acronym or generation. For example, ”…”�”}”(hj¦‘h²hh³Nh´Nubj*)�”}”(hŒ``SKL_``”h]”hŒSKL_”…”�”}”(hj®‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¦‘ubhŒ or ”…”�”}”(hj¦‘h²hh³Nh´Nubj*)�”}”(hŒ ``GEN8_``”h]”hŒGEN8_”…”�”}”(hjÀ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hj¦‘ubhŒH. The prefix signifies the start platform/generation using the register.”…”�”}”(hj¦‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´KYhjw‘ubhÚ)�”}”(hŒÌWhen a bit (field) macro changes or gets added for a new platform, while retaining the existing register macro, add a platform acronym or generation suffix to the name. For example, ``_SKL`` or ``_GEN8``.”•¡Zh]”(hŒ¶When a bit (field) macro changes or gets added for a new platform, while retaining the existing register macro, add a platform acronym or generation suffix to the name. For example, ”…”�”}”(hjÙ‘h²hh³Nh´Nubj*)�”}”(hŒ``_SKL``”h]”hŒ_SKL”…”�”}”(hjá‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÙ‘ubhŒ or ”…”�”}”(hjÙ‘h²hh³Nh´Nubj*)�”}”(hŒ ``_GEN8``”h]”hŒ_GEN8”…”�”}”(hjó‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j)hjÙ‘ubhŒ.”…”�”}”(hjÙ‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´K]hjw‘ubeh}”(h]”Œnaming”ah ]”h"]”Œnaming”ah$]”h&]”uh1hÄhjû�h²hh³Nh´NubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒExamples”h]”hŒExamples”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj’h³Nh´NubhÚ)�”}”(hŒ (Note that the values in the example are indented using spaces instead of TABs to avoid misalignment in generated documentation. Use TABs in the definitions.)::”h]”hŒŸ(Note that the values in the example are indented using spaces instead of TABs to avoid misalignment in generated documentation. Use TABs in the definitions.):”…”�”}”(hj%’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´Kdhj’ubjA#)�”}”(hX6#define _FOO_A 0xf000 #define _FOO_B 0xf001 #define FOO(pipe) _MMIO_PIPE(pipe, _FOO_A, _FOO_B) #define FOO_ENABLE REG_BIT(31) #define FOO_MODE_MASK REG_GENMASK(19, 16) #define FOO_MODE_BAR REG_FIELD_PREP(FOO_MODE_MASK, 0) #define FOO_MODE_BAZ REG_FIELD_PREP(FOO_MODE_MASK, 1) #define FOO_MODE_QUX_SNB REG_FIELD_PREP(FOO_MODE_MASK, 2) #define BAR _MMIO(0xb000) #define GEN8_BAR _MMIO(0xb888)”h]”hX6#define _FOO_A 0xf000 #define _FOO_B 0xf001 #define FOO(pipe) _MMIO_PIPE(pipe, _FOO_A, _FOO_B) #define FOO_ENABLE REG_BIT(31) #define FOO_MODE_MASK REG_GENMASK(19, 16) #define FOO_MODE_BAR REG_FIELD_PREP(FOO_MODE_MASK, 0) #define FOO_MODE_BAZ REG_FIELD_PREP(FOO_MODE_MASK, 1) #define FOO_MODE_QUX_SNB REG_FIELD_PREP(FOO_MODE_MASK, 2) #define BAR _MMIO(0xb000) #define GEN8_BAR _MMIO(0xb888)”…”�”}”hj4’sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³ŒY/var/lib/git/docbuild/linux/Documentation/gpu/i915:530: ./drivers/gpu/drm/i915/i915_reg.h”h´Khhj’ubeh}”(h]”Œexamples”ah ]”h"]”Œexamples”ah$]”h&]”uh1hÄhjû�h²hh³Nh´Nubh¶)�”}”(hŒ.. _i915-usage-stats:”h]”h}”(h]”h ]”h"]”h$]”h&]”hÁŒi915-usage-stats”uh1hµh´Mhjû�h²hh³hÃubeh}”(h]”Œregister-macro-definition-style”ah ]”h"]”Œregister macro definition style”ah$]”h&]”uh1hÄhjÜ�h²hh³hÃh´Mubeh}”(h]”Œstyle”ah ]”h"]”Œstyle”ah$]”h&]”uh1hÄhhÆh²hh³hÃh´MubhÅ)�”}”(hhh]”(hÊ)�”}”(hŒ*i915 DRM client usage stats implementation”h]”hŒ*i915 DRM client usage stats implementation”…”�”}”(hji’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjf’h²hh³hÃh´MubhÚ)�”}”(hŒwThe drm/i915 driver implements the DRM client usage stats specification as documented in :ref:`drm-client-usage-stats`.”h]”(hŒYThe drm/i915 driver implements the DRM client usage stats specification as documented in ”…”�”}”(hjw’h²hh³Nh´Nubh)�”}”(hŒ:ref:`drm-client-usage-stats`”h]”hö)�”}”(hj�’h]”hŒdrm-client-usage-stats”…”�”}”(hjƒ’h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1hõhj’ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j�’Œreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒdrm-client-usage-stats”uh1hh³hÃh´Mhjw’ubhŒ.”…”�”}”(hjw’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Mhjf’h²hubhÚ)�”}”(hŒtExample of the output showing the implemented key value pairs and entirety of the currently possible format options:”h]”hŒtExample of the output showing the implemented key value pairs and entirety of the currently possible format options:”…”�”}”(hj©’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´Mhjf’h²hubjA#)�”}”(hXpos: 0 flags: 0100002 mnt_id: 21 drm-driver: i915 drm-pdev: 0000:00:02.0 drm-client-id: 7 drm-engine-render: 9288864723 ns drm-engine-copy: 2035071108 ns drm-engine-video: 0 ns drm-engine-capacity-video: 2 drm-engine-video-enhance: 0 ns”h]”hXpos: 0 flags: 0100002 mnt_id: 21 drm-driver: i915 drm-pdev: 0000:00:02.0 drm-client-id: 7 drm-engine-render: 9288864723 ns drm-engine-copy: 2035071108 ns drm-engine-video: 0 ns drm-engine-capacity-video: 2 drm-engine-video-enhance: 0 ns”…”�”}”hj·’sbah}”(h]”h ]”h"]”h$]”h&]”j5j6uh1j@#h³hÃh´M"hjf’h²hubhÚ)�”}”(hŒTPossible `drm-engine-` key names are: `render`, `copy`, `video` and `video-enhance`.”h]”(hŒ Possible ”…”�”}”(hjÅ’h²hh³Nh´Nubjc)�”}”(hŒ `drm-engine-`”h]”hŒ drm-engine-”…”�”}”(hjÍ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjÅ’ubhŒ key names are: ”…”�”}”(hjÅ’h²hh³Nh´Nubjc)�”}”(hŒ`render`”h]”hŒrender”…”�”}”(hjß’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjÅ’ubhŒ, ”…”�”}”(hjÅ’h²hh³Nh´Nubjc)�”}”(hŒ`copy`”h]”hŒcopy”…”�”}”(hjñ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjÅ’ubhŒ, ”…”�”}”hjÅ’sbjc)�”}”(hŒ`video`”h]”hŒvideo”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjÅ’ubhŒ and ”…”�”}”(hjÅ’h²hh³Nh´Nubjc)�”}”(hŒ`video-enhance`”h]”hŒ video-enhance”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j chjÅ’ubhŒ.”…”�”}”(hjÅ’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÙh³hÃh´M.hjf’h²hubeh}”(h]”(Œ*i915-drm-client-usage-stats-implementation”jU’eh ]”h"]”(Œ*i915 drm client usage stats implementation”Œi915-usage-stats”eh$]”h&]”uh1hÄhhÆh²hh³hÃh´Mj î}”j3“jK’sj¢î}”jU’jK’subeh}”(h]”(Œdrm-i915-intel-gfx-driver”hÂeh ]”h"]”(Œdrm/i915 intel gfx driver”Œdrm/i915”eh$]”h&]”uh1hÄhhh²hh³hÃh´Kj î}”j>“h·sj¢î}”hÂh·subeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÃuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÉNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”jëîŒfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”je“Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÃŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”(Œ1”]”j&;aŒ(gem bo management implementation details”]”jEcaŒ hxg request”]”(jÚòj;öj^öj¸öj'øjoøjÀøj;üj$þjZjhjÃj3eŒ hxg response”]”(jýòjTeŒ hxg failure”]”(jój�öjFeŒ hxg retry”]”(j'ójþeŒhxg busy”]”(j<ój'üeŒguc_hxg_type_request”]”(j‡ôjijÅeŒhxg fast request”]”j¤öaŒ hxg message”]”(j—÷jŠjVjdeŒguc_hxg_type_fast_request”]”jß÷aŒ hxg event”]”j*ùaŒguc_hxg_type_event”]”jtúaŒguc_hxg_type_no_response_busy”]”jaýaŒguc_hxg_type_no_response_retry”]”jJÿaŒguc_hxg_type_response_failure”]”j_aŒguc_hxg_type_response_success”]”(jmjÙjCeŒctb based communication”]”(j@jµeŒ ctb message”]”j&aŒ ct buffer”]”(j#j“j�j®jrjÔj˜eŒctb hxg message”]”jô aŒguc_ctb_format_hxg”]”j–aŒguc self config klvs”]”(j0jZj¹eŒmmio hxg message”]”(jTj°eŒguc_hxg_origin_host”]”(j!j}eŒguc_hxg_origin_guc”]”(j‘jûeŒguc klv”]”j?aŒhost2guc_self_cfg”]”jSaŒctb descriptor”]”(jj6eŒguc firmware layout”]”jõ"auŒrefids”}”(hÂ]”h·aj…î]”j{îaj¶ò]”j¬òajö]”j öajù]”jüøajLó]”júûaj7ó]”jãýaj"ó]”jaj ó]”j'ajß]”jÕajf]”j\aj]”jøajH]”j>aj6]”j› aj ]”j‡ ajP]”jaj ]”jaji]”j_ajÁ]”j·aj@]”jajU’]”jK’auŒnameids”}”(j>“hÂj=“j:“j5<j2<jì+jé+j—0j”0j–5j“5jŒ:j‰:j-<j*<j%<j5;j+bj(bj#bj bj¾Õj»Õj“cj�cj¼dj¹djòdjUcjëpjèpjâ~jß~jňjˆjb j_ j3¥j0¥jȦjŦj®´j«´j·Ãj´ÃjÃjÃj¯Ãj¬Ãj@Ðj=Ðj¶Õj³Õjk#jh#j<Öj9Öj4Öj1ÖjÒjÏjéjÿèj¬ëj©ëj|íjyíjgîjdîjÊjÇjœîj…îjªïj§ïjÓïjÐïjfðjcðjŽðj‹ðj¶ðj³ðjÞðjÛðjñjñj.ñj+ñjUñjRñjÌòj¶òj-öjöjùjùjüjLójþj7ójÇÿjÄÿj8j"ójFj ójöjßj|jfjjj^jHj% j" jM jJ ju jr j� jš jÅ j jº j6jí jê j¦ j j%jPj"j jöjójjijRjOjæjãjj j×jÁj5j@j†jƒjêjçjLjIj®j«jj jrjoj#j#jÙ"jÖ"j#j #jc#j`#jâ#jß#j²#j¯#jÚ#j×#jÙ�jÖ�jH$jE$jå%jâ%jÝ%jÚ%j87j57j^Zj[Zj¸kjµkjÑ�jÎ�jc’j`’j[’jX’jt‘jq‘j’j’jH’jE’j3“jU’j2“j/“uŒ nametypes”}”(j>“ˆj=“‰j5<‰jì+‰j—0‰j–5‰jŒ:‰j-<‰j%<ˆj+b‰j#b‰j¾Õ‰j“c‰j¼d‰jòd‰jëp‰jâ~‰jň‰jb ‰j3¥‰jȦ‰j®´‰j·Ã‰jÉj¯Ã‰j@Љj¶Õ‰jk#‰j<Ö‰j4Ö‰jÒ‰jé‰j¬ë‰j|í‰jgî‰jʉjœîˆjªïˆjÓïˆjfðˆjŽðˆj¶ðˆjÞðˆjñˆj.ñˆjUñˆjÌòˆj-öˆjùˆjüˆjþˆjÇÿˆj8ˆjFˆjöˆj|ˆjˆj^ˆj% ˆjM ˆju ˆj� ˆjÅ ˆjº ˆjí ˆj¦ ˆj%ˆj"ˆjöˆjˆjRˆjæˆjˆj׈j5ˆj†ˆjêˆjLˆj®ˆjˆjrˆj#‰jÙ"‰j#‰jc#‰jâ#‰j²#‰jÚ#‰jÙ�‰jH$‰jå%‰jÝ%‰j87‰j^Z‰j¸k‰jÑ�‰jc’‰j[’‰jt‘‰j’‰jH’‰j3“ˆj2“‰uh}”(hÂhÆj:“hÆj2<jhjé+j‡jÅjÎjÔjÙjžj£jújÿjÓ jØ jÕ jÚ je jj jgjlj÷jüj'j,j¨j­j)j.jFjKjcjhjZj_jwj|jß#jä#j)j)j”0jï+j,j ,jœ-j¡-j/j"/j“5jš0jÕ0jÚ0jV2j[2j×3jÜ3j‰:j™5jé5jî5j‘7j–7j9j9j*<j�:j0;j&;j5;jþ;j(bj8<j bjI<j“<j˜<jæ>jë>jAjAj™BjžBj±Ej¶Ej7IjjÊ>jÎAjÓAj6Ej;EjSIjXIj0Kj5Kj¹Nj¾NjuQjzQjSjSjàTjåTjPWjUWjµkjaZj~ZjƒZjd]ji]jŠ`j�`jdjdj¥ejªej8gj=gjij ijÎ�j»kjækjëkj¸oj½ojÀqjÅqjóujøujXzj]zjõ}jú}j‰�jŽ�j&…j+…j™ˆjžˆjAŠjFŠj‹jÇ‹jWŽj\Žj`’jÜ�jX’jû�jq‘jM�j’jw‘jE’j’jU’jf’j/“jf’uŒ footnote_refs”}”j¥“]”j&;asŒ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”jþ;aŒ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”js“Ks…”R”Œparse_messages”]”(hŒsystem_message”“”)�”}”(hhh]”hÚ)�”}”(hŒeUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.”h]”hŒgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj”ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œline”K$Œsource”Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”uh1j”hj5òubj”)�”}”(hhh]”hÚ)�”}”(hŒeUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.”h]”hŒgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.”…”�”}”(hj;”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj8”ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œline”KRŒsource”Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”uh1j”hj–õubj”)�”}”(hhh]”hÚ)�”}”(hŒeUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.”h]”hŒgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.”…”�”}”(hjW”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhjT”ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œline”KuŒsource”Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”uh1j”hj”øubj”)�”}”(hhh]”hÚ)�”}”(hŒeUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.”h]”hŒgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.”…”�”}”(hjs”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhjp”ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œline”KŽŒsource”Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”uh1j”hjƒûubj”)�”}”(hhh]”hÚ)�”}”(hŒeUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.”h]”hŒgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.”…”�”}”(hj�”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhjŒ”ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œline”KðŒsource”Œk/var/lib/git/docbuild/linux/Documentation/gpu/i915:358: ./drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h”uh1j”hj^ubj”)�”}”(hhh]”hÚ)�”}”(hŒeUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.”h]”hŒgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.”…”�”}”(hj«”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj¨”ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œline”K*Œsource”Œu/var/lib/git/docbuild/linux/Documentation/gpu/i915:359: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h”uh1j”hj�ubj”)�”}”(hhh]”hÚ)�”}”(hŒeUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.”h]”hŒgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.”…”�”}”(hjÇ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhjÄ”ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œline”K)Œsource”Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”uh1j”hjô ubj”)�”}”(hhh]”hÚ)�”}”(hŒeUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.”h]”hŒgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.”…”�”}”(hjã”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhjà”ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œline”KMŒsource”Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”uh1j”hj ubj”)�”}”(hhh]”hÚ)�”}”(hŒeUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.”h]”hŒgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.”…”�”}”(hjÿ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhjü”ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œline”KlŒsource”Œt/var/lib/git/docbuild/linux/Documentation/gpu/i915:360: ./drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h”uh1j”hj�ubj”)�”}”(hhh]”hÚ)�”}”(hŒeUnexpected possible title overline or transition. Treating it as ordinary text because it's so short.”h]”hŒgUnexpected possible title overline or transition. Treating it as ordinary text because it’s so short.”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj•ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œline”KŒsource”Œg/var/lib/git/docbuild/linux/Documentation/gpu/i915:362: ./drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h”uh1j”hjžubeŒtransform_messages”]”(j”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒ.Hyperlink target "drm-i915" is not referenced.”…”�”}”hj9•sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj6•ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œsource”hÃŒline”Kuh1j”ubj”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒFHyperlink target "guc_hxg_retry_reason_unspecified" is not referenced.”…”�”}”hjS•sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhjP•ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œsource”jÔÿŒline”K¿uh1j”ubj”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒBHyperlink target "guc-mmio-based-communication" is not referenced.”…”�”}”hjm•sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhjj•ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œsource”jàŒline”Kuh1j”ubj”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒ=Hyperlink target "guc_ctb_status_no_error" is not referenced.”…”�”}”hj‡•sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj„•ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œsource”j2 Œline”K"uh1j”ubj”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒ=Hyperlink target "guc_ctb_status_overflow" is not referenced.”…”�”}”hj¡•sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhjž•ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œsource”jZ Œline”K#uh1j”ubj”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒ>Hyperlink target "guc_ctb_status_underflow" is not referenced.”…”�”}”hj»•sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj¸•ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œsource”j‚ Œline”K$uh1j”ubj”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒ=Hyperlink target "guc_ctb_status_mismatch" is not referenced.”…”�”}”hjÕ•sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhjÒ•ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œsource”jª Œline”K%uh1j”ubj”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒ;Hyperlink target "guc_ctb_status_unused" is not referenced.”…”�”}”hjï•sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhjì•ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œsource”jÒ Œline”K&uh1j”ubj”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒBHyperlink target "guc_action_host2guc_self_cfg" is not referenced.”…”�”}”hj –sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj–ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œsource”j׌line”Kuh1j”ubj”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒ:Hyperlink target "host2guc-control-ctb" is not referenced.”…”�”}”hj#–sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj –ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œsource”j Œline”K+uh1j”ubj”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒEHyperlink target "guc_action_host2guc_control_ctb" is not referenced.”…”�”}”hj=–sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj:–ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œsource”j3Œline”KKuh1j”ubj”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒ=Hyperlink target "guc_ctb_control_disable" is not referenced.”…”�”}”hjW–sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhjT–ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œsource”jóŒline”KOuh1j”ubj”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒuh1j”ubj”)�”}”(hhh]”hÚ)�”}”(hhh]”hŒ6Hyperlink target "i915-usage-stats" is not referenced.”…”�”}”hj'—sbah}”(h]”h ]”h"]”h$]”h&]”uh1hÙhj$—ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j4”Œsource”hÃŒline”Muh1j”ubeŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.