€•Œ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/driver-api/generic_pt”Œ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/driver-api/generic_pt”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/it_IT/driver-api/generic_pt”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ja_JP/driver-api/generic_pt”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ko_KR/driver-api/generic_pt”Œ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/driver-api/generic_pt”Œ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/driver-api/generic_pt”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒC/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒGeneric Radix Page Table”h]”hŒGeneric Radix Page Table”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hX,Generic Radix Page Table is a set of functions and helpers to efficiently parse radix style page tables typically seen in HW implementations. The interface is built to deliver similar code generation as the mm's pte/pmd/etc system by fully inlining the exact code required to handle each table level.”h]”hX.Generic Radix Page Table is a set of functions and helpers to efficiently parse radix style page tables typically seen in HW implementations. The interface is built to deliver similar code generation as the mm’s pte/pmd/etc system by fully inlining the exact code required to handle each table level.”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´K hhÊh²hubhÞ)�”}”(hŒ“Like the mm subsystem each format contributes its parsing implementation under common names and the common code implements the required algorithms.”h]”hŒ“Like the mm subsystem each format contributes its parsing implementation under common names and the common code implements the required algorithms.”…”�”}”(hhîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´KhhÊh²hubhÞ)�”}”(hŒ0The system is divided into three logical levels:”h]”hŒ0The system is divided into three logical levels:”…”�”}”(hhýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´KhhÊh²hubhŒ block_quote”“”)�”}”(hŒ¸- The page table format and its manipulation functions - Generic helpers to give a consistent API regardless of underlying format - An algorithm implementation (e.g. IOMMU/DRM/KVM/MM) ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ4The page table format and its manipulation functions”h]”hÞ)�”}”(hjh]”hŒ4The page table format and its manipulation functions”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒHGeneric helpers to give a consistent API regardless of underlying format”h]”hÞ)�”}”(hj3h]”hŒHGeneric helpers to give a consistent API regardless of underlying format”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´Khj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒ4An algorithm implementation (e.g. IOMMU/DRM/KVM/MM) ”h]”hÞ)�”}”(hŒ3An algorithm implementation (e.g. IOMMU/DRM/KVM/MM)”h]”hŒ3An algorithm implementation (e.g. IOMMU/DRM/KVM/MM)”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´KhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jh³j*h´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j*h´KhhÊh²hubhÞ)�”}”(hX?Multiple implementations are supported. The intention is to have the generic format code be re-usable for whatever specialized implementation is required. The generic code is solely about the format of the radix tree; it does not include memory allocation or higher level decisions that are left for the implementation.”h]”hX?Multiple implementations are supported. The intention is to have the generic format code be re-usable for whatever specialized implementation is required. The generic code is solely about the format of the radix tree; it does not include memory allocation or higher level decisions that are left for the implementation.”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´KhhÊh²hubhÞ)�”}”(hŒVThe generic framework supports a superset of functions across many HW implementations:”h]”hŒVThe generic framework supports a superset of functions across many HW implementations:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´K!hhÊh²hubj )�”}”(hX¢- Entries comprised of contiguous blocks of IO PTEs for larger page sizes - Multi-level tables, up to 6 levels. Runtime selected top level - Runtime variable table level size (ARM's concatenated tables) - Expandable top level allowing dynamic sizing of table levels - Optional leaf entries at any level - 32-bit/64-bit virtual and output addresses, using every address bit - Dirty tracking - Sign extended addressing ”h]”j)�”}”(hhh]”(j)�”}”(hŒGEntries comprised of contiguous blocks of IO PTEs for larger page sizes”h]”hÞ)�”}”(hj—h]”hŒGEntries comprised of contiguous blocks of IO PTEs for larger page sizes”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´K$hj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ubj)�”}”(hŒ>Multi-level tables, up to 6 levels. Runtime selected top level”h]”hÞ)�”}”(hj¯h]”hŒ>Multi-level tables, up to 6 levels. Runtime selected top level”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´K%hj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ubj)�”}”(hŒ=Runtime variable table level size (ARM's concatenated tables)”h]”hÞ)�”}”(hjÇh]”hŒ?Runtime variable table level size (ARM’s concatenated tables)”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´K&hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ubj)�”}”(hŒubj)�”}”(hhh]”hÞ)�”}”(hŒ:The position in a table of an element: item = table[index]”h]”hŒ:The position in a table of an element: item = table[index]”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:10: ./drivers/iommu/generic_pt/pt_defs.h”h´KchjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jPh´Kbhjƒubjh)�”}”(hŒitem A single index in a table”h]”(jn)�”}”(hŒitem”h]”hŒitem”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:10: ./drivers/iommu/generic_pt/pt_defs.h”h´Kdhjoubj)�”}”(hhh]”hÞ)�”}”(hŒA single index in a table”h]”hŒA single index in a table”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:10: ./drivers/iommu/generic_pt/pt_defs.h”h´Kehj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j�h´Kdhjƒubjh)�”}”(hŒÏentry A single logical element in a table. If contiguous pages are not supported then item and entry are the same thing, otherwise entry refers to all the items that comprise a single contiguous translation.”h]”(jn)�”}”(hŒentry”h]”hŒentry”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:10: ./drivers/iommu/generic_pt/pt_defs.h”h´Khhj ubj)�”}”(hhh]”hÞ)�”}”(hŒÉA single logical element in a table. If contiguous pages are not supported then item and entry are the same thing, otherwise entry refers to all the items that comprise a single contiguous translation.”h]”hŒÉA single logical element in a table. If contiguous pages are not supported then item and entry are the same thing, otherwise entry refers to all the items that comprise a single contiguous translation.”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:10: ./drivers/iommu/generic_pt/pt_defs.h”h´Kghj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j²h´Khhjƒubjh)�”}”(hŒåitem/entry_size The number of bytes of VA the table index translates for. If the item is a table entry then the next table covers this size. If the entry translates to an output address then the full OA is: OA | (VA % entry_size)”h]”(jn)�”}”(hŒitem/entry_size”h]”hŒitem/entry_size”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:10: ./drivers/iommu/generic_pt/pt_defs.h”h´KmhjÑubj)�”}”(hhh]”hÞ)�”}”(hŒÕThe number of bytes of VA the table index translates for. If the item is a table entry then the next table covers this size. If the entry translates to an output address then the full OA is: OA | (VA % entry_size)”h]”hŒÕThe number of bytes of VA the table index translates for. If the item is a table entry then the next table covers this size. If the entry translates to an output address then the full OA is: OA | (VA % entry_size)”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:10: ./drivers/iommu/generic_pt/pt_defs.h”h´Kkhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jãh´Kmhjƒubjh)�”}”(hŒ‰contig_count The number of consecutive items fused into a single entry. item_size * contig_count is the size of that entry's translation.”h]”(jn)�”}”(hŒ contig_count”h]”hŒ contig_count”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:10: ./drivers/iommu/generic_pt/pt_defs.h”h´Kphjubj)�”}”(hhh]”hÞ)�”}”(hŒ|The number of consecutive items fused into a single entry. item_size * contig_count is the size of that entry's translation.”h]”hŒ~The number of consecutive items fused into a single entry. item_size * contig_count is the size of that entry’s translation.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´Kphjubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jh´Kphjƒubjh)�”}”(hX%lg2 Indicates the value is encoded as log2, i.e. 1< #include "defs_amdv1.h" #include "../pt_defs.h" #include "amdv1.h" #include "../pt_common.h" #include "../pt_iter.h" #include "../iommu_pt.h" /* The IOMMU implementation */”h]”hŒÒ#include #include "defs_amdv1.h" #include "../pt_defs.h" #include "amdv1.h" #include "../pt_common.h" #include "../pt_iter.h" #include "../iommu_pt.h" /* The IOMMU implementation */”…”�”}”hjÅsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÃh³hÇh´K!hjzh²hubhÞ)�”}”(hŒÙiommu_pt.h includes definitions that will generate the operations functions for map/unmap/etc. using the definitions provided by AMDv1. The resulting module will have exported symbols named like pt_iommu_amdv1_init().”h]”hŒÙiommu_pt.h includes definitions that will generate the operations functions for map/unmap/etc. using the definitions provided by AMDv1. The resulting module will have exported symbols named like pt_iommu_amdv1_init().”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K)hjzh²hubhÞ)�”}”(hŒ©Refer to drivers/iommu/generic_pt/fmt/iommu_template.h for an example of how the IOMMU implementation uses multi-compilation to generate per-format ops structs pointers.”h]”hŒ©Refer to drivers/iommu/generic_pt/fmt/iommu_template.h for an example of how the IOMMU implementation uses multi-compilation to generate per-format ops structs pointers.”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K-hjzh²hubhÞ)�”}”(hŒÍThe format code is written so that the common names arise from #defines to distinct format specific names. This is intended to aid debuggability by avoiding symbol clashes across all the different formats.”h]”hŒÍThe format code is written so that the common names arise from #defines to distinct format specific names. This is intended to aid debuggability by avoiding symbol clashes across all the different formats.”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K1hjzh²hubhÞ)�”}”(hŒhExported symbols and other global names are mangled using a per-format string via the NS() helper macro.”h]”hŒhExported symbols and other global names are mangled using a per-format string via the NS() helper macro.”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K5hjzh²hubhÞ)�”}”(hŒ­The format uses struct pt_common as the top-level struct for the table, and each format will have its own struct pt_xxx which embeds it to store format-specific information.”h]”hŒ­The format uses struct pt_common as the top-level struct for the table, and each format will have its own struct pt_xxx which embeds it to store format-specific information.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K8hjzh²hubhÞ)�”}”(hŒqThe implementation will further wrap struct pt_common in its own top-level struct, such as struct pt_iommu_amdv1.”h]”hŒqThe implementation will further wrap struct pt_common in its own top-level struct, such as struct pt_iommu_amdv1.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjÙubjc)�”}”(hhh]”(jh)�”}”(hŒÄ``top_of_table`` Encodes the table top pointer and the top level in a single value. Must use READ_ONCE/WRITE_ONCE to access it. The lower bits of the aligned table pointer are used for the level. ”h]”(jn)�”}”(hŒ``top_of_table``”h]”hŒliteral”“”)�”}”(hj,h]”hŒ top_of_table”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K8hj&ubj)�”}”(hhh]”hÞ)�”}”(hŒ²Encodes the table top pointer and the top level in a single value. Must use READ_ONCE/WRITE_ONCE to access it. The lower bits of the aligned table pointer are used for the level.”h]”hŒ²Encodes the table top pointer and the top level in a single value. Must use READ_ONCE/WRITE_ONCE to access it. The lower bits of the aligned table pointer are used for the level.”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K6hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jCh´K8hj#ubjh)�”}”(hŒ¦``max_oasz_lg2`` Maximum number of bits the OA can contain. Upper bits must be zero. This may be less than what the page table format supports, but must not be more. ”h]”(jn)�”}”(hŒ``max_oasz_lg2``”h]”j/)�”}”(hjhh]”hŒ max_oasz_lg2”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K>hjbubj)�”}”(hhh]”hÞ)�”}”(hŒ”Maximum number of bits the OA can contain. Upper bits must be zero. This may be less than what the page table format supports, but must not be more.”h]”hŒ”Maximum number of bits the OA can contain. Upper bits must be zero. This may be less than what the page table format supports, but must not be more.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Khj#ubjh)�”}”(hX``max_vasz_lg2`` Maximum number of bits the VA can contain. Upper bits are 0 or 1 depending on pt_full_va_prefix(). This may be less than what the page table format supports, but must not be more. When PT_FEAT_DYNAMIC_TOP is set this reflects the maximum VA capability. ”h]”(jn)�”}”(hŒ``max_vasz_lg2``”h]”j/)�”}”(hj¢h]”hŒ max_vasz_lg2”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KEhjœubj)�”}”(hhh]”hÞ)�”}”(hŒüMaximum number of bits the VA can contain. Upper bits are 0 or 1 depending on pt_full_va_prefix(). This may be less than what the page table format supports, but must not be more. When PT_FEAT_DYNAMIC_TOP is set this reflects the maximum VA capability.”h]”hŒüMaximum number of bits the VA can contain. Upper bits are 0 or 1 depending on pt_full_va_prefix(). This may be less than what the page table format supports, but must not be more. When PT_FEAT_DYNAMIC_TOP is set this reflects the maximum VA capability.”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KBhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j·h´KEhj#ubjh)�”}”(hŒ)``features`` Bitmap of `enum pt_features`”h]”(jn)�”}”(hŒ ``features``”h]”j/)�”}”(hjÜh]”hŒfeatures”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KHhjÖubj)�”}”(hhh]”hÞ)�”}”(hŒBitmap of `enum pt_features`”h]”(hŒ Bitmap of ”…”�”}”(hjõh²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ`enum pt_features`”h]”hŒenum pt_features”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jýhjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KIhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jñh´KHhj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÙubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_features (C enum)”Œ c.pt_features”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ pt_features”h]”jU)�”}”(hŒenum pt_features”h]”(j[)�”}”(hŒenum”h]”hŒenum”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjBh²hh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KOubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjBh²hh³jTh´KOubj~)�”}”(hŒ pt_features”h]”j„)�”}”(hj@h]”hŒ pt_features”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjcubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjBh²hh³jTh´KOubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj>h²hh³jTh´KOubah}”(h]”j9ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jTh´KOhj;h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ?Features turned on in the table. Each symbol is a bit position.”h]”hŒ?Features turned on in the table. Each symbol is a bit position.”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KThj†h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj;h²hh³jTh´KOubeh}”(h]”h ]”(jÌŒenum”eh"]”h$]”h&]”jÑjÌjÒj¡jÓj¡jÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hX·**Constants** ``PT_FEAT_DMA_INCOHERENT`` Cache flush page table memory before assuming the HW can read it. Otherwise a SMP release is sufficient for HW to read it. ``PT_FEAT_FULL_VA`` The table can span the full VA range from 0 to PT_VADDR_MAX. ``PT_FEAT_DYNAMIC_TOP`` The table's top level can be increased dynamically during map. This requires HW support for atomically setting both the table top pointer and the starting table level. ``PT_FEAT_SIGN_EXTEND`` The top most bit of the valid VA range sign extends up to the full pt_vaddr_t. This divides the page table into three VA ranges:: 0 -> 2^N - 1 Lower 2^N -> (MAX - 2^N - 1) Non-Canonical MAX - 2^N -> MAX Upper In this mode pt_common::max_vasz_lg2 includes the sign bit and the upper bits that don't fall within the translation are just validated. If not set there is no sign extension and valid VA goes from 0 to 2^N - 1. ``PT_FEAT_FLUSH_RANGE`` IOTLB maintenance is done by flushing IOVA ranges which will clean out any walk cache or any IOPTE fully contained by the range. The optimization objective is to minimize the number of flushes even if ranges include IOVA gaps that do not need to be flushed. ``PT_FEAT_FLUSH_RANGE_NO_GAPS`` Like PT_FEAT_FLUSH_RANGE except that the optimization objective is to only flush IOVA that has been changed. This mode is suitable for cases like hypervisor shadowing where flushing unchanged ranges may cause the hypervisor to reparse significant amount of page table. ``PT_FEAT_DETAILED_GATHER`` Fill in the struct iommu_iotlb_gather pt sub structure with information about which levels were changed.”h]”(hÞ)�”}”(hŒ **Constants**”h]”jâ)�”}”(hj«h]”hŒ Constants”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KXhj¥ubjc)�”}”(hhh]”(jh)�”}”(hŒ–``PT_FEAT_DMA_INCOHERENT`` Cache flush page table memory before assuming the HW can read it. Otherwise a SMP release is sufficient for HW to read it. ”h]”(jn)�”}”(hŒ``PT_FEAT_DMA_INCOHERENT``”h]”j/)�”}”(hjÊh]”hŒPT_FEAT_DMA_INCOHERENT”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K]hjÄubj)�”}”(hhh]”hÞ)�”}”(hŒzCache flush page table memory before assuming the HW can read it. Otherwise a SMP release is sufficient for HW to read it.”h]”hŒzCache flush page table memory before assuming the HW can read it. Otherwise a SMP release is sufficient for HW to read it.”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K[hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jßh´K]hjÁubjh)�”}”(hŒQ``PT_FEAT_FULL_VA`` The table can span the full VA range from 0 to PT_VADDR_MAX. ”h]”(jn)�”}”(hŒ``PT_FEAT_FULL_VA``”h]”j/)�”}”(hj h]”hŒPT_FEAT_FULL_VA”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Kahjþubj)�”}”(hhh]”hÞ)�”}”(hŒ h]”hŒPT_FEAT_DYNAMIC_TOP”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj< ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Kfhj8 ubj)�”}”(hhh]”hÞ)�”}”(hŒ§The table's top level can be increased dynamically during map. This requires HW support for atomically setting both the table top pointer and the starting table level.”h]”hŒ©The table’s top level can be increased dynamically during map. This requires HW support for atomically setting both the table top pointer and the starting table level.”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KdhjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj8 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jS h´KfhjÁubjh)�”}”(hXô``PT_FEAT_SIGN_EXTEND`` The top most bit of the valid VA range sign extends up to the full pt_vaddr_t. This divides the page table into three VA ranges:: 0 -> 2^N - 1 Lower 2^N -> (MAX - 2^N - 1) Non-Canonical MAX - 2^N -> MAX Upper In this mode pt_common::max_vasz_lg2 includes the sign bit and the upper bits that don't fall within the translation are just validated. If not set there is no sign extension and valid VA goes from 0 to 2^N - 1. ”h]”(jn)�”}”(hŒ``PT_FEAT_SIGN_EXTEND``”h]”j/)�”}”(hjx h]”hŒPT_FEAT_SIGN_EXTEND”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjv ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Kuhjr ubj)�”}”(hhh]”(hÞ)�”}”(hŒ�The top most bit of the valid VA range sign extends up to the full pt_vaddr_t. This divides the page table into three VA ranges::”h]”hŒ€The top most bit of the valid VA range sign extends up to the full pt_vaddr_t. This divides the page table into three VA ranges:”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KihjŽ ubjÄ)�”}”(hŒ|0 -> 2^N - 1 Lower 2^N -> (MAX - 2^N - 1) Non-Canonical MAX - 2^N -> MAX Upper”h]”hŒ|0 -> 2^N - 1 Lower 2^N -> (MAX - 2^N - 1) Non-Canonical MAX - 2^N -> MAX Upper”…”�”}”hj  sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÃh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KmhjŽ ubhÞ)�”}”(hŒˆIn this mode pt_common::max_vasz_lg2 includes the sign bit and the upper bits that don't fall within the translation are just validated.”h]”hŒŠIn this mode pt_common::max_vasz_lg2 includes the sign bit and the upper bits that don’t fall within the translation are just validated.”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KqhjŽ ubhÞ)�”}”(hŒJIf not set there is no sign extension and valid VA goes from 0 to 2^N - 1.”h]”hŒJIf not set there is no sign extension and valid VA goes from 0 to 2^N - 1.”…”�”}”(hj¾ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KthjŽ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j~hjr ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j� h´KuhjÁubjh)�”}”(hX``PT_FEAT_FLUSH_RANGE`` IOTLB maintenance is done by flushing IOVA ranges which will clean out any walk cache or any IOPTE fully contained by the range. The optimization objective is to minimize the number of flushes even if ranges include IOVA gaps that do not need to be flushed. ”h]”(jn)�”}”(hŒ``PT_FEAT_FLUSH_RANGE``”h]”j/)�”}”(hjß h]”hŒPT_FEAT_FLUSH_RANGE”…”�”}”(hjá h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÝ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K|hjÙ ubj)�”}”(hhh]”hÞ)�”}”(hXIOTLB maintenance is done by flushing IOVA ranges which will clean out any walk cache or any IOPTE fully contained by the range. The optimization objective is to minimize the number of flushes even if ranges include IOVA gaps that do not need to be flushed.”h]”hXIOTLB maintenance is done by flushing IOVA ranges which will clean out any walk cache or any IOPTE fully contained by the range. The optimization objective is to minimize the number of flushes even if ranges include IOVA gaps that do not need to be flushed.”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Kxhjõ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÙ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jô h´K|hjÁubjh)�”}”(hX-``PT_FEAT_FLUSH_RANGE_NO_GAPS`` Like PT_FEAT_FLUSH_RANGE except that the optimization objective is to only flush IOVA that has been changed. This mode is suitable for cases like hypervisor shadowing where flushing unchanged ranges may cause the hypervisor to reparse significant amount of page table. ”h]”(jn)�”}”(hŒ``PT_FEAT_FLUSH_RANGE_NO_GAPS``”h]”j/)�”}”(hj h]”hŒPT_FEAT_FLUSH_RANGE_NO_GAPS”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Kƒhj ubj)�”}”(hhh]”hÞ)�”}”(hX Like PT_FEAT_FLUSH_RANGE except that the optimization objective is to only flush IOVA that has been changed. This mode is suitable for cases like hypervisor shadowing where flushing unchanged ranges may cause the hypervisor to reparse significant amount of page table.”h]”hX Like PT_FEAT_FLUSH_RANGE except that the optimization objective is to only flush IOVA that has been changed. This mode is suitable for cases like hypervisor shadowing where flushing unchanged ranges may cause the hypervisor to reparse significant amount of page table.”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Khj/ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j. h´KƒhjÁubjh)�”}”(hŒ„``PT_FEAT_DETAILED_GATHER`` Fill in the struct iommu_iotlb_gather pt sub structure with information about which levels were changed.”h]”(jn)�”}”(hŒ``PT_FEAT_DETAILED_GATHER``”h]”j/)�”}”(hjS h]”hŒPT_FEAT_DETAILED_GATHER”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjQ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K†hjM ubj)�”}”(hhh]”hÞ)�”}”(hŒhFill in the struct iommu_iotlb_gather pt sub structure with information about which levels were changed.”h]”hŒhFill in the struct iommu_iotlb_gather pt sub structure with information about which levels were changed.”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh h´K†hji ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjM ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jh h´K†hjÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhj¥ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_attr_from_entry (C function)”Œc.pt_attr_from_entry”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒRvoid pt_attr_from_entry (const struct pt_state *pts, struct pt_write_attrs *attrs)”h]”jU)�”}”(hŒQvoid pt_attr_from_entry(const struct pt_state *pts, struct pt_write_attrs *attrs)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj® h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j¬ hj¨ h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾ h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¨ h²hh³j½ h´K ubj~)�”}”(hŒpt_attr_from_entry”h]”j„)�”}”(hŒpt_attr_from_entry”h]”hŒpt_attr_from_entry”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjÌ ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj¨ h²hh³j½ h´K ubhŒdesc_parameterlist”“”)�”}”(hŒ:(const struct pt_state *pts, struct pt_write_attrs *attrs)”h]”(hŒdesc_parameter”“”)�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hŒconst”h]”hŒconst”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjì ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjì ubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjì ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjì ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj' ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”Œ identifier”Œ reftarget”j, Œmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”jE Œ ASTIdentifier”“”)�”}”j@ jÒ sbŒc.pt_attr_from_entry”†”asbuh1hhjì ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjì ubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j` hjì ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjì ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjæ ubjë )�”}”(hŒstruct pt_write_attrs *attrs”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj† ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj† ubh)�”}”(hhh]”j„)�”}”(hŒpt_write_attrs”h]”hŒpt_write_attrs”…”�”}”(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”NjD jG )�”}”jJ ]”jN Œc.pt_attr_from_entry”†”asbuh1hhj† ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj† ubja )�”}”(hjd h]”hŒ*”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj† ubj„)�”}”(hŒattrs”h]”hŒattrs”…”�”}”(hjá h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj† ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjæ ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj¨ h²hh³j½ h´K ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj¤ h²hh³j½ h´K ubah}”(h]”jŸ ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j½ h´K hj¡ h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ)Convert the permission bits back to attrs”h]”hŒ)Convert the permission bits back to attrs”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”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Ö‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hX1**Parameters** ``const struct pt_state *pts`` Entry to convert from ``struct pt_write_attrs *attrs`` Resulting attrs **Description** Fill in the attrs with the permission bits encoded in the current leaf entry. The attrs should be usable with pt_install_leaf_entry() to reconstruct the same entry.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj- h]”hŒ Parameters”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj+ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K$hj' ubjc)�”}”(hhh]”(jh)�”}”(hŒ5``const struct pt_state *pts`` Entry to convert from ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hjL h]”hŒconst struct pt_state *pts”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjJ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K!hjF ubj)�”}”(hhh]”hÞ)�”}”(hŒEntry to convert from”h]”hŒEntry to convert from”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ja h´K!hjb ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjF ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³ja h´K!hjC ubjh)�”}”(hŒ1``struct pt_write_attrs *attrs`` Resulting attrs ”h]”(jn)�”}”(hŒ ``struct pt_write_attrs *attrs``”h]”j/)�”}”(hj… h]”hŒstruct pt_write_attrs *attrs”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjƒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K"hj ubj)�”}”(hhh]”hÞ)�”}”(hŒResulting attrs”h]”hŒResulting attrs”…”�”}”(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&]”uh1jgh³jš h´K"hjC ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhj' ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjÀ h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¾ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K$hj' ubhÞ)�”}”(hŒ¤Fill in the attrs with the permission bits encoded in the current leaf entry. The attrs should be usable with pt_install_leaf_entry() to reconstruct the same entry.”h]”hŒ¤Fill in the attrs with the permission bits encoded in the current leaf entry. The attrs should be usable with pt_install_leaf_entry() to reconstruct the same entry.”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K#hj' ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_can_have_leaf (C function)”Œc.pt_can_have_leaf”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ2bool pt_can_have_leaf (const struct pt_state *pts)”h]”jU)�”}”(hŒ1bool pt_can_have_leaf(const struct pt_state *pts)”h]”(j­ )�”}”(hŒbool”h]”hŒbool”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K,ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj h²hh³j h´K,ubj~)�”}”(hŒpt_can_have_leaf”h]”j„)�”}”(hŒpt_can_have_leaf”h]”hŒpt_can_have_leaf”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj" ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj h²hh³j h´K,ubjå )�”}”(hŒ(const struct pt_state *pts)”h]”jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj> ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj> ubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj> ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj> ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ j( sbŒc.pt_can_have_leaf”†”asbuh1hhj> ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj> ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj> ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj> ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj: ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj h²hh³j h´K,ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjý h²hh³j h´K,ubah}”(h]”jø ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j h´K,hjú h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ.True if the current level can have an OA entry”h]”hŒ.True if the current level can have an OA entry”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”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Ö‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hŒ¯**Parameters** ``const struct pt_state *pts`` The current level **Description** True if the current level can support pt_install_leaf_entry(). A leaf entry produce an OA.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K0hjü ubjc)�”}”(hhh]”jh)�”}”(hŒ1``const struct pt_state *pts`` The current level ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hj!h]”hŒconst struct pt_state *pts”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K-hjubj)�”}”(hhh]”hÞ)�”}”(hŒThe current level”h]”hŒThe current level”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j6h´K-hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j6h´K-hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjü ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj\h]”hŒ Description”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K/hjü ubhÞ)�”}”(hŒZTrue if the current level can support pt_install_leaf_entry(). A leaf entry produce an OA.”h]”hŒZTrue if the current level can support pt_install_leaf_entry(). A leaf entry produce an OA.”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K.hjü ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_can_have_table (C function)”Œc.pt_can_have_table”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ3bool pt_can_have_table (const struct pt_state *pts)”h]”jU)�”}”(hŒ2bool pt_can_have_table(const struct pt_state *pts)”h]”(j­ )�”}”(hj h]”hŒbool”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj�h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K5ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj�h²hh³j®h´K5ubj~)�”}”(hŒpt_can_have_table”h]”j„)�”}”(hŒpt_can_have_table”h]”hŒpt_can_have_table”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj½ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj�h²hh³j®h´K5ubjå )�”}”(hŒ(const struct pt_state *pts)”h]”jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjÙubjm)�”•}”(hŒ ”h]”hŒ ”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÙubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjÙubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÙubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ jÃsbŒc.pt_can_have_table”†”asbuh1hhjÙubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÙubja )�”}”(hjd h]”hŒ*”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjÙubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjÕubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj�h²hh³j®h´K5ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj™h²hh³j®h´K5ubah}”(h]”j”ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j®h´K5hj–h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ0True if the current level can have a lower table”h]”hŒ0True if the current level can have a lower table”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K5hjxh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj–h²hh³j®h´K5ubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj“jÓj“jÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hŒ‹**Parameters** ``const struct pt_state *pts`` The current level **Description** Every level except 0 is allowed to have a lower table.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj�h]”hŒ Parameters”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K9hj—ubjc)�”}”(hhh]”jh)�”}”(hŒ1``const struct pt_state *pts`` The current level ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hj¼h]”hŒconst struct pt_state *pts”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K6hj¶ubj)�”}”(hhh]”hÞ)�”}”(hŒThe current level”h]”hŒThe current level”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÑh´K6hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jÑh´K6hj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj—ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj÷h]”hŒ Description”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K8hj—ubhÞ)�”}”(hŒ6Every level except 0 is allowed to have a lower table.”h]”hŒ6Every level except 0 is allowed to have a lower table.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K7hj—ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_clear_entries (C function)”Œc.pt_clear_entries”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒIvoid pt_clear_entries (struct pt_state *pts, unsigned int num_contig_lg2)”h]”jU)�”}”(hŒHvoid pt_clear_entries(struct pt_state *pts, unsigned int num_contig_lg2)”h]”(j­ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj8h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KAubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj8h²hh³jJh´KAubj~)�”}”(hŒpt_clear_entries”h]”j„)�”}”(hŒpt_clear_entries”h]”hŒpt_clear_entries”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjYubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj8h²hh³jJh´KAubjå )�”}”(hŒ3(struct pt_state *pts, unsigned int num_contig_lg2)”h]”(jë )�”}”(hŒstruct pt_state *pts”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjuubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjuubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ j_sbŒc.pt_clear_entries”†”asbuh1hhjuubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjuubja )�”}”(hjd h]”hŒ*”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjuubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjuubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjqubjë )�”}”(hŒunsigned int num_contig_lg2”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjçubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjçubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjçubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjçubj„)�”}”(hŒnum_contig_lg2”h]”hŒnum_contig_lg2”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjçubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjqubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj8h²hh³jJh´KAubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj4h²hh³jJh´KAubah}”(h]”j/ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jJh´KAhj1h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ Make entries empty (non-present)”h]”hŒ Make entries empty (non-present)”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KAhjJh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj1h²hh³jJh´KAubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjejÓjejÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hXF**Parameters** ``struct pt_state *pts`` Starting table index ``unsigned int num_contig_lg2`` Number of contiguous items to clear **Description** Clear a run of entries. A cleared entry will load back as PT_ENTRY_EMPTY and does not have any effect on table walking. The starting index must be aligned to num_contig_lg2.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjoh]”hŒ Parameters”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KEhjiubjc)�”}”(hhh]”(jh)�”}”(hŒ.``struct pt_state *pts`` Starting table index ”h]”(jn)�”}”(hŒ``struct pt_state *pts``”h]”j/)�”}”(hjŽh]”hŒstruct pt_state *pts”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KBhjˆubj)�”}”(hhh]”hÞ)�”}”(hŒStarting table index”h]”hŒStarting table index”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j£h´KBhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j£h´KBhj…ubjh)�”}”(hŒD``unsigned int num_contig_lg2`` Number of contiguous items to clear ”h]”(jn)�”}”(hŒ``unsigned int num_contig_lg2``”h]”j/)�”}”(hjÇh]”hŒunsigned int num_contig_lg2”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KChjÁubj)�”}”(hhh]”hÞ)�”}”(hŒ#Number of contiguous items to clear”h]”hŒ#Number of contiguous items to clear”…”�”}”(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&]”uh1jgh³jÜh´KChj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhjiubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KEhjiubhÞ)�”}”(hŒ­Clear a run of entries. A cleared entry will load back as PT_ENTRY_EMPTY and does not have any effect on table walking. The starting index must be aligned to num_contig_lg2.”h]”hŒ­Clear a run of entries. A cleared entry will load back as PT_ENTRY_EMPTY and does not have any effect on table walking. The starting index must be aligned to num_contig_lg2.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KDhjiubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ&pt_entry_make_write_dirty (C function)”Œc.pt_entry_make_write_dirty”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ5bool pt_entry_make_write_dirty (struct pt_state *pts)”h]”jU)�”}”(hŒ4bool pt_entry_make_write_dirty(struct pt_state *pts)”h]”(j­ )�”}”(hj h]”hŒbool”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjCh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KMubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjCh²hh³jTh´KMubj~)�”}”(hŒpt_entry_make_write_dirty”h]”j„)�”}”(hŒpt_entry_make_write_dirty”h]”hŒpt_entry_make_write_dirty”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjcubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjCh²hh³jTh´KMubjå )�”}”(hŒ(struct pt_state *pts)”h]”jë )�”}”(hŒstruct pt_state *pts”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ jisbŒc.pt_entry_make_write_dirty”†”asbuh1hhjubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjubja )�”}”(hjd h]”hŒ*”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj{ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjCh²hh³jTh´KMubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj?h²hh³jTh´KMubah}”(h]”j:ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jTh´KMhj<h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒMake an entry dirty”h]”hŒMake an entry dirty”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KMhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj<h²hh³jTh´KMubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjjÓjjÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hX**Parameters** ``struct pt_state *pts`` Table entry to change **Description** Make pt_entry_is_write_dirty() return true for this entry. This can be called asynchronously with any other table manipulation under a RCU lock and must not corrupt the table.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj(h]”hŒ Parameters”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KQhj"ubjc)�”}”(hhh]”jh)�”}”(hŒ/``struct pt_state *pts`` Table entry to change ”h]”(jn)�”}”(hŒ``struct pt_state *pts``”h]”j/)�”}”(hjGh]”hŒstruct pt_state *pts”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KNhjAubj)�”}”(hhh]”hÞ)�”}”(hŒTable entry to change”h]”hŒTable entry to change”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j\h´KNhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j\h´KNhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj"ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj‚h]”hŒ Description”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KPhj"ubhÞ)�”}”(hŒ¯Make pt_entry_is_write_dirty() return true for this entry. This can be called asynchronously with any other table manipulation under a RCU lock and must not corrupt the table.”h]”hŒ¯Make pt_entry_is_write_dirty() return true for this entry. This can be called asynchronously with any other table manipulation under a RCU lock and must not corrupt the table.”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KOhj"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ&pt_entry_make_write_clean (C function)”Œc.pt_entry_make_write_clean”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ5void pt_entry_make_write_clean (struct pt_state *pts)”h]”jU)�”}”(hŒ4void pt_entry_make_write_clean(struct pt_state *pts)”h]”(j­ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjÃh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KWubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÃh²hh³jÕh´KWubj~)�”}”(hŒpt_entry_make_write_clean”h]”j„)�”}”(hŒpt_entry_make_write_clean”h]”hŒpt_entry_make_write_clean”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjäubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjÃh²hh³jÕh´KWubjå )�”}”(hŒ(struct pt_state *pts)”h]”jë )�”}”(hŒstruct pt_state *pts”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ jêsbŒc.pt_entry_make_write_clean”†”asbuh1hhjubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjubja )�”}”(hjd h]”hŒ*”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjüubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjÃh²hh³jÕh´KWubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj¿h²hh³jÕh´KWubah}”(h]”jºah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jÕh´KWhj¼h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒMake the entry write clean”h]”hŒMake the entry write clean”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KWhj„h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj¼h²hh³jÕh´KWubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjŸjÓjŸjÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hX**Parameters** ``struct pt_state *pts`` Table entry to change **Description** Modify the entry so that pt_entry_is_write_dirty() == false. The HW will eventually be notified of this change via a TLB flush, which is the point that the HW must become synchronized. Any "write dirty" prior to the TLB flush can be lost, but once the TLB flush completes all writes must make their entries write dirty. The format should alter the entry in a way that is compatible with any concurrent update from HW. The entire contiguous entry is changed.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj©h]”hŒ Parameters”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K[hj£ubjc)�”}”(hhh]”jh)�”}”(hŒ/``struct pt_state *pts`` Table entry to change ”h]”(jn)�”}”(hŒ``struct pt_state *pts``”h]”j/)�”}”(hjÈh]”hŒstruct pt_state *pts”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KXhjÂubj)�”}”(hhh]”hÞ)�”}”(hŒTable entry to change”h]”hŒTable entry to change”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÝh´KXhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jÝh´KXhj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj£ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KZhj£ubhÞ)�”}”(hX?Modify the entry so that pt_entry_is_write_dirty() == false. The HW will eventually be notified of this change via a TLB flush, which is the point that the HW must become synchronized. Any "write dirty" prior to the TLB flush can be lost, but once the TLB flush completes all writes must make their entries write dirty.”h]”hXCModify the entry so that pt_entry_is_write_dirty() == false. The HW will eventually be notified of this change via a TLB flush, which is the point that the HW must become synchronized. Any “write dirtyâ€� prior to the TLB flush can be lost, but once the TLB flush completes all writes must make their entries write dirty.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KYhj£ubhÞ)�”}”(hŒ‰The format should alter the entry in a way that is compatible with any concurrent update from HW. The entire contiguous entry is changed.”h]”hŒ‰The format should alter the entry in a way that is compatible with any concurrent update from HW. The entire contiguous entry is changed.”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K_hj£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ$pt_entry_is_write_dirty (C function)”Œc.pt_entry_is_write_dirty”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ9bool pt_entry_is_write_dirty (const struct pt_state *pts)”h]”jU)�”}”(hŒ8bool pt_entry_is_write_dirty(const struct pt_state *pts)”h]”(j­ )�”}”(hj h]”hŒbool”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjSh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kfubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjSh²hh³jdh´Kfubj~)�”}”(hŒpt_entry_is_write_dirty”h]”j„)�”}”(hŒpt_entry_is_write_dirty”h]”hŒpt_entry_is_write_dirty”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjsubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjSh²hh³jdh´Kfubjå )�”}”(hŒ(const struct pt_state *pts)”h]”jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj�ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj�ubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj�ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj�ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ jysbŒc.pt_entry_is_write_dirty”†”asbuh1hhj�ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj�ubja )�”}”(hjd h]”hŒ*”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj�ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj‹ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjSh²hh³jdh´Kfubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjOh²hh³jdh´Kfubah}”(h]”jJah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jdh´KfhjLh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ%True if the entry has been written to”h]”hŒ%True if the entry has been written to”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kfhj.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjLh²hh³jdh´Kfubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjIjÓjIjÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hX**Parameters** ``const struct pt_state *pts`` Entry to query **Description** "write dirty" means that the HW has written to the OA translated by this entry. If the entry is contiguous then the consolidated "write dirty" for all the items must be returned.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjSh]”hŒ Parameters”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KjhjMubjc)�”}”(hhh]”jh)�”}”(hŒ.``const struct pt_state *pts`` Entry to query ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hjrh]”hŒconst struct pt_state *pts”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kghjlubj)�”}”(hhh]”hÞ)�”}”(hŒEntry to query”h]”hŒEntry to query”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j‡h´Kghjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j‡h´Kghjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjMubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj­h]”hŒ Description”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KihjMubhÞ)�”}”(hŒ²"write dirty" means that the HW has written to the OA translated by this entry. If the entry is contiguous then the consolidated "write dirty" for all the items must be returned.”h]”hŒºâ€œwrite dirtyâ€� means that the HW has written to the OA translated by this entry. If the entry is contiguous then the consolidated “write dirtyâ€� for all the items must be returned.”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KhhjMubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_dirty_supported (C function)”Œc.pt_dirty_supported”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ2bool pt_dirty_supported (struct pt_common *common)”h]”jU)�”}”(hŒ1bool pt_dirty_supported(struct pt_common *common)”h]”(j­ )�”}”(hj h]”hŒbool”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjîh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kpubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjîh²hh³jÿh´Kpubj~)�”}”(hŒpt_dirty_supported”h]”j„)�”}”(hŒpt_dirty_supported”h]”hŒpt_dirty_supported”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjîh²hh³jÿh´Kpubjå )�”}”(hŒ(struct pt_common *common)”h]”jë )�”}”(hŒstruct pt_common *common”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj*ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj*ubh)�”}”(hhh]”j„)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjIubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”jNŒmodname”NŒ classname”NjD jG )�”}”jJ ]”jM )�”}”j@ jsbŒc.pt_dirty_supported”†”asbuh1hhj*ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj*ubja )�”}”(hjd h]”hŒ*”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj*ubj„)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj&ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjîh²hh³jÿh´Kpubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjêh²hh³jÿh´Kpubah}”(h]”jåah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jÿh´Kphjçh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ.True if the page table supports dirty tracking”h]”hŒ.True if the page table supports dirty tracking”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kphj®h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjçh²hh³jÿh´Kpubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjÉjÓjÉjÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hŒB**Parameters** ``struct pt_common *common`` Page table to query”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjÓh]”hŒ Parameters”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KthjÍubjc)�”}”(hhh]”jh)�”}”(hŒ0``struct pt_common *common`` Page table to query”h]”(jn)�”}”(hŒ``struct pt_common *common``”h]”j/)�”}”(hjòh]”hŒstruct pt_common *common”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kvhjìubj)�”}”(hhh]”hÞ)�”}”(hŒPage table to query”h]”hŒPage table to query”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kqhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jh´Kvhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÍubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ$pt_entry_num_contig_lg2 (C function)”Œc.pt_entry_num_contig_lg2”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒAunsigned int pt_entry_num_contig_lg2 (const struct pt_state *pts)”h]”jU)�”}”(hŒ@unsigned int pt_entry_num_contig_lg2(const struct pt_state *pts)”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjHh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kvubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjHh²hh³jZh´Kvubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjHh²hh³jZh´Kvubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjHh²hh³jZh´Kvubj~)�”}”(hŒpt_entry_num_contig_lg2”h]”j„)�”}”(hŒpt_entry_num_contig_lg2”h]”hŒpt_entry_num_contig_lg2”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj…ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjHh²hh³jZh´Kvubjå )�”}”(hŒ(const struct pt_state *pts)”h]”jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj¡ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¡ubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj¡ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¡ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ j‹sbŒc.pt_entry_num_contig_lg2”†”asbuh1hhj¡ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¡ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj¡ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj�ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjHh²hh³jZh´Kvubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjDh²hh³jZh´Kvubah}”(h]”j?ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jZh´KvhjAh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ.Number of contiguous items for this leaf entry”h]”hŒ.Number of contiguous items for this leaf entry”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kvhj@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjAh²hh³jZh´Kvubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj[jÓj[jÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hŒ¿**Parameters** ``const struct pt_state *pts`` Entry to query **Description** Return the number of contiguous items this leaf entry spans. If the entry is single item it returns ilog2(1).”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjeh]”hŒ Parameters”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kzhj_ubjc)�”}”(hhh]”jh)�”}”(hŒ.``const struct pt_state *pts`` Entry to query ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hj„h]”hŒconst struct pt_state *pts”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kwhj~ubj)�”}”(hhh]”hÞ)�”}”(hŒEntry to query”h]”hŒEntry to query”…”�”}”(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&]”uh1jgh³j™h´Kwhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj_ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj¿h]”hŒ Description”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kyhj_ubhÞ)�”}”(hŒmReturn the number of contiguous items this leaf entry spans. If the entry is single item it returns ilog2(1).”h]”hŒmReturn the number of contiguous items this leaf entry spans. If the entry is single item it returns ilog2(1).”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kxhj_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_entry_oa (C function)”Œ c.pt_entry_oa”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ3pt_oaddr_t pt_entry_oa (const struct pt_state *pts)”h]”jU)�”}”(hŒ2pt_oaddr_t pt_entry_oa(const struct pt_state *pts)”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_oaddr_t”h]”hŒ pt_oaddr_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”NjD jG )�”}”jJ ]”jM )�”}”j@ Œ pt_entry_oa”sbŒ c.pt_entry_oa”†”asbuh1hhjh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjh²hh³j(h´Kubj~)�”}”(hŒ pt_entry_oa”h]”j„)�”}”(hj%h]”hŒ pt_entry_oa”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj7ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjh²hh³j(h´Kubjå )�”}”(hŒ(const struct pt_state *pts)”h]”jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjRubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjRubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjRubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjRubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”j#Œ c.pt_entry_oa”†”asbuh1hhjRubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjRubja )�”}”(hjd h]”hŒ*”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjRubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjNubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjh²hh³j(h´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjüh²hh³j(h´Kubah}”(h]”j÷ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j(h´Khjùh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ"Output Address for this leaf entry”h]”hŒ"Output Address for this leaf entry”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Khjïh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjùh²hh³j(h´Kubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj jÓj jÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hX‰**Parameters** ``const struct pt_state *pts`` Entry to query **Description** Return the output address for the start of the entry. If the entry is contiguous this returns the same value for each sub-item. I.e.:: log2_mod(pt_entry_oa(), pt_entry_oa_lg2sz()) == 0 See pt_item_oa(). The format should implement one of these two functions depending on how it stores the OAs in the table.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kƒhjubjc)�”}”(hhh]”jh)�”}”(hŒ.``const struct pt_state *pts`` Entry to query ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hj3h]”hŒconst struct pt_state *pts”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K€hj-ubj)�”}”(hhh]”hÞ)�”}”(hŒEntry to query”h]”hŒEntry to query”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jHh´K€hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jHh´K€hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjnh]”hŒ Description”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K‚hjubhÞ)�”}”(hŒ†Return the output address for the start of the entry. If the entry is contiguous this returns the same value for each sub-item. I.e.::”h]”hŒ…Return the output address for the start of the entry. If the entry is contiguous this returns the same value for each sub-item. I.e.:”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K�hjubjÄ)�”}”(hŒ1log2_mod(pt_entry_oa(), pt_entry_oa_lg2sz()) == 0”h]”hŒ1log2_mod(pt_entry_oa(), pt_entry_oa_lg2sz()) == 0”…”�”}”hj“sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÃh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K„hjubhÞ)�”}”(hŒySee pt_item_oa(). The format should implement one of these two functions depending on how it stores the OAs in the table.”h]”hŒySee pt_item_oa(). The format should implement one of these two functions depending on how it stores the OAs in the table.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K†hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_entry_oa_lg2sz (C function)”Œc.pt_entry_oa_lg2sz”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ;unsigned int pt_entry_oa_lg2sz (const struct pt_state *pts)”h]”jU)�”}”(hŒ:unsigned int pt_entry_oa_lg2sz(const struct pt_state *pts)”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjÍh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K�ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÍh²hh³jßh´K�ubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjÍh²hh³jßh´K�ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÍh²hh³jßh´K�ubj~)�”}”(hŒpt_entry_oa_lg2sz”h]”j„)�”}”(hŒpt_entry_oa_lg2sz”h]”hŒpt_entry_oa_lg2sz”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjÍh²hh³jßh´K�ubjå )�”}”(hŒ(const struct pt_state *pts)”h]”jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj&ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj&ubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj&ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj&ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”jeŒmodname”NŒ classname”NjD jG )�”}”jJ ]”jM )�”}”j@ jsbŒc.pt_entry_oa_lg2sz”†”asbuh1hhj&ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj&ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj&ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj"ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjÍh²hh³jßh´K�ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjÉh²hh³jßh´K�ubah}”(h]”jÄah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jßh´K�hjÆh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒReturn the size of an OA entry”h]”hŒReturn the size of an OA entry”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”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Ö‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hŒÞ**Parameters** ``const struct pt_state *pts`` Entry to query **Description** If the entry is not contiguous this returns pt_table_item_lg2sz(), otherwise it returns the total VA/OA size of the entire contiguous entry.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjêh]”hŒ Parameters”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K‘hjäubjc)�”}”(hhh]”jh)�”}”(hŒ.``const struct pt_state *pts`` Entry to query ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hj h]”hŒconst struct pt_state *pts”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KŽhjubj)�”}”(hhh]”hÞ)�”}”(hŒEntry to query”h]”hŒEntry to query”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jh´KŽhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jh´KŽhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjäubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjDh]”hŒ Description”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K�hjäubhÞ)�”}”(hŒŒIf the entry is not contiguous this returns pt_table_item_lg2sz(), otherwise it returns the total VA/OA size of the entire contiguous entry.”h]”hŒŒIf the entry is not contiguous this returns pt_table_item_lg2sz(), otherwise it returns the total VA/OA size of the entire contiguous entry.”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K�hjäubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_entry_oa_exact (C function)”Œc.pt_entry_oa_exact”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ9pt_oaddr_t pt_entry_oa_exact (const struct pt_state *pts)”h]”jU)�”}”(hŒ8pt_oaddr_t pt_entry_oa_exact(const struct pt_state *pts)”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_oaddr_t”h]”hŒ pt_oaddr_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”NjD jG )�”}”jJ ]”jM )�”}”j@ Œpt_entry_oa_exact”sbŒc.pt_entry_oa_exact”†”asbuh1hhj…h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K™ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj…h²hh³j­h´K™ubj~)�”}”(hŒpt_entry_oa_exact”h]”j„)�”}”(hjªh]”hŒpt_entry_oa_exact”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj¼ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj…h²hh³j­h´K™ubjå )�”}”(hŒ(const struct pt_state *pts)”h]”jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj×ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj×ubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj×ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj×ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”j¨Œc.pt_entry_oa_exact”†”asbuh1hhj×ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj×ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj×ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjÓubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj…h²hh³j­h´K™ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj�h²hh³j­h´K™ubah}”(h]”j|ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j­h´K™hj~h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ#Return the complete OA for an entry”h]”hŒ#Return the complete OA for an entry”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K™hjth²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Ö‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hŒé**Parameters** ``const struct pt_state *pts`` Entry to query **Description** During iteration the first entry could have a VA with an offset from the natural start of the entry. Return the exact OA including the pts's VA offset.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj™h]”hŒ Parameters”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K�hj“ubjc)�”}”(hhh]”jh)�”}”(hŒ.``const struct pt_state *pts`` Entry to query ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hj¸h]”hŒconst struct pt_state *pts”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kšhj²ubj)�”}”(hhh]”hÞ)�”}”(hŒEntry to query”h]”hŒEntry to query”…”�”}”(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&]”uh1jgh³jÍh´Kšhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj“ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjóh]”hŒ Description”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kœhj“ubhÞ)�”}”(hŒ—During iteration the first entry could have a VA with an offset from the natural start of the entry. Return the exact OA including the pts's VA offset.”h]”hŒ™During iteration the first entry could have a VA with an offset from the natural start of the entry. Return the exact OA including the pts’s VA offset.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K›hj“ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_full_va_prefix (C function)”Œc.pt_full_va_prefix”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ=pt_vaddr_t pt_full_va_prefix (const struct pt_common *common)”h]”jU)�”}”(hŒ jÓj> jÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hX**Parameters** ``const struct pt_common *common`` Page table to query **Description** This is usually 0, but some formats have their VA space going downward from PT_VADDR_MAX, and will return that instead. This value must always be adjusted by struct pt_common max_vasz_lg2.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjH h]”hŒ Parameters”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjF ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K«hjB ubjc)�”}”(hhh]”jh)�”}”(hŒ7``const struct pt_common *common`` Page table to query ”h]”(jn)�”}”(hŒ"``const struct pt_common *common``”h]”j/)�”}”(hjg h]”hŒconst struct pt_common *common”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hje ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K¨hja ubj)�”}”(hhh]”hÞ)�”}”(hŒPage table to query”h]”hŒPage table to query”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j| h´K¨hj} ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hja ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j| h´K¨hj^ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjB ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj¢ h]”hŒ Description”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj  ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KªhjB ubhÞ)�”}”(hŒ¼This is usually 0, but some formats have their VA space going downward from PT_VADDR_MAX, and will return that instead. This value must always be adjusted by struct pt_common max_vasz_lg2.”h]”hŒ¼This is usually 0, but some formats have their VA space going downward from PT_VADDR_MAX, and will return that instead. This value must always be adjusted by struct pt_common max_vasz_lg2.”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K©hjB ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ$pt_has_system_page_size (C function)”Œc.pt_has_system_page_size”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ=bool pt_has_system_page_size (const struct pt_common *common)”h]”jU)�”}”(hŒ!h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj!ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK!h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj!ubh)�”}”(hhh]”j„)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hj\!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjY!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”j^!Œmodname”NŒ classname”NjD jG )�”}”jJ ]”jM )�”}”j@ j !sbŒc.pt_has_system_page_size”†”asbuh1hhj!ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|!h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj!ubja )�”}”(hjd h]”hŒ*”…”�”}”(hjŠ!h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj!ubj„)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hj—!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj!ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjã h²hh³jô h´K±ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjß h²hh³jô h´K±ubah}”(h]”jÚ ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jô h´K±hjÜ h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ.True if level 0 can install a PAGE_SHIFT entry”h]”hŒ.True if level 0 can install a PAGE_SHIFT entry”…”�”}”(hjÁ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”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Ö‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hŒö**Parameters** ``const struct pt_common *common`` Page table to query **Description** If true the caller can use, at level 0, pt_install_leaf_entry(PAGE_SHIFT). This is useful to create optimized paths for common cases of PAGE_SIZE mappings.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjã!h]”hŒ Parameters”…”�”}”(hjå!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjá!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KµhjÝ!ubjc)�”}”(hhh]”jh)�”}”(hŒ7``const struct pt_common *common`` Page table to query ”h]”(jn)�”}”(hŒ"``const struct pt_common *common``”h]”j/)�”}”(hj"h]”hŒconst struct pt_common *common”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K²hjü!ubj)�”}”(hhh]”hÞ)�”}”(hŒPage table to query”h]”hŒPage table to query”…”�”}”(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&]”uh1jgh³j"h´K²hjù!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÝ!ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj="h]”hŒ Description”…”�”}”(hj?"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj;"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K´hjÝ!ubhÞ)�”}”(hŒ›If true the caller can use, at level 0, pt_install_leaf_entry(PAGE_SHIFT). This is useful to create optimized paths for common cases of PAGE_SIZE mappings.”h]”hŒ›If true the caller can use, at level 0, pt_install_leaf_entry(PAGE_SHIFT). This is useful to create optimized paths for common cases of PAGE_SIZE mappings.”…”�”}”(hjS"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K³hjÝ!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ"pt_install_leaf_entry (C function)”Œc.pt_install_leaf_entry”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ{void pt_install_leaf_entry (struct pt_state *pts, pt_oaddr_t oa, unsigned int oasz_lg2, const struct pt_write_attrs *attrs)”h]”jU)�”}”(hŒzvoid pt_install_leaf_entry(struct pt_state *pts, pt_oaddr_t oa, unsigned int oasz_lg2, const struct pt_write_attrs *attrs)”h]”(j­ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‚"h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj~"h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K»ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘"h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj~"h²hh³j�"h´K»ubj~)�”}”(hŒpt_install_leaf_entry”h]”j„)�”}”(hŒpt_install_leaf_entry”h]”hŒpt_install_leaf_entry”…”�”}”(hj£"h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjŸ"ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj~"h²hh³j�"h´K»ubjå )�”}”(hŒ`(struct pt_state *pts, pt_oaddr_t oa, unsigned int oasz_lg2, const struct pt_write_attrs *attrs)”h]”(jë )�”}”(hŒstruct pt_state *pts”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj¿"h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj»"ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ"h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj»"ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ j¥"sbŒc.pt_install_leaf_entry”†”asbuh1hhj»"ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý"h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj»"ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj»"ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj»"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj·"ubjë )�”}”(hŒ pt_oaddr_t oa”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_oaddr_t”h]”hŒ pt_oaddr_t”…”�”}”(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”NjD jG )�”}”jJ ]”jù"Œc.pt_install_leaf_entry”†”asbuh1hhj-#ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR#h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj-#ubj„)�”}”(hŒoa”h]”hŒoa”…”�”}”(hj`#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj-#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj·"ubjë )�”}”(hŒunsigned int oasz_lg2”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjy#h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hju#ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡#h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhju#ubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hj•#h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hju#ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£#h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhju#ubj„)�”}”(hŒoasz_lg2”h]”hŒoasz_lg2”…”�”}”(hj±#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhju#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj·"ubjë )�”}”(hŒ"const struct pt_write_attrs *attrs”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hjÊ#h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjÆ#ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×#h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÆ#ubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hjå#h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjÆ#ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò#h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÆ#ubh)�”}”(hhh]”j„)�”}”(hŒpt_write_attrs”h]”hŒpt_write_attrs”…”�”}”(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”NjD jG )�”}”jJ ]”jù"Œc.pt_install_leaf_entry”†”asbuh1hhjÆ#ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!$h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÆ#ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj/$h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjÆ#ubj„)�”}”(hŒattrs”h]”hŒattrs”…”�”•}”(hj<$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjÆ#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj·"ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj~"h²hh³j�"h´K»ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjz"h²hh³j�"h´K»ubah}”(h]”ju"ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j�"h´K»hjw"h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒWrite a leaf entry to the table”h]”hŒWrite a leaf entry to the table”…”�”}”(hjf$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K»hjc$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjw"h²hh³j�"h´K»ubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj~$jÓj~$jÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hX‰**Parameters** ``struct pt_state *pts`` Table index to change ``pt_oaddr_t oa`` Output Address for this leaf ``unsigned int oasz_lg2`` Size in VA/OA for this leaf ``const struct pt_write_attrs *attrs`` Attributes to modify the entry **Description** A leaf OA entry will return PT_ENTRY_OA from pt_load_entry(). It translates the VA indicated by pts to the given OA. For a single item non-contiguous entry oasz_lg2 is pt_table_item_lg2sz(). For contiguous it is pt_table_item_lg2sz() + num_contig_lg2. This must not be called if pt_can_have_leaf() == false. Contiguous sizes not indicated by pt_possible_sizes() must not be specified.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjˆ$h]”hŒ Parameters”…”�”}”(hjŠ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj†$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K¿hj‚$ubjc)�”}”(hhh]”(jh)�”}”(hŒ/``struct pt_state *pts`` Table index to change ”h]”(jn)�”}”(hŒ``struct pt_state *pts``”h]”j/)�”}”(hj§$h]”hŒstruct pt_state *pts”…”�”}”(hj©$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj¥$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K¼hj¡$ubj)�”}”(hhh]”hÞ)�”}”(hŒTable index to change”h]”hŒTable index to change”…”�”}”(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&]”uh1jgh³j¼$h´K¼hjž$ubjh)�”}”(hŒ/``pt_oaddr_t oa`` Output Address for this leaf ”h]”(jn)�”}”(hŒ``pt_oaddr_t oa``”h]”j/)�”}”(hjà$h]”hŒ pt_oaddr_t oa”…”�”}”(hjâ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÞ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K½hjÚ$ubj)�”}”(hhh]”hÞ)�”}”(hŒOutput Address for this leaf”h]”hŒOutput Address for this leaf”…”�”}”(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&]”uh1jgh³jõ$h´K½hjž$ubjh)�”}”(hŒ6``unsigned int oasz_lg2`` Size in VA/OA for this leaf ”h]”(jn)�”}”(hŒ``unsigned int oasz_lg2``”h]”j/)�”}”(hj%h]”hŒunsigned int oasz_lg2”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K¾hj%ubj)�”}”(hhh]”hÞ)�”}”(hŒSize in VA/OA for this leaf”h]”hŒSize in VA/OA for this leaf”…”�”}”(hj2%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&]”uh1jgh³j.%h´K¾hjž$ubjh)�”}”(hŒF``const struct pt_write_attrs *attrs`` Attributes to modify the entry ”h]”(jn)�”}”(hŒ&``const struct pt_write_attrs *attrs``”h]”j/)�”}”(hjR%h]”hŒ"const struct pt_write_attrs *attrs”…”�”}”(hjT%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjP%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K¿hjL%ubj)�”}”(hhh]”hÞ)�”}”(hŒAttributes to modify the entry”h]”hŒAttributes to modify the entry”…”�”}”(hjk%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jg%h´K¿hjh%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjL%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jg%h´K¿hjž$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhj‚$ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj�%h]”hŒ Description”…”�”}”(hj�%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj‹%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÁhj‚$ubhÞ)�”}”(hŒtA leaf OA entry will return PT_ENTRY_OA from pt_load_entry(). It translates the VA indicated by pts to the given OA.”h]”hŒtA leaf OA entry will return PT_ENTRY_OA from pt_load_entry(). It translates the VA indicated by pts to the given OA.”…”�”}”(hj£%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÀhj‚$ubhÞ)�”}”(hŒ†For a single item non-contiguous entry oasz_lg2 is pt_table_item_lg2sz(). For contiguous it is pt_table_item_lg2sz() + num_contig_lg2.”h]”hŒ†For a single item non-contiguous entry oasz_lg2 is pt_table_item_lg2sz(). For contiguous it is pt_table_item_lg2sz() + num_contig_lg2.”…”�”}”(hj²%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÃhj‚$ubhÞ)�”}”(hŒ„This must not be called if pt_can_have_leaf() == false. Contiguous sizes not indicated by pt_possible_sizes() must not be specified.”h]”hŒ„This must not be called if pt_can_have_leaf() == false. Contiguous sizes not indicated by pt_possible_sizes() must not be specified.”…”�”}”(hjÁ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÆhj‚$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_install_table (C function)”Œc.pt_install_table”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒebool pt_install_table (struct pt_state *pts, pt_oaddr_t table_pa, const struct pt_write_attrs *attrs)”h]”jU)�”}”(hŒdbool pt_install_table(struct pt_state *pts, pt_oaddr_t table_pa, const struct pt_write_attrs *attrs)”h]”(j­ )�”}”(hj h]”hŒbool”…”�”}”(hjð%h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjì%h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÏubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ%h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjì%h²hh³jý%h´KÏubj~)�”}”(hŒpt_install_table”h]”j„)�”}”(hŒpt_install_table”h]”hŒpt_install_table”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj &ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjì%h²hh³jý%h´KÏubjå )�”}”(hŒO(struct pt_state *pts, pt_oaddr_t table_pa, const struct pt_write_attrs *attrs)”h]”(jë )�”}”(hŒstruct pt_state *pts”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj,&h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj(&ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9&h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj(&ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjJ&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjG&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”jL&Œmodname”NŒ classname”NjD jG )�”}”jJ ]”jM )�”}”j@ j&sbŒc.pt_install_table”†”asbuh1hhj(&ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj&h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj(&ubja )�”}”(hjd h]”hŒ*”…”�”}”(hjx&h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj(&ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj…&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj(&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj$&ubjë )�”}”(hŒpt_oaddr_t table_pa”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_oaddr_t”h]”hŒ pt_oaddr_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”NjD jG )�”}”jJ ]”jf&Œc.pt_install_table”†”asbuh1hhjš&ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿&h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjš&ubj„)�”}”(hŒtable_pa”h]”hŒtable_pa”…”�”}”(hjÍ&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjš&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj$&ubjë )�”}”(hŒ"const struct pt_write_attrs *attrs”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hjæ&h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjâ&ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó&h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjâ&ubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjâ&ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjâ&ubh)�”}”(hhh]”j„)�”}”(hŒpt_write_attrs”h]”hŒpt_write_attrs”…”�”}”(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”NjD jG )�”}”jJ ]”jf&Œc.pt_install_table”†”asbuh1hhjâ&ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj='h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjâ&ubja )�”}”(hjd h]”hŒ*”…”�”}”(hjK'h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjâ&ubj„)�”}”(hŒattrs”h]”hŒattrs”…”�”}”(hjX'h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjâ&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj$&ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjì%h²hh³jý%h´KÏubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjè%h²hh³jý%h´KÏubah}”(h]”jã%ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jý%h´KÏhjå%h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ Write a table entry to the table”h]”hŒ Write a table entry to the table”…”�”}”(hj‚'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”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Ö‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hX>**Parameters** ``struct pt_state *pts`` Table index to change ``pt_oaddr_t table_pa`` CPU physical address of the lower table's memory ``const struct pt_write_attrs *attrs`` Attributes to modify the table index **Description** A table entry will return PT_ENTRY_TABLE from pt_load_entry(). The table_pa is the table at pts->level - 1. This is done by cmpxchg so pts must have the current entry loaded. The pts is updated with the installed entry. This must not be called if pt_can_have_table() == false. **Return** true if the table was installed successfully.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj¤'h]”hŒ Parameters”…”�”}”(hj¦'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¢'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÓhjž'ubjc)�”}”(hhh]”(jh)�”}”(hŒ/``struct pt_state *pts`` Table index to change ”h]”(jn)�”}”(hŒ``struct pt_state *pts``”h]”j/)�”}”(hjÃ'h]”hŒstruct pt_state *pts”…”�”}”(hjÅ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÁ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÐhj½'ubj)�”}”(hhh]”hÞ)�”}”(hŒTable index to change”h]”hŒTable index to change”…”�”}”(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&]”uh1jgh³jØ'h´KÐhjº'ubjh)�”}”(hŒI``pt_oaddr_t table_pa`` CPU physical address of the lower table's memory ”h]”(jn)�”}”(hŒ``pt_oaddr_t table_pa``”h]”j/)�”}”(hjü'h]”hŒpt_oaddr_t table_pa”…”�”}”(hjþ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjú'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÑhjö'ubj)�”}”(hhh]”hÞ)�”}”(hŒ0CPU physical address of the lower table's memory”h]”hŒ2CPU physical address of the lower table’s memory”…”�”}”(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&]”uh1jgh³j(h´KÑhjº'ubjh)�”}”(hŒL``const struct pt_write_attrs *attrs`` Attributes to modify the table index ”h]”(jn)�”}”(hŒ&``const struct pt_write_attrs *attrs``”h]”j/)�”}”(hj5(h]”hŒ"const struct pt_write_attrs *attrs”…”�”}”(hj7(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj3(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÒhj/(ubj)�”}”(hhh]”hÞ)�”}”(hŒ$Attributes to modify the table index”h]”hŒ$Attributes to modify the table index”…”�”}”(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&]”uh1jgh³jJ(h´KÒhjº'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhjž'ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjp(h]”hŒ Description”…”�”}”(hjr(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjn(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÔhjž'ubhÞ)�”}”(hŒÛA table entry will return PT_ENTRY_TABLE from pt_load_entry(). The table_pa is the table at pts->level - 1. This is done by cmpxchg so pts must have the current entry loaded. The pts is updated with the installed entry.”h]”hŒÛA table entry will return PT_ENTRY_TABLE from pt_load_entry(). The table_pa is the table at pts->level - 1. This is done by cmpxchg so pts must have the current entry loaded. The pts is updated with the installed entry.”…”�”}”(hj†(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÓhjž'ubhÞ)�”}”(hŒ8This must not be called if pt_can_have_table() == false.”h]”hŒ8This must not be called if pt_can_have_table() == false.”…”�”}”(hj•(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K×hjž'ubhÞ)�”}”(hŒ **Return**”h]”jâ)�”}”(hj¦(h]”hŒReturn”…”�”}”(hj¨(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¤(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÙhjž'ubhÞ)�”}”(hŒ-true if the table was installed successfully.”h]”hŒ-true if the table was installed successfully.”…”�”}”(hj¼(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÚhjž'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_item_oa (C function)”Œ c.pt_item_oa”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ2pt_oaddr_t pt_item_oa (const struct pt_state *pts)”h]”jU)�”}”(hŒ1pt_oaddr_t pt_item_oa(const struct pt_state *pts)”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_oaddr_t”h]”hŒ pt_oaddr_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”NjD jG )�”}”jJ ]”jM )�”}”j@ Œ pt_item_oa”sbŒ c.pt_item_oa”†”asbuh1hhjç(h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kàubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjç(h²hh³j)h´Kàubj~)�”}”(hŒ pt_item_oa”h]”j„)�”}”(hj )h]”hŒ pt_item_oa”…”�”}”(hj")h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj)ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjç(h²hh³j)h´Kàubjå )�”}”(hŒ(const struct pt_state *pts)”h]”jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hj=)h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj9)ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ)h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj9)ubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hjX)h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj9)ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje)h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj9)ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjv)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjs)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”jx)Œmodname”NŒ classname”NjD jG )�”}”jJ ]”j )Œ c.pt_item_oa”†”asbuh1hhj9)ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”)h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj9)ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj¢)h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj9)ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj¯)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj9)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj5)ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjç(h²hh³j)h´Kàubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjã(h²hh³j)h´Kàubah}”(h]”jÞ(ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j)h´Kàhjà(h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ!Output Address for this leaf item”h]”hŒ!Output Address for this leaf item”…”�”}”(hjÙ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”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Ö‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hX]**Parameters** ``const struct pt_state *pts`` Item to query **Description** Return the output address for this item. If the item is part of a contiguous entry it returns the value of the OA for this individual sub item. See pt_entry_oa(). The format should implement one of these two functions depending on how it stores the OA's in the table.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjû)h]”hŒ Parameters”…”�”}”(hjý)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjù)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kähjõ)ubjc)�”}”(hhh]”jh)�”}”(hŒ-``const struct pt_state *pts`` Item to query ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hj*h]”hŒconst struct pt_state *pts”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Káhj*ubj)�”}”(hhh]”hÞ)�”}”(hŒ Item to query”h]”hŒ Item to query”…”�”}”(hj3*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j/*h´Káhj0*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j/*h´Káhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjõ)ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjU*h]”hŒ Description”…”�”}”(hjW*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjS*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kãhjõ)ubhÞ)�”}”(hŒ�Return the output address for this item. If the item is part of a contiguous entry it returns the value of the OA for this individual sub item.”h]”hŒ�Return the output address for this item. If the item is part of a contiguous entry it returns the value of the OA for this individual sub item.”…”�”}”(hjk*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kâhjõ)ubhÞ)�”}”(hŒ{See pt_entry_oa(). The format should implement one of these two functions depending on how it stores the OA's in the table.”h]”hŒ}See pt_entry_oa(). The format should implement one of these two functions depending on how it stores the OA’s in the table.”…”�”}”(hjz*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kåhjõ)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_load_entry_raw (C function)”Œc.pt_load_entry_raw”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ;enum pt_entry_type pt_load_entry_raw (struct pt_state *pts)”h]”jU)�”}”(hŒ:enum pt_entry_type pt_load_entry_raw(struct pt_state *pts)”h]”(j[)�”}”(hjHh]”hŒenum”…”�”}”(hj©*h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj¥*h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kìubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·*h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¥*h²hh³j¶*h´Kìubh)�”}”(hhh]”j„)�”}”(hŒ pt_entry_type”h]”hŒ pt_entry_type”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ Œpt_load_entry_raw”sbŒc.pt_load_entry_raw”†”asbuh1hhj¥*h²hh³j¶*h´Kìubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé*h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¥*h²hh³j¶*h´Kìubj~)�”}”(hŒpt_load_entry_raw”h]”j„)�”}”(hjæ*h]”hŒpt_load_entry_raw”…”�”}”(hjû*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj÷*ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj¥*h²hh³j¶*h´Kìubjå )�”}”(hŒ(struct pt_state *pts)”h]”jë )�”}”(hŒstruct pt_state *pts”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj+ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#+h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj+ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jä*Œc.pt_load_entry_raw”†”asbuh1hhj+ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR+h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj+ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj`+h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj+ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjm+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj+ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj¥*h²hh³j¶*h´Kìubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj¡*h²hh³j¶*h´Kìubah}”(h]”jœ*ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j¶*h´Kìhjž*h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ1Read from the location pts points at into the pts”h]”hŒ1Read from the location pts points at into the pts”…”�”}”(hj—+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”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Ö‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hŒÅ**Parameters** ``struct pt_state *pts`` Table index to load **Description** Return the type of entry that was loaded. pts->entry will be filled in with the entry's content. See pt_load_entry()”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj¹+h]”hŒ Parameters”…”�”}”(hj»+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj·+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kðhj³+ubjc)�”}”(hhh]”jh)�”}”(hŒ-``struct pt_state *pts`` Table index to load ”h]”(jn)�”}”(hŒ``struct pt_state *pts``”h]”j/)�”}”(hjØ+h]”hŒstruct pt_state *pts”…”�”}”(hjÚ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÖ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KíhjÒ+ubj)�”}”(hhh]”hÞ)�”}”(hŒTable index to load”h]”hŒTable index to load”…”�”}”(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&]”uh1jgh³jí+h´KíhjÏ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj³+ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj,h]”hŒ Description”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kïhj³+ubhÞ)�”}”(hŒtReturn the type of entry that was loaded. pts->entry will be filled in with the entry's content. See pt_load_entry()”h]”hŒvReturn the type of entry that was loaded. pts->entry will be filled in with the entry’s content. See pt_load_entry()”…”�”}”(hj),h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kîhj³+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_max_oa_lg2 (C function)”Œc.pt_max_oa_lg2”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ;unsigned int pt_max_oa_lg2 (const struct pt_common *common)”h]”jU)�”}”(hŒ:unsigned int pt_max_oa_lg2(const struct pt_common *common)”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjX,h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjT,h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kõubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg,h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjT,h²hh³jf,h´Kõubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hju,h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjT,h²hh³jf,h´Kõubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ,h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjT,h²hh³jf,h´Kõubj~)�”}”(hŒ pt_max_oa_lg2”h]”j„)�”}”(hŒ pt_max_oa_lg2”h]”hŒ pt_max_oa_lg2”…”�”}”(hj•,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj‘,ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjT,h²hh³jf,h´Kõubjå )�”}”(hŒ (const struct pt_common *common)”h]”jë )�”}”(hŒconst struct pt_common *common”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hj±,h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj­,ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾,h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj­,ubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hjÌ,h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj­,ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ,h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj­,ubh)�”}”(hhh]”j„)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ j—,sbŒc.pt_max_oa_lg2”†”asbuh1hhj­,ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj­,ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj­,ubj„)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hj%-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj­,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj©,ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjT,h²hh³jf,h´Kõubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjP,h²hh³jf,h´Kõubah}”(h]”jK,ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jf,h´KõhjM,h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ/Return the maximum OA the table format can hold”h]”hŒ/Return the maximum OA the table format can hold”…”�”}”(hjO-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KõhjL-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjM,h²hh³jf,h´Kõubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjg-jÓjg-jÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hX***Parameters** ``const struct pt_common *common`` Page table to query **Description** The value oalog2_to_max_int(pt_max_oa_lg2()) is the MAX for the OA. This is the absolute maximum address the table can hold. struct pt_common max_oasz_lg2 sets a lower dynamic maximum based on HW capability.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjq-h]”hŒ Parameters”…”�”}”(hjs-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjo-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kùhjk-ubjc)�”}”(hhh]”jh)�”}”(hŒ7``const struct pt_common *common`` Page table to query ”h]”(jn)�”}”(hŒ"``const struct pt_common *common``”h]”j/)�”}”(hj�-h]”hŒconst struct pt_common *common”…”�”}”(hj’-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjŽ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KöhjŠ-ubj)�”}”(hhh]”hÞ)�”}”(hŒPage table to query”h]”hŒPage table to query”…”�”}”(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&]”uh1jgh³j¥-h´Köhj‡-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjk-ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjË-h]”hŒ Description”…”�”}”(hjÍ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÉ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Køhjk-ubhÞ)�”}”(hŒÏThe value oalog2_to_max_int(pt_max_oa_lg2()) is the MAX for the OA. This is the absolute maximum address the table can hold. struct pt_common max_oasz_lg2 sets a lower dynamic maximum based on HW capability.”h]”hŒÏThe value oalog2_to_max_int(pt_max_oa_lg2()) is the MAX for the OA. This is the absolute maximum address the table can hold. struct pt_common max_oasz_lg2 sets a lower dynamic maximum based on HW capability.”…”�”}”(hjá-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K÷hjk-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_num_items_lg2 (C function)”Œc.pt_num_items_lg2”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ:unsigned int pt_num_items_lg2 (const struct pt_state *pts)”h]”jU)�”}”(hŒ9unsigned int pt_num_items_lg2(const struct pt_state *pts)”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj .h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj .h²hh³j.h´Mubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hj-.h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj .h²hh³j.h´Mubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;.h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj .h²hh³j.h´Mubj~)�”}”(hŒpt_num_items_lg2”h]”j„)�”}”(hŒpt_num_items_lg2”h]”hŒpt_num_items_lg2”…”�”}”(hjM.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjI.ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj .h²hh³j.h´Mubjå )�”}”(hŒ(const struct pt_state *pts)”h]”jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hji.h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhje.ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv.h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhje.ubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hj„.h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhje.ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘.h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhje.ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ jO.sbŒc.pt_num_items_lg2”†”asbuh1hhje.ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ.h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhje.ubja )�”}”(hjd h]”hŒ*”…”�”}”(hjÐ.h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hje.ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjÝ.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhje.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hja.ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj .h²hh³j.h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj.h²hh³j.h´Mubah}”(h]”j.ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j.h´Mhj.h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ.Return the number of items in this table level”h]”hŒ.Return the number of items in this table level”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”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Ö‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hXó**Parameters** ``const struct pt_state *pts`` The current level **Description** The number of items in a table level defines the number of bits this level decodes from the VA. This function is not called for the top level, so it does not need to compute a special value for the top case. The result for the top is based on pt_common max_vasz_lg2. The value is used as part of determining the table indexes via the equation:: log2_mod(log2_div(VA, pt_table_item_lg2sz()), pt_num_items_lg2())”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj)/h]”hŒ Parameters”…”�”}”(hj+/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj'/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj#/ubjc)�”}”(hhh]”jh)�”}”(hŒ1``const struct pt_state *pts`` The current level ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hjH/h]”hŒconst struct pt_state *pts”…”�”}”(hjJ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjF/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MhjB/ubj)�”}”(hhh]”hÞ)�”}”(hŒThe current level”h]”hŒThe current level”…”�”}”(hja/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j]/h´Mhj^/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjB/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j]/h´Mhj?/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj#/ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjƒ/h]”hŒ Description”…”�”}”(hj…/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj�/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj#/ubhÞ)�”}”(hX The number of items in a table level defines the number of bits this level decodes from the VA. This function is not called for the top level, so it does not need to compute a special value for the top case. The result for the top is based on pt_common max_vasz_lg2.”h]”hX The number of items in a table level defines the number of bits this level decodes from the VA. This function is not called for the top level, so it does not need to compute a special value for the top case. The result for the top is based on pt_common max_vasz_lg2.”…”�”}”(hj™/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj#/ubhÞ)�”}”(hŒMThe value is used as part of determining the table indexes via the equation::”h]”hŒLThe value is used as part of determining the table indexes via the equation:”…”�”}”(hj¨/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj#/ubjÄ)�”}”(hŒAlog2_mod(log2_div(VA, pt_table_item_lg2sz()), pt_num_items_lg2())”h]”hŒAlog2_mod(log2_div(VA, pt_table_item_lg2sz()), pt_num_items_lg2())”…”�”}”hj·/sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÃh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M hj#/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ!pt_pgsz_lg2_to_level (C function)”Œc.pt_pgsz_lg2_to_level”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒUunsigned int pt_pgsz_lg2_to_level (struct pt_common *common, unsigned int pgsize_lg2)”h]”jU)�”}”(hŒTunsigned int pt_pgsz_lg2_to_level(struct pt_common *common, unsigned int pgsize_lg2)”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjæ/h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjâ/h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ/h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjâ/h²hh³jô/h´Mubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjâ/h²hh³jô/h´Mubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjâ/h²hh³jô/h´Mubj~)�”}”(hŒpt_pgsz_lg2_to_level”h]”j„)�”}”(hŒpt_pgsz_lg2_to_level”h]”hŒpt_pgsz_lg2_to_level”…”�”}”(hj#0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj0ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjâ/h²hh³jô/h´Mubjå )�”}”(hŒ3(struct pt_common *common, unsigned int pgsize_lg2)”h]”(jë )�”}”(hŒstruct pt_common *common”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj?0h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj;0ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL0h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj;0ubh)�”}”(hhh]”j„)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hj]0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjZ0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”j_0Œmodname”NŒ classname”NjD jG )�”}”jJ ]”jM )�”}”j@ j%0sbŒc.pt_pgsz_lg2_to_level”†”asbuh1hhj;0ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}0h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj;0ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj‹0h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj;0ubj„)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hj˜0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj;0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj70ubjë )�”}”(hŒunsigned int pgsize_lg2”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj±0h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj­0ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿0h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj­0ubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjÍ0h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj­0ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ0h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj­0ubj„)�”}”(hŒ pgsize_lg2”h]”hŒ pgsize_lg2”…”�”}”(hjé0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj­0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj70ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjâ/h²hh³jô/h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjÞ/h²hh³jô/h´Mubah}”(h]”jÙ/ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jô/h´MhjÛ/h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ(Return the level that maps the page size”h]”hŒ(Return the level that maps the page size”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjÛ/h²hh³jô/h´Mubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj+1jÓj+1jÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hX**Parameters** ``struct pt_common *common`` Page table to query ``unsigned int pgsize_lg2`` Log2 page size **Description** Returns the table level that will map the given page size. The page size must be part of the pt_possible_sizes() for some level.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj51h]”hŒ Parameters”…”�”}”(hj71h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj31ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj/1ubjc)�”}”(hhh]”(jh)�”}”(hŒ1``struct pt_common *common`` Page table to query ”h]”(jn)�”}”(hŒ``struct pt_common *common``”h]”j/)�”}”(hjT1h]”hŒstruct pt_common *common”…”�”}”(hjV1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjR1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MhjN1ubj)�”}”(hhh]”hÞ)�”}”(hŒPage table to query”h]”hŒPage table to query”…”�”}”(hjm1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³ji1h´Mhjj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjN1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³ji1h´MhjK1ubjh)�”}”(hŒ+``unsigned int pgsize_lg2`` Log2 page size ”h]”(jn)�”}”(hŒ``unsigned int pgsize_lg2``”h]”j/)�”}”(hj�1h]”hŒunsigned int pgsize_lg2”…”�”}”(hj�1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj‹1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj‡1ubj)�”}”(hhh]”hÞ)�”}”(hŒLog2 page size”h]”hŒLog2 page size”…”�”}”(hj¦1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¢1h´Mhj£1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj‡1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j¢1h´MhjK1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhj/1ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjÈ1h]”hŒ Description”…”�”}”(hjÊ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÆ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj/1ubhÞ)�”}”(hŒ€Returns the table level that will map the given page size. The page size must be part of the pt_possible_sizes() for some level.”h]”hŒ€Returns the table level that will map the given page size. The page size must be part of the pt_possible_sizes() for some level.”…”�”}”(hjÞ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj/1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_possible_sizes (C function)”Œc.pt_possible_sizes”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ9pt_vaddr_t pt_possible_sizes (const struct pt_state *pts)”h]”jU)�”}”(hŒ8pt_vaddr_t pt_possible_sizes(const struct pt_state *pts)”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_vaddr_t”h]”hŒ pt_vaddr_t”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ Œpt_possible_sizes”sbŒc.pt_possible_sizes”†”asbuh1hhj 2h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj22h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj 2h²hh³j12h´Mubj~)�”}”(hŒpt_possible_sizes”h]”j„)�”}”(hj.2h]”hŒpt_possible_sizes”…”�”}”(hjD2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj@2ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj 2h²hh³j12h´Mubjå )�”}”(hŒ(const struct pt_state *pts)”h]”jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hj_2h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj[2ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl2h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj[2ubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hjz2h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj[2ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡2h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj[2ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”j,2Œc.pt_possible_sizes”†”asbuh1hhj[2ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶2h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj[2ubja )�”}”(hjd h]”hŒ*”…”�”}”(hjÄ2h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj[2ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjÑ2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj[2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjW2ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj 2h²hh³j12h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj2h²hh³j12h´Mubah}”(h]”j2ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j12h´Mhj2h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ6Return a bitmap of possible output sizes at this level”h]”hŒ6Return a bitmap of possible output sizes at this level”…”�”}”(hjû2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhjø2h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj2h²hh³j12h´Mubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj3jÓj3jÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hX©**Parameters** ``const struct pt_state *pts`` The current level **Description** Each level has a list of possible output sizes that can be installed as leaf entries. If pt_can_have_leaf() is false returns zero. Otherwise the bit in position pt_table_item_lg2sz() should be set indicating that a non-contiguous single item leaf entry is supported. The following pt_num_items_lg2() number of bits can be set indicating contiguous entries are supported. Bit pt_table_item_lg2sz() + pt_num_items_lg2() must not be set, contiguous entries cannot span the entire table. The OR of pt_possible_sizes() of all levels is the typical bitmask of all supported sizes in the entire table.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj3h]”hŒ Parameters”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj3ubjc)�”}”(hhh]”jh)�”}”(hŒ1``const struct pt_state *pts`` The current level ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hj<3h]”hŒconst struct pt_state *pts”…”�”}”(hj>3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj:3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj63ubj)�”}”(hhh]”hÞ)�”}”(hŒThe current level”h]”hŒThe current level”…”�”}”(hjU3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jQ3h´MhjR3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj63ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jQ3h´Mhj33ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj3ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjw3h]”hŒ Description”…”�”}”(hjy3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhju3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj3ubhÞ)�”}”(hŒ‚Each level has a list of possible output sizes that can be installed as leaf entries. If pt_can_have_leaf() is false returns zero.”h]”hŒ‚Each level has a list of possible output sizes that can be installed as leaf entries. If pt_can_have_leaf() is false returns zero.”…”�”}”(hj�3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj3ubhÞ)�”}”(hX`Otherwise the bit in position pt_table_item_lg2sz() should be set indicating that a non-contiguous single item leaf entry is supported. The following pt_num_items_lg2() number of bits can be set indicating contiguous entries are supported. Bit pt_table_item_lg2sz() + pt_num_items_lg2() must not be set, contiguous entries cannot span the entire table.”h]”hX`Otherwise the bit in position pt_table_item_lg2sz() should be set indicating that a non-contiguous single item leaf entry is supported. The following pt_num_items_lg2() number of bits can be set indicating contiguous entries are supported. Bit pt_table_item_lg2sz() + pt_num_items_lg2() must not be set, contiguous entries cannot span the entire table.”…”�”}”(hjœ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M hj3ubhÞ)�”}”(hŒnThe OR of pt_possible_sizes() of all levels is the typical bitmask of all supported sizes in the entire table.”h]”hŒnThe OR of pt_possible_sizes() of all levels is the typical bitmask of all supported sizes in the entire table.”…”�”}”(hj«3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M&hj3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ pt_table_item_lg2sz (C function)”Œc.pt_table_item_lg2sz”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ=unsigned int pt_table_item_lg2sz (const struct pt_state *pts)”h]”jU)�”}”(hŒ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MShj::ubjc)�”}”(hhh]”jh)�”}”(hŒ.``const struct pt_state *pts`` Entry to query ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hj_:h]”hŒconst struct pt_state *pts”…”�”}”(hja:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj]:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MPhjY:ubj)�”}”(hhh]”hÞ)�”}”(hŒEntry to query”h]”hŒEntry to query”…”�”}”(hjx:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jt:h´MPhju:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjY:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jt:h´MPhjV:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj::ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjš:h]”hŒ Description”…”�”}”(hjœ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj˜:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MRhj::ubhÞ)�”}”(hŒ0Same as pt_table_pa() but returns a CPU pointer.”h]”hŒ0Same as pt_table_pa() but returns a CPU pointer.”…”�”}”(hj°:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MQhj::ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_max_sw_bit (C function)”Œc.pt_max_sw_bit”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ5unsigned int pt_max_sw_bit (struct pt_common *common)”h]”jU)�”}”(hŒ4unsigned int pt_max_sw_bit(struct pt_common *common)”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjß:h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjÛ:h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MZubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî:h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÛ:h²hh³jí:h´MZubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjü:h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjÛ:h²hh³jí:h´MZubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ;h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÛ:h²hh³jí:h´MZubj~)�”}”(hŒ pt_max_sw_bit”h]”j„)�”}”(hŒ pt_max_sw_bit”h]”hŒ pt_max_sw_bit”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj;ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjÛ:h²hh³jí:h´MZubjå )�”}”(hŒ(struct pt_common *common)”h]”jë )�”}”(hŒstruct pt_common *common”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj8;h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj4;ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE;h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj4;ubh)�”}”(hhh]”j„)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hjV;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjS;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”jX;Œmodname”NŒ classname”NjD jG )�”}”jJ ]”jM )�”}”j@ j;sbŒc.pt_max_sw_bit”†”asbuh1hhj4;ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv;h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj4;ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj„;h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj4;ubj„)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hj‘;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj4;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj0;ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjÛ:h²hh³jí:h´MZubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj×:h²hh³jí:h´MZubah}”(h]”jÒ:ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jí:h´MZhjÔ:h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ>Return the maximum software bit usable for any level and entry”h]”hŒ>Return the maximum software bit usable for any level and entry”…”�”}”(hj»;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MZhj¸;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjÔ:h²hh³jí:h´MZubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjÓ;jÓjÓ;jÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hŒ‹**Parameters** ``struct pt_common *common`` Page table **Description** The swbit can be passed as bitnr to the other sw_bit functions.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjÝ;h]”hŒ Parameters”…”�”}”(hjß;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÛ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M^hj×;ubjc)�”}”(hhh]”jh)�”}”(hŒ(``struct pt_common *common`` Page table ”h]”(jn)�”}”(hŒ``struct pt_common *common``”h]”j/)�”}”(hjü;h]”hŒstruct pt_common *common”…”�”}”(hjþ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjú;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M\hjö;ubj)�”}”(hhh]”hÞ)�”}”(hŒ Page table”h]”hŒ Page table”…”�”}”(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&]”uh1jgh³j<h´M\hjó;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj×;ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj7<h]”hŒ Description”…”�”}”(hj9<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj5<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M^hj×;ubhÞ)�”}”(hŒ?The swbit can be passed as bitnr to the other sw_bit functions.”h]”hŒ?The swbit can be passed as bitnr to the other sw_bit functions.”…”�”}”(hjM<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M]hj×;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ#pt_test_sw_bit_acquire (C function)”Œc.pt_test_sw_bit_acquire”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒFbool pt_test_sw_bit_acquire (struct pt_state *pts, unsigned int bitnr)”h]”jU)�”}”(hŒEbool pt_test_sw_bit_acquire(struct pt_state *pts, unsigned int bitnr)”h]”(j­ )�”}”(hj h]”hŒbool”…”�”}”(hj|<h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjx<h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mcubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ<h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjx<h²hh³j‰<h´Mcubj~)�”}”(hŒpt_test_sw_bit_acquire”h]”j„)�”}”(hŒpt_test_sw_bit_acquire”h]”hŒpt_test_sw_bit_acquire”…”�”}”(hjœ<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj˜<ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjx<h²hh³j‰<h´Mcubjå )�”}”(hŒ*(struct pt_state *pts, unsigned int bitnr)”h]”(jë )�”}”(hŒstruct pt_state *pts”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj¸<h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj´<ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ<h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj´<ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ jž<sbŒc.pt_test_sw_bit_acquire”†”asbuh1hhj´<ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö<h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj´<ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj´<ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj´<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj°<ubjë )�”}”(hŒunsigned int bitnr”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj*=h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj&=ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8=h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj&=ubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjF=h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj&=ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT=h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj&=ubj„)�”}”(hŒbitnr”h]”hŒbitnr”…”�”}”(hjb=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj&=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj°<ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjx<h²hh³j‰<h´Mcubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjt<h²hh³j‰<h´Mcubah}”(h]”jo<ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j‰<h´Mchjq<h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒRead a software bit in an item”h]”hŒRead a software bit in an item”…”�”}”(hjŒ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mchj‰=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjq<h²hh³j‰<h´Mcubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj¤=jÓj¤=jÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hŒí**Parameters** ``struct pt_state *pts`` Entry to read ``unsigned int bitnr`` Bit to read **Description** Software bits are ignored by HW and can be used for any purpose by the software. This does a test bit and acquire operation.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj®=h]”hŒ Parameters”…”�”}”(hj°=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¬=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mghj¨=ubjc)�”}”(hhh]”(jh)�”}”(hŒ'``struct pt_state *pts`` Entry to read ”h]”(jn)�”}”(hŒ``struct pt_state *pts``”h]”j/)�”}”(hjÍ=h]”hŒstruct pt_state *pts”…”�”}”(hjÏ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjË=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MdhjÇ=ubj)�”}”(hhh]”hÞ)�”}”(hŒ Entry to read”h]”hŒ Entry to read”…”�”}”(hjæ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jâ=h´Mdhjã=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÇ=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jâ=h´MdhjÄ=ubjh)�”}”(hŒ#``unsigned int bitnr`` Bit to read ”h]”(jn)�”}”(hŒ``unsigned int bitnr``”h]”j/)�”}”(hj>h]”hŒunsigned int bitnr”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mehj>ubj)�”}”(hhh]”hÞ)�”}”(hŒ Bit to read”h]”hŒ Bit to read”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j>h´Mehj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j>h´MehjÄ=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhj¨=ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjA>h]”hŒ Description”…”�”}”(hjC>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj?>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mghj¨=ubhÞ)�”}”(hŒ|Software bits are ignored by HW and can be used for any purpose by the software. This does a test bit and acquire operation.”h]”hŒ|Software bits are ignored by HW and can be used for any purpose by the software. This does a test bit and acquire operation.”…”�”}”(hjW>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mfhj¨=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ"pt_set_sw_bit_release (C function)”Œc.pt_set_sw_bit_release”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒEvoid pt_set_sw_bit_release (struct pt_state *pts, unsigned int bitnr)”h]”jU)�”}”(hŒDvoid pt_set_sw_bit_release(struct pt_state *pts, unsigned int bitnr)”h]”(j­ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj†>h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj‚>h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mnubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•>h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj‚>h²hh³j”>h´Mnubj~)�”}”(hŒpt_set_sw_bit_release”h]”j„)�”}”(hŒpt_set_sw_bit_release”h]”hŒpt_set_sw_bit_release”…”�”}”(hj§>h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj£>ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj‚>h²hh³j”>h´Mnubjå )�”}”(hŒ*(struct pt_state *pts, unsigned int bitnr)”h]”(jë )�”}”(hŒstruct pt_state *pts”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hjÃ>h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj¿>ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐ>h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¿>ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ j©>sbŒc.pt_set_sw_bit_release”†”asbuh1hhj¿>ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¿>ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj¿>ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj¿>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj»>ubjë )�”}”(hŒunsigned int bitnr”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj5?h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj1?ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC?h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj1?ubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjQ?h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj1?ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_?h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj1?ubj„)�”}”(hŒbitnr”h]”hŒbitnr”…”�”}”(hjm?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj1?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj»>ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj‚>h²hh³j”>h´Mnubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj~>h²hh³j”>h´Mnubah}”(h]”jy>ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j”>h´Mnhj{>h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒSet a software bit in an item”h]”hŒSet a software bit in an item”…”�”}”(hj—?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mnhj”?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj{>h²hh³j”>h´Mnubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj¯?jÓj¯?jÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hŒê**Parameters** ``struct pt_state *pts`` Entry to set ``unsigned int bitnr`` Bit to set **Description** Software bits are ignored by HW and can be used for any purpose by the software. This does a set bit and release operation.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj¹?h]”hŒ Parameters”…”�”}”(hj»?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj·?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mrhj³?ubjc)�”}”(hhh]”(jh)�”}”(hŒ&``struct pt_state *pts`` Entry to set ”h]”(jn)�”}”(hŒ``struct pt_state *pts``”h]”j/)�”}”(hjØ?h]”hŒstruct pt_state *pts”…”�”}”(hjÚ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÖ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MohjÒ?ubj)�”}”(hhh]”hÞ)�”}”(hŒ Entry to set”h]”hŒ Entry to set”…”�”}”(hjñ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jí?h´Mohjî?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÒ?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jí?h´MohjÏ?ubjh)�”}”(hŒ"``unsigned int bitnr`` Bit to set ”h]”(jn)�”}”(hŒ``unsigned int bitnr``”h]”j/)�”}”(hj@h]”hŒunsigned int bitnr”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mphj @ubj)�”}”(hhh]”hÞ)�”}”(hŒ Bit to set”h]”hŒ Bit to set”…”�”}”(hj*@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j&@h´Mphj'@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj @ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j&@h´MphjÏ?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhj³?ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjL@h]”hŒ Description”…”�”}”(hjN@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjJ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mrhj³?ubhÞ)�”}”(hŒ{Software bits are ignored by HW and can be used for any purpose by the software. This does a set bit and release operation.”h]”hŒ{Software bits are ignored by HW and can be used for any purpose by the software. This does a set bit and release operation.”…”�”}”(hjb@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mqhj³?ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_load_entry (C function)”Œc.pt_load_entry”hNt”auh1j8hj'h²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ)void pt_load_entry (struct pt_state *pts)”h]”jU)�”}”(hŒ(void pt_load_entry(struct pt_state *pts)”h]”(j­ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‘@h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj�@h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Myubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj @h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj�@h²hh³jŸ@h´Myubj~)�”}”(hŒ pt_load_entry”h]”j„)�”}”(hŒ pt_load_entry”h]”hŒ pt_load_entry”…”�”}”(hj²@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj®@ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj�@h²hh³jŸ@h´Myubjå )�”}”(hŒ(struct pt_state *pts)”h]”jë )�”}”(hŒstruct pt_state *pts”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hjÎ@h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjÊ@ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ@h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÊ@ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ j´@sbŒc.pt_load_entry”†”asbuh1hhjÊ@ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÊ@ubja )�”}”(hjd h]”hŒ*”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjÊ@ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj'Ah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjÊ@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjÆ@ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj�@h²hh³jŸ@h´Myubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj‰@h²hh³jŸ@h´Myubah}”(h]”j„@ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jŸ@h´Myhj†@h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ1Read from the location pts points at into the pts”h]”hŒ1Read from the location pts points at into the pts”…”�”}”(hjQAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MyhjNAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj†@h²hh³jŸ@h´Myubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjiAjÓjiAjÔ‰jÕ‰jÖ‰uh1jIh²hhj'h³Nh´NubjØ)�”}”(hŒÃ**Parameters** ``struct pt_state *pts`` Table index to load **Description** Set the type of entry that was loaded. pts->entry and pts->table_lower will be filled in with the entry's content.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjsAh]”hŒ Parameters”…”�”}”(hjuAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjqAubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M}hjmAubjc)�”}”(hhh]”jh)�”}”(hŒ-``struct pt_state *pts`` Table index to load ”h]”(jn)�”}”(hŒ``struct pt_state *pts``”h]”j/)�”}”(hj’Ah]”hŒstruct pt_state *pts”…”�”}”(hj”Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj�Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MzhjŒAubj)�”}”(hhh]”hÞ)�”}”(hŒTable index to load”h]”hŒTable index to load”…”�”}”(hj«Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j§Ah´Mzhj¨Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjŒAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j§Ah´Mzhj‰Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjmAubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjÍAh]”hŒ Description”…”�”}”(hjÏAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjËAubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M|hjmAubhÞ)�”}”(hŒrSet the type of entry that was loaded. pts->entry and pts->table_lower will be filled in with the entry's content.”h]”hŒtSet the type of entry that was loaded. pts->entry and pts->table_lower will be filled in with the entry’s content.”…”�”}”(hjãAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M{hjmAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hj'h²hh³Nh´Nubeh}”(h]”Œ.format-functions-at-the-struct-pt-common-level”ah ]”h"]”Œ.format functions at the struct pt_common level”ah$]”h&]”uh1hÈhjzh²hh³hÇh´K@ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒIteration Helpers”h]”hŒIteration Helpers”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjBh²hh³hÇh´KGubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_check_range (C function)”Œc.pt_check_range”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ+int pt_check_range (struct pt_range *range)”h]”jU)�”}”(hŒ*int pt_check_range(struct pt_range *range)”h]”(j­ )�”}”(hŒint”h]”hŒint”…”�”}”(hj+Bh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj'Bh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:Bh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj'Bh²hh³j9Bh´Kubj~)�”}”(hŒpt_check_range”h]”j„)�”}”(hŒpt_check_range”h]”hŒpt_check_range”…”�”}”(hjLBh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjHBubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj'Bh²hh³j9Bh´Kubjå )�”}”(hŒ(struct pt_range *range)”h]”jë )�”}”(hŒstruct pt_range *range”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hjhBh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjdBubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuBh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjdBubh)�”}”(hhh]”j„)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ jNBsbŒc.pt_check_range”†”asbuh1hhjdBubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦Bh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjdBubja )�”}”(hjd h]”hŒ*”…”�”}”(hj´Bh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjdBubj„)�”}”(hŒrange”h]”hŒrange”…”�”}”(hjÁBh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjdBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj`Bubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj'Bh²hh³j9Bh´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj#Bh²hh³j9Bh´Kubah}”(h]”jBah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j9Bh´Khj Bh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ"Validate the range can be iterated”h]”hŒ"Validate the range can be iterated”…”�”}”(hjëBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KhjèBh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj Bh²hh³j9Bh´Kubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjCjÓjCjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hŒò**Parameters** ``struct pt_range *range`` Range to validate **Description** Check that VA and last_va fall within the permitted range of VAs. If the format is using PT_FEAT_SIGN_EXTEND then this also checks the sign extension is correct.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj Ch]”hŒ Parameters”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj Cubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KhjCubjc)�”}”(hhh]”jh)�”}”(hŒ-``struct pt_range *range`` Range to validate ”h]”(jn)�”}”(hŒ``struct pt_range *range``”h]”j/)�”}”(hj,Ch]”hŒstruct pt_range *range”…”�”}”(hj.Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj*Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Khj&Cubj)�”}”(hhh]”hÞ)�”}”(hŒRange to validate”h]”hŒRange to validate”…”�”}”(hjECh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jACh´KhjBCubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj&Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jACh´Khj#Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjCubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjgCh]”hŒ Description”…”�”}”(hjiCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjeCubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KhjCubhÞ)�”}”(hŒ¡Check that VA and last_va fall within the permitted range of VAs. If the format is using PT_FEAT_SIGN_EXTEND then this also checks the sign extension is correct.”h]”hŒ¡Check that VA and last_va fall within the permitted range of VAs. If the format is using PT_FEAT_SIGN_EXTEND then this also checks the sign extension is correct.”…”�”}”(hj}Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KhjCubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_index_to_va (C function)”Œc.pt_index_to_va”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ*void pt_index_to_va (struct pt_state *pts)”h]”jU)�”}”(hŒ)void pt_index_to_va(struct pt_state *pts)”h]”(j­ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¬Ch²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj¨Ch²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K2ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»Ch²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¨Ch²hh³jºCh´K2ubj~)�”}”(hŒpt_index_to_va”h]”j„)�”}”(hŒpt_index_to_va”h]”hŒpt_index_to_va”…”�”}”(hjÍCh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjÉCubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj¨Ch²hh³jºCh´K2ubjå )�”}”(hŒ(struct pt_state *pts)”h]”jë )�”}”(hŒstruct pt_state *pts”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hjéCh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjåCubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöCh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjåCubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjDubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”j DŒmodname”NŒ classname”NjD jG )�”}”jJ ]”jM )�”}”j@ jÏCsbŒc.pt_index_to_va”†”asbuh1hhjåCubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'Dh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjåCubja )�”}”(hjd h]”hŒ*”…”�”}”(hj5Dh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjåCubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjBDh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjåCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjáCubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj¨Ch²hh³jºCh´K2ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj¤Ch²hh³jºCh´K2ubah}”(h]”jŸCah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jºCh´K2hj¡Ch²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ*Update range->va to the current pts->index”h]”hŒ*Update range->va to the current pts->index”…”�”}”(hjlDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K2hjiDh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj¡Ch²hh³jºCh´K2ubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj„DjÓj„DjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hŒá**Parameters** ``struct pt_state *pts`` Iteration State **Description** Adjust range->va to match the current index. This is done in a lazy manner since computing the VA takes several instructions and is rarely required.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjŽDh]”hŒ Parameters”…”�”}”(hj�Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjŒDubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K6hjˆDubjc)�”}”(hhh]”jh)�”}”(hŒ)``struct pt_state *pts`` Iteration State ”h]”(jn)�”}”(hŒ``struct pt_state *pts``”h]”j/)�”}”(hj­Dh]”hŒstruct pt_state *pts”…”�”}”(hj¯Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj«Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K3hj§Dubj)�”}”(hhh]”hÞ)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hjÆDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÂDh´K3hjÃDubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj§Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jÂDh´K3hj¤Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjˆDubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjèDh]”hŒ Description”…”�”}”(hjêDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjæDubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K5hjˆDubhÞ)�”}”(hŒ”Adjust range->va to match the current index. This is done in a lazy manner since computing the VA takes several instructions and is rarely required.”h]”hŒ”Adjust range->va to match the current index. This is done in a lazy manner since computing the VA takes several instructions and is rarely required.”…”�”}”(hjþDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K4hjˆDubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ#pt_entry_fully_covered (C function)”Œc.pt_entry_fully_covered”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒObool pt_entry_fully_covered (const struct pt_state *pts, unsigned int oasz_lg2)”h]”jU)�”}”(hŒNbool pt_entry_fully_covered(const struct pt_state *pts, unsigned int oasz_lg2)”h]”(j­ )�”}”(hj h]”hŒbool”…”�”}”(hj-Eh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj)Eh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KMubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;Eh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj)Eh²hh³j:Eh´KMubj~)�”}”(hŒpt_entry_fully_covered”h]”j„)�”}”(hŒpt_entry_fully_covered”h]”hŒpt_entry_fully_covered”…”�”}”(hjMEh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjIEubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj)Eh²hh³j:Eh´KMubjå )�”}”(hŒ3(const struct pt_state *pts, unsigned int oasz_lg2)”h]”(jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hjiEh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjeEubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvEh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjeEubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hj„Eh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjeEubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘Eh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjeEubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ jOEsbŒc.pt_entry_fully_covered”†”asbuh1hhjeEubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂEh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjeEubja )�”}”(hjd h]”hŒ*”…”�”}”(hjÐEh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjeEubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjÝEh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjeEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjaEubjë )�”}”(hŒunsigned int oasz_lg2”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjöEh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjòEubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjòEubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjòEubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Fh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjòEubj„)�”}”(hŒoasz_lg2”h]”hŒoasz_lg2”…”�”}”(hj.Fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjòEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjaEubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj)Eh²hh³j:Eh´KMubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj%Eh²hh³j:Eh´KMubah}”(h]”j Eah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j:Eh´KMhj"Eh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒBCheck if the item or entry is entirely contained within pts->range”h]”hŒBCheck if the item or entry is entirely contained within pts->range”…”�”}”(hjXFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KMhjUFh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj"Eh²hh³j:Eh´KMubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjpFjÓjpFjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hŒî**Parameters** ``const struct pt_state *pts`` Iteration State ``unsigned int oasz_lg2`` The size of the item to check, pt_table_item_lg2sz() or pt_entry_oa_lg2sz() **Return** true if the item is fully enclosed by the pts->range.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjzFh]”hŒ Parameters”…”�”}”(hj|Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjxFubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KQhjtFubjc)�”}”(hhh]”(jh)�”}”(hŒ/``const struct pt_state *pts`` Iteration State ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hj™Fh]”hŒconst struct pt_state *pts”…”�”}”(hj›Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj—Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KOhj“Fubj)�”}”(hhh]”hÞ)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hj²Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j®Fh´KOhj¯Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj“Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j®Fh´KOhj�Fubjh)�”}”(hŒf``unsigned int oasz_lg2`` The size of the item to check, pt_table_item_lg2sz() or pt_entry_oa_lg2sz() ”h]”(jn)�”}”(hŒ``unsigned int oasz_lg2``”h]”j/)�”}”(hjÒFh]”hŒunsigned int oasz_lg2”…”�”}”(hjÔFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÐFubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KQhjÌFubj)�”}”(hhh]”hÞ)�”}”(hŒKThe size of the item to check, pt_table_item_lg2sz() or pt_entry_oa_lg2sz()”h]”hŒKThe size of the item to check, pt_table_item_lg2sz() or pt_entry_oa_lg2sz()”…”�”}”(hjëFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KPhjèFubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÌFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jçFh´KQhj�Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhjtFubhÞ)�”}”(hŒ **Return**”h]”jâ)�”}”(hjGh]”hŒReturn”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj Gubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KShjtFubhÞ)�”}”(hŒ5true if the item is fully enclosed by the pts->range.”h]”hŒ5true if the item is fully enclosed by the pts->range.”…”�”}”(hj$Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KShjtFubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_range_to_index (C function)”Œc.pt_range_to_index”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ;unsigned int pt_range_to_index (const struct pt_state *pts)”h]”jU)�”}”(hŒ:unsigned int pt_range_to_index(const struct pt_state *pts)”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjSGh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjOGh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kgubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbGh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjOGh²hh³jaGh´Kgubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjpGh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjOGh²hh³jaGh´Kgubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~Gh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjOGh²hh³jaGh´Kgubj~)�”}”(hŒpt_range_to_index”h]”j„)�”}”(hŒpt_range_to_index”h]”hŒpt_range_to_index”…”�”}”(hj�Gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjŒGubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjOGh²hh³jaGh´Kgubjå )�”}”(hŒ(const struct pt_state *pts)”h]”jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hj¬Gh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj¨Gubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹Gh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¨Gubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hjÇGh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj¨Gubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔGh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¨Gubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ j’GsbŒc.pt_range_to_index”†”asbuh1hhj¨Gubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¨Gubja )�”}”(hjd h]”hŒ*”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj¨Gubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj Hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj¨Gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj¤Gubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjOGh²hh³jaGh´Kgubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjKGh²hh³jaGh´Kgubah}”(h]”jFGah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jaGh´KghjHGh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒStarting index for an iteration”h]”hŒStarting index for an iteration”…”�”}”(hjJHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KghjGHh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjHGh²hh³jaGh´Kgubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjbHjÓjbHjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hŒz**Parameters** ``const struct pt_state *pts`` Iteration State **Return** the starting index for the iteration in pts.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjlHh]”hŒ Parameters”…”�”}”(hjnHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjjHubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KkhjfHubjc)�”}”(hhh]”jh)�”}”(hŒ/``const struct pt_state *pts`` Iteration State ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hj‹Hh]”hŒconst struct pt_state *pts”…”�”}”(hj�Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj‰Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Khhj…Hubj)�”}”(hhh]”hÞ)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hj¤Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j Hh´Khhj¡Hubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj…Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j Hh´Khhj‚Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjfHubhÞ)�”}”(hŒ **Return**”h]”jâ)�”}”(hjÆHh]”hŒReturn”…”�”}”(hjÈHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÄHubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KjhjfHubhÞ)�”}”(hŒ,the starting index for the iteration in pts.”h]”hŒ,the starting index for the iteration in pts.”…”�”}”(hjÜHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KjhjfHubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ"pt_range_to_end_index (C function)”Œc.pt_range_to_end_index”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ?unsigned int pt_range_to_end_index (const struct pt_state *pts)”h]”jU)�”}”(hŒ>unsigned int pt_range_to_end_index(const struct pt_state *pts)”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj Ih²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjIh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kzubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjIh²hh³jIh´Kzubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hj(Ih²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjIh²hh³jIh´Kzubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6Ih²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjIh²hh³jIh´Kzubj~)�”}”(hŒpt_range_to_end_index”h]”j„)�”}”(hŒpt_range_to_end_index”h]”hŒpt_range_to_end_index”…”�”}”(hjHIh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjDIubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjIh²hh³jIh´Kzubjå )�”}”(hŒ(const struct pt_state *pts)”h]”jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hjdIh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj`Iubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqIh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj`Iubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj`Iubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒIh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj`Iubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ jJIsbŒc.pt_range_to_end_index”†”asbuh1hhj`Iubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½Ih²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj`Iubja )�”}”(hjd h]”hŒ*”…”�”}”(hjËIh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj`Iubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjØIh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj`Iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj\Iubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjIh²hh³jIh´Kzubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjIh²hh³jIh´Kzubah}”(h]”jþHah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jIh´KzhjIh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒEnding index iteration”h]”hŒEnding index iteration”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KzhjÿIh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjIh²hh³jIh´Kzubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjJjÓjJjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hŒv**Parameters** ``const struct pt_state *pts`` Iteration State **Return** the last index for the iteration in pts.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj$Jh]”hŒ Parameters”…”�”}”(hj&Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj"Jubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K~hjJubjc)�”}”(hhh]”jh)�”}”(hŒ/``const struct pt_state *pts`` Iteration State ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hjCJh]”hŒconst struct pt_state *pts”…”�”}”(hjEJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjAJubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K{hj=Jubj)�”}”(hhh]”hÞ)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hj\Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jXJh´K{hjYJubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj=Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jXJh´K{hj:Jubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjJubhÞ)�”}”(hŒ **Return**”h]”jâ)�”}”(hj~Jh]”hŒReturn”…”�”}”(hj€Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj|Jubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K}hjJubhÞ)�”}”(hŒ(the last index for the iteration in pts.”h]”hŒ(the last index for the iteration in pts.”…”�”}”(hj”Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K}hjJubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_next_entry (C function)”Œc.pt_next_entry”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ)void pt_next_entry (struct pt_state *pts)”h]”jU)�”}”(hŒ(void pt_next_entry(struct pt_state *pts)”h]”(j­ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÃJh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj¿Jh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K©ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒJh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¿Jh²hh³jÑJh´K©ubj~)�”}”(hŒ pt_next_entry”h]”j„)�”}”(hŒ pt_next_entry”h]”hŒ pt_next_entry”…”�”}”(hjäJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjàJubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj¿Jh²hh³jÑJh´K©ubjå )�”}”(hŒ(struct pt_state *pts)”h]”jë )�”}”(hŒstruct pt_state *pts”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjüJubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Kh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjüJubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”j KŒmodname”NŒ classname”NjD jG )�”}”jJ ]”jM )�”}”j@ jæJsbŒc.pt_next_entry”†”asbuh1hhjüJubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>Kh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjüJubja )�”}”(hjd h]”hŒ*”…”�”}”(hjLKh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjüJubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjYKh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjüJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjøJubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj¿Jh²hh³jÑJh´K©ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj»Jh²hh³jÑJh´K©ubah}”(h]”j¶Jah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jÑJh´K©hj¸Jh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒAdvance pts to the next entry”h]”hŒAdvance pts to the next entry”…”�”}”(hjƒKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K©hj€Kh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj¸Jh²hh³jÑJh´K©ubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj›KjÓj›KjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hŒÔ**Parameters** ``struct pt_state *pts`` Iteration State **Description** Update pts to go to the next index at this level. If pts is pointing at a contiguous entry then the index may advance my more than one.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj¥Kh]”hŒ Parameters”…”�”}”(hj§Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj£Kubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K­hjŸKubjc)�”}”(hhh]”jh)�”}”(hŒ)``struct pt_state *pts`` Iteration State ”h]”(jn)�”}”(hŒ``struct pt_state *pts``”h]”j/)�”}”(hjÄKh]”hŒstruct pt_state *pts”…”�”}”(hjÆKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÂKubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kªhj¾Kubj)�”}”(hhh]”hÞ)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hjÝKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÙKh´KªhjÚKubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj¾Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jÙKh´Kªhj»Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjŸKubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjÿKh]”hŒ Description”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjýKubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K¬hjŸKubhÞ)�”}”(hŒ‡Update pts to go to the next index at this level. If pts is pointing at a contiguous entry then the index may advance my more than one.”h]”hŒ‡Update pts to go to the next index at this level. If pts is pointing at a contiguous entry then the index may advance my more than one.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K«hjŸKubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ!for_each_pt_level_entry (C macro)”Œc.for_each_pt_level_entry”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒfor_each_pt_level_entry”h]”jU)�”}”(hŒfor_each_pt_level_entry”h]”j~)�”}”(hŒfor_each_pt_level_entry”h]”j„)�”}”(hj>Lh]”hŒfor_each_pt_level_entry”…”�”}”(hjHLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjDLubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj@Lh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kºubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjrange that fall within the pts's current table level. Each step does pt_load_entry(pts).”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj¯Lh]”hŒ Parameters”…”�”}”(hj±Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj­Lubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K¾hj©Lubjc)�”}”(hhh]”jh)�”}”(hŒ``pts`` Iteration State ”h]”(jn)�”}”(hŒ``pts``”h]”j/)�”}”(hjÎLh]”hŒpts”…”�”}”(hjÐLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÌLubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K»hjÈLubj)�”}”(hhh]”hÞ)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hjçLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jãLh´K»hjäLubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÈLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jãLh´K»hjÅLubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj©LubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj Mh]”hŒ Description”…”�”}”(hj Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K½hj©LubhÞ)�”}”(hŒ¨This is the basic iteration primitive. It iterates over all the entries in pts->range that fall within the pts's current table level. Each step does pt_load_entry(pts).”h]”hŒªThis is the basic iteration primitive. It iterates over all the entries in pts->range that fall within the pts’s current table level. Each step does pt_load_entry(pts).”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K¼hj©Lubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ!pt_load_single_entry (C function)”Œc.pt_load_single_entry”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ>enum pt_entry_type pt_load_single_entry (struct pt_state *pts)”h]”jU)�”}”(hŒ=enum pt_entry_type pt_load_single_entry(struct pt_state *pts)”h]”(j[)�”}”(hjHh]”hŒenum”…”�”}”(hjNMh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjJMh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KÅubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\Mh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjJMh²hh³j[Mh´KÅubh)�”}”(hhh]”j„)�”}”(hŒ pt_entry_type”h]”hŒ pt_entry_type”…”�”}”(hjmMh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjjMubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”joMŒmodname”NŒ classname”NjD jG )�”}”jJ ]”jM )�”}”j@ Œpt_load_single_entry”sbŒc.pt_load_single_entry”†”asbuh1hhjJMh²hh³j[Mh´KÅubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽMh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjJMh²hh³j[Mh´KÅubj~)�”}”(hŒpt_load_single_entry”h]”j„)�”}”(hj‹Mh]”hŒpt_load_single_entry”…”�”}”(hj Mh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjœMubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjJMh²hh³j[Mh´KÅubjå )�”}”(hŒ(struct pt_state *pts)”h]”jë )�”}”(hŒstruct pt_state *pts”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj»Mh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj·Mubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈMh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj·Mubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjÙMh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjÖMubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”jÛMŒmodname”NŒ classname”NjD jG )�”}”jJ ]”j‰MŒc.pt_load_single_entry”†”asbuh1hhj·Mubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷Mh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj·Mubja )�”}”(hjd h]”hŒ*”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj·Mubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj·Mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj³Mubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjJMh²hh³j[Mh´KÅubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjFMh²hh³j[Mh´KÅubah}”(h]”jAMah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j[Mh´KÅhjCMh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ1Version of pt_load_entry() usable within a walker”h]”hŒ1Version of pt_load_entry() usable within a walker”…”�”}”(hjva and range->last_va will be incorrect during the iteration and must not be accessed.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj¼Qh]”hŒ Parameters”…”�”}”(hj¾Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjºQubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M hj¶Qubjc)�”}”(hhh]”jh)�”}”(hŒ#``struct pt_common *common`` Table ”h]”(jn)�”}”(hŒ``struct pt_common *common``”h]”j/)�”}”(hjÛQh]”hŒstruct pt_common *common”…”�”}”(hjÝQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÙQubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MhjÕQubj)�”}”(hhh]”hÞ)�”}”(hŒTable”h]”hŒTable”…”�”}”(hjôQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jðQh´MhjñQubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÕQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jðQh´MhjÒQubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj¶QubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjRh]”hŒ Description”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhj¶QubhÞ)�”}”(hŒ¸The returned range spans the whole page table. Due to how PT_FEAT_SIGN_EXTEND is supported range->va and range->last_va will be incorrect during the iteration and must not be accessed.”h]”hŒ¸The returned range spans the whole page table. Due to how PT_FEAT_SIGN_EXTEND is supported range->va and range->last_va will be incorrect during the iteration and must not be accessed.”…”�”}”(hj,Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhj¶Qubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_upper_range (C function)”Œc.pt_upper_range”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ9struct pt_range pt_upper_range (struct pt_common *common)”h]”jU)�”}”(hŒ8struct pt_range pt_upper_range(struct pt_common *common)”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj[Rh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjWRh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiRh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjWRh²hh³jhRh´Mubh)�”}”(hhh]”j„)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(hjzRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjwRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”j|RŒmodname”NŒ classname”NjD jG )�”}”jJ ]”jM )�”}”j@ Œpt_upper_range”sbŒc.pt_upper_range”†”asbuh1hhjWRh²hh³jhRh´Mubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›Rh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjWRh²hh³jhRh´Mubj~)�”}”(hŒpt_upper_range”h]”j„)�”}”(hj˜Rh]”hŒpt_upper_range”…”�”}”(hj­Rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj©Rubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjWRh²hh³jhRh´Mubjå )�”}”(hŒ(struct pt_common *common)”h]”jë )�”}”(hŒstruct pt_common *common”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hjÈRh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjÄRubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕRh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÄRubh)�”}”(hhh]”j„)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(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”NjD jG )�”}”jJ ]”j–RŒc.pt_upper_range”†”asbuh1hhjÄRubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÄRubja )�”}”(hjd h]”hŒ*”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjÄRubj„)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjÄRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjÀRubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjWRh²hh³jhRh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjSRh²hh³jhRh´Mubah}”(h]”jNRah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jhRh´MhjPRh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ/Return a range that spans part of the top level”h]”hŒ/Return a range that spans part of the top level”…”�”}”(hjISh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MhjFSh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjPRh²hh³jhRh´Mubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjaSjÓjaSjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hŒÑ**Parameters** ``struct pt_common *common`` Table **Description** For PT_FEAT_SIGN_EXTEND this will return the upper range, and cover half the total page table. Otherwise it returns the entire page table.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjkSh]”hŒ Parameters”…”�”}”(hjmSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjiSubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M hjeSubjc)�”}”(hhh]”jh)�”}”(hŒ#``struct pt_common *common`` Table ”h]”(jn)�”}”(hŒ``struct pt_common *common``”h]”j/)�”}”(hjŠSh]”hŒstruct pt_common *common”…”�”}”(hjŒSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjˆSubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhj„Subj)�”}”(hhh]”hÞ)�”}”(hŒTable”h]”hŒTable”…”�”}”(hj£Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jŸSh´Mhj Subah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj„Subeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jŸSh´Mhj�Subah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjeSubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjÅSh]”hŒ Description”…”�”}”(hjÇSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÃSubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MhjeSubhÞ)�”}”(hŒŠFor PT_FEAT_SIGN_EXTEND this will return the upper range, and cover half the total page table. Otherwise it returns the entire page table.”h]”hŒŠFor PT_FEAT_SIGN_EXTEND this will return the upper range, and cover half the total page table. Otherwise it returns the entire page table.”…”�”}”(hjÛSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MhjeSubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_make_range (C function)”Œc.pt_make_range”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ[struct pt_range pt_make_range (struct pt_common *common, pt_vaddr_t va, pt_vaddr_t last_va)”h]”jU)�”}”(hŒZstruct pt_range pt_make_range(struct pt_common *common, pt_vaddr_t va, pt_vaddr_t last_va)”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj Th²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjTh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M/ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjTh²hh³jTh´M/ubh)�”}”(hhh]”j„)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ Œ pt_make_range”sbŒc.pt_make_range”†”asbuh1hhjTh²hh³jTh´M/ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJTh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjTh²hh³jTh´M/ubj~)�”}”(hŒ pt_make_range”h]”j„)�”}”(hjGTh]”hŒ pt_make_range”…”�”}”(hj\Th²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjXTubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjTh²hh³jTh´M/ubjå )�”}”(hŒ=(struct pt_common *common, pt_vaddr_t va, pt_vaddr_t last_va)”h]”(jë )�”}”(hŒstruct pt_common *common”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hjwTh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjsTubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„Th²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjsTubh)�”}”(hhh]”j„)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(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”NjD jG )�”}”jJ ]”jETŒc.pt_make_range”†”asbuh1hhjsTubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³Th²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjsTubja )�”}”(hjd h]”hŒ*”…”�”}”(hjÁTh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjsTubj„)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hjÎTh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjsTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjoTubjë )�”}”(hŒ pt_vaddr_t va”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_vaddr_t”h]”hŒ pt_vaddr_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”NjD jG )�”}”jJ ]”jETŒc.pt_make_range”†”asbuh1hhjãTubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjãTubj„)�”}”(hŒva”h]”hŒva”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjãTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjoTubjë )�”}”(hŒpt_vaddr_t last_va”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_vaddr_t”h]”hŒ pt_vaddr_t”…”�”}”(hj2Uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj/Uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”j4UŒmodname”NŒ classname”NjD jG )�”}”jJ ]”jETŒc.pt_make_range”†”asbuh1hhj+Uubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPUh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj+Uubj„)�”}”(hŒlast_va”h]”hŒlast_va”…”�”}”(hj^Uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj+Uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjoTubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjTh²hh³jTh´M/ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjTh²hh³jTh´M/ubah}”(h]”jýSah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jTh´M/hjÿSh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ+Return a range that spans part of the table”h]”hŒ+Return a range that spans part of the table”…”�”}”(hjˆUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M/hj…Uh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjÿSh²hh³jTh´M/ubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj UjÓj UjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hŒÚ**Parameters** ``struct pt_common *common`` Table ``pt_vaddr_t va`` Start address ``pt_vaddr_t last_va`` Last address **Description** The caller must validate the range with pt_check_range() before using it.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjªUh]”hŒ Parameters”…”�”}”(hj¬Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¨Uubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M3hj¤Uubjc)�”}”(hhh]”(jh)�”}”(hŒ#``struct pt_common *common`` Table ”h]”(jn)�”}”(hŒ``struct pt_common *common``”h]”j/)�”}”(hjÉUh]”hŒstruct pt_common *common”…”�”}”(hjËUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÇUubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M0hjÃUubj)�”}”(hhh]”hÞ)�”}”(hŒTable”h]”hŒTable”…”�”}”(hjâUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÞUh´M0hjßUubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÃUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jÞUh´M0hjÀUubjh)�”}”(hŒ ``pt_vaddr_t va`` Start address ”h]”(jn)�”}”(hŒ``pt_vaddr_t va``”h]”j/)�”}”(hjVh]”hŒ pt_vaddr_t va”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M1hjüUubj)�”}”(hhh]”hÞ)�”}”(hŒ Start address”h]”hŒ Start address”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jVh´M1hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjüUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jVh´M1hjÀUubjh)�”}”(hŒ$``pt_vaddr_t last_va`` Last address ”h]”(jn)�”}”(hŒ``pt_vaddr_t last_va``”h]”j/)�”}”(hj;Vh]”hŒpt_vaddr_t last_va”…”�”}”(hj=Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj9Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M2hj5Vubj)�”}”(hhh]”hÞ)�”}”(hŒ Last address”h]”hŒ Last address”…”�”}”(hjTVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jPVh´M2hjQVubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj5Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jPVh´M2hjÀUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhj¤UubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjvVh]”hŒ Description”…”�”}”(hjxVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjtVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M4hj¤UubhÞ)�”}”(hŒIThe caller must validate the range with pt_check_range() before using it.”h]”hŒIThe caller must validate the range with pt_check_range() before using it.”…”�”}”(hjŒVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M3hj¤Uubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_init (C function)”Œ c.pt_init”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ^struct pt_state pt_init (struct pt_range *range, unsigned int level, struct pt_table_p *table)”h]”jU)�”}”(hŒ]struct pt_state pt_init(struct pt_range *range, unsigned int level, struct pt_table_p *table)”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj»Vh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj·Vh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MVubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉVh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj·Vh²hh³jÈVh´MVubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjÚVh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj×Vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”jÜVŒmodname”NŒ classname”NjD jG )�”}”jJ ]”jM )�”}”j@ Œpt_init”sbŒ c.pt_init”†”asbuh1hhj·Vh²hh³jÈVh´MVubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûVh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj·Vh²hh³jÈVh´MVubj~)�”}”(hŒpt_init”h]”j„)�”}”(hjøVh]”hŒpt_init”…”�”}”(hj Wh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj Wubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj·Vh²hh³jÈVh´MVubjå )�”}”(hŒF(struct pt_range *range, unsigned int level, struct pt_table_p *table)”h]”(jë )�”}”(hŒstruct pt_range *range”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj(Wh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj$Wubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5Wh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj$Wubh)�”}”(hhh]”j„)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(hjFWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjCWubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”jHWŒmodname”NŒ classname”NjD jG )�”}”jJ ]”jöVŒ c.pt_init”†”asbuh1hhj$Wubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdWh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj$Wubja )�”}”(hjd h]”hŒ*”…”�”}”(hjrWh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj$Wubj„)�”}”(hŒrange”h]”hŒrange”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj$Wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj Wubjë )�”}”(hŒunsigned int level”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj˜Wh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj”Wubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦Wh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj”Wubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hj´Wh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj”Wubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂWh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj”Wubj„)�”}”(hŒlevel”h]”hŒlevel”…”�”}”(hjÐWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj”Wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj Wubjë )�”}”(hŒstruct pt_table_p *table”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hjéWh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjåWubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöWh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjåWubh)�”}”(hhh]”j„)�”}”(hŒ pt_table_p”h]”hŒ pt_table_p”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjXubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”j XŒmodname”NŒ classname”NjD jG )�”}”jJ ]”jöVŒ c.pt_init”†”asbuh1hhjåWubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Xh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjåWubja )�”}”(hjd h]”hŒ*”…”�”}”(hj3Xh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjåWubj„)�”}”(hŒtable”h]”hŒtable”…”�”}”(hj@Xh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjåWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj Wubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj·Vh²hh³jÈVh´MVubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj³Vh²hh³jÈVh´MVubah}”(h]”j®Vah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jÈVh´MVhj°Vh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ"Initialize a pt_state on the stack”h]”hŒ"Initialize a pt_state on the stack”…”�”}”(hjjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MVhjgXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj°Vh²hh³jÈVh´MVubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj‚XjÓj‚XjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hX**Parameters** ``struct pt_range *range`` Range pointer to embed in the state ``unsigned int level`` Table level for the state ``struct pt_table_p *table`` Pointer to the table memory at level **Description** Helper to initialize the on-stack pt_state from walker arguments.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjŒXh]”hŒ Parameters”…”�”}”(hjŽXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjŠXubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MZhj†Xubjc)�”}”(hhh]”(jh)�”}”(hŒ?``struct pt_range *range`` Range pointer to embed in the state ”h]”(jn)�”}”(hŒ``struct pt_range *range``”h]”j/)�”}”(hj«Xh]”hŒstruct pt_range *range”…”�”}”(hj­Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj©Xubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MWhj¥Xubj)�”}”(hhh]”hÞ)�”}”(hŒ#Range pointer to embed in the state”h]”hŒ#Range pointer to embed in the state”…”�”}”(hjÄXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÀXh´MWhjÁXubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj¥Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jÀXh´MWhj¢Xubjh)�”}”(hŒ1``unsigned int level`` Table level for the state ”h]”(jn)�”}”(hŒ``unsigned int level``”h]”j/)�”}”(hjäXh]”hŒunsigned int level”…”�”}”(hjæXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjâXubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MXhjÞXubj)�”}”(hhh]”hÞ)�”}”(hŒTable level for the state”h]”hŒTable level for the state”…”�”}”(hjýXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jùXh´MXhjúXubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÞXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jùXh´MXhj¢Xubjh)�”}”(hŒB``struct pt_table_p *table`` Pointer to the table memory at level ”h]”(jn)�”}”(hŒ``struct pt_table_p *table``”h]”j/)�”}”(hjYh]”hŒstruct pt_table_p *table”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MYhjYubj)�”}”(hhh]”hÞ)�”}”(hŒ$Pointer to the table memory at level”h]”hŒ$Pointer to the table memory at level”…”�”}”(hj6Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j2Yh´MYhj3Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j2Yh´MYhj¢Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhj†XubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjXYh]”hŒ Description”…”�”}”(hjZYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjVYubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M[hj†XubhÞ)�”}”(hŒAHelper to initialize the on-stack pt_state from walker arguments.”h]”hŒAHelper to initialize the on-stack pt_state from walker arguments.”…”�”}”(hjnYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MZhj†Xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_init_top (C function)”Œ c.pt_init_top”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒ4struct pt_state pt_init_top (struct pt_range *range)”h]”jU)�”}”(hŒ3struct pt_state pt_init_top(struct pt_range *range)”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj�Yh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj™Yh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Miubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«Yh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj™Yh²hh³jªYh´Miubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj¼Yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj¹Yubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”j¾YŒmodname”NŒ classname”NjD jG )�”}”jJ ]”jM )�”}”j@ Œ pt_init_top”sbŒ c.pt_init_top”†”asbuh1hhj™Yh²hh³jªYh´Miubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝYh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj™Yh²hh³jªYh´Miubj~)�”}”(hŒ pt_init_top”h]”j„)�”}”(hjÚYh]”hŒ pt_init_top”…”�”}”(hjïYh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjëYubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj™Yh²hh³jªYh´Miubjå )�”}”(hŒ(struct pt_range *range)”h]”jë )�”}”(hŒstruct pt_range *range”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj Zh²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjZubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjZubh)�”}”(hhh]”j„)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(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”NjD jG )�”}”jJ ]”jØYŒ c.pt_init_top”†”asbuh1hhjZubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFZh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjZubja )�”}”(hjd h]”hŒ*”…”�”}”(hjTZh²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjZubj„)�”}”(hŒrange”h]”hŒrange”…”�”}”(hjaZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjZubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj™Yh²hh³jªYh´Miubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj•Yh²hh³jªYh´Miubah}”(h]”j�Yah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jªYh´Mihj’Yh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ"Initialize a pt_state on the stack”h]”hŒ"Initialize a pt_state on the stack”…”�”}”(hj‹Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MihjˆZh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj’Yh²hh³jªYh´Miubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj£ZjÓj£ZjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hŒ�**Parameters** ``struct pt_range *range`` Range pointer to embed in the state **Description** The pt_state points to the top most level.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj­Zh]”hŒ Parameters”…”�”}”(hj¯Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj«Zubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mmhj§Zubjc)�”}”(hhh]”jh)�”}”(hŒ?``struct pt_range *range`` Range pointer to embed in the state ”h]”(jn)�”}”(hŒ``struct pt_range *range``”h]”j/)�”}”(hjÌZh]”hŒstruct pt_range *range”…”�”}”(hjÎZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÊZubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MjhjÆZubj)�”}”(hhh]”hÞ)�”}”(hŒ#Range pointer to embed in the state”h]”hŒ#Range pointer to embed in the state”…”�”}”(hjåZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jáZh´MjhjâZubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÆZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jáZh´MjhjÃZubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj§ZubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj[h]”hŒ Description”…”�”}”(hj [h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mlhj§ZubhÞ)�”}”(hŒ*The pt_state points to the top most level.”h]”hŒ*The pt_state points to the top most level.”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mkhj§Zubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_descend (C function)”Œ c.pt_descend”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒBint pt_descend (struct pt_state *pts, void *arg, pt_level_fn_t fn)”h]”jU)�”}”(hŒAint pt_descend(struct pt_state *pts, void *arg, pt_level_fn_t fn)”h]”(j­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjL[h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjH[h²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mwubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[[h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjH[h²hh³jZ[h´Mwubj~)�”}”(hŒ pt_descend”h]”j„)�”}”(hŒ pt_descend”h]”hŒ pt_descend”…”�”}”(hjm[h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhji[ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjH[h²hh³jZ[h´Mwubjå )�”}”(hŒ3(struct pt_state *pts, void *arg, pt_level_fn_t fn)”h]”(jë )�”}”(hŒstruct pt_state *pts”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj‰[h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj…[ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–[h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj…[ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ jo[sbŒ c.pt_descend”†”asbuh1hhj…[ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ[h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj…[ubja )�”}”(hjd h]”hŒ*”…”�”}”(hjÕ[h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj…[ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjâ[h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj…[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj�[ubjë )�”}”(hŒ void *arg”h]”(j­ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjû[h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj÷[ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj \h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj÷[ubja )�”}”(hjd h]”hŒ*”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”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”ˆhÅhÆuh1jê hj�[ubjë )�”}”(hŒpt_level_fn_t fn”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_level_fn_t”h]”hŒ pt_level_fn_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”jB\Œmodname”NŒ classname”NjD jG )�”}”jJ ]”jÃ[Œ c.pt_descend”†”asbuh1hhj9\ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^\h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj9\ubj„)�”}”(hŒfn”h]”hŒfn”…”�”}”(hjl\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj9\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj�[ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjH[h²hh³jZ[h´Mwubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjD[h²hh³jZ[h´Mwubah}”(h]”j?[ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jZ[h´MwhjA[h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ1Recursively invoke the walker for the lower level”h]”hŒ1Recursively invoke the walker for the lower level”…”�”}”(hj–\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mwhj“\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjA[h²hh³jZ[h´Mwubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj®\jÓj®\jÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hŒý**Parameters** ``struct pt_state *pts`` Iteration State ``void *arg`` Value to pass to the function ``pt_level_fn_t fn`` Walker function to call **Description** pts must point to a table item. Invoke fn as a walker on the table pts points to.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj¸\h]”hŒ Parameters”…”�”}”(hjº\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj¶\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M{hj²\ubjc)�”}”(hhh]”(jh)�”}”(hŒ)``struct pt_state *pts`` Iteration State ”h]”(jn)�”}”(hŒ``struct pt_state *pts``”h]”j/)�”}”(hj×\h]”hŒstruct pt_state *pts”…”�”}”(hjÙ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÕ\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MxhjÑ\ubj)�”}”(hhh]”hÞ)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hjð\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jì\h´Mxhjí\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjÑ\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jì\h´MxhjÎ\ubjh)�”}”(hŒ,``void *arg`` Value to pass to the function ”h]”(jn)�”}”(hŒ ``void *arg``”h]”j/)�”}”(hj]h]”hŒ void *arg”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Myhj ]ubj)�”}”(hhh]”hÞ)�”}”(hŒValue to pass to the function”h]”hŒValue to pass to the function”…”�”}”(hj)]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j%]h´Myhj&]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj ]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j%]h´MyhjÎ\ubjh)�”}”(hŒ-``pt_level_fn_t fn`` Walker function to call ”h]”(jn)�”}”(hŒ``pt_level_fn_t fn``”h]”j/)�”}”(hjI]h]”hŒpt_level_fn_t fn”…”�”}”(hjK]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjG]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MzhjC]ubj)�”}”(hhh]”hÞ)�”}”(hŒWalker function to call”h]”hŒWalker function to call”…”�”}”(hjb]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j^]h´Mzhj_]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjC]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j^]h´MzhjÎ\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhj²\ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj„]h]”hŒ Description”…”�”}”(hj†]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj‚]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M|hj²\ubhÞ)�”}”(hŒQpts must point to a table item. Invoke fn as a walker on the table pts points to.”h]”hŒQpts must point to a table item. Invoke fn as a walker on the table pts points to.”…”�”}”(hjš]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M{hj²\ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_walk_range (C function)”Œc.pt_walk_range”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒGint pt_walk_range (struct pt_range *range, pt_level_fn_t fn, void *arg)”h]”jU)�”}”(hŒFint pt_walk_range(struct pt_range *range, pt_level_fn_t fn, void *arg)”h]”(j­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjÉ]h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hjÅ]h²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MŒubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØ]h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÅ]h²hh³j×]h´MŒubj~)�”}”(hŒ pt_walk_range”h]”j„)�”}”(hŒ pt_walk_range”h]”hŒ pt_walk_range”…”�”}”(hjê]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjæ]ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjÅ]h²hh³j×]h´MŒubjå )�”}”(hŒ5(struct pt_range *range, pt_level_fn_t fn, void *arg)”h]”(jë )�”}”(hŒstruct pt_range *range”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj^ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj^ubh)�”}”(hhh]”j„)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ jì]sbŒc.pt_walk_range”†”asbuh1hhj^ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD^h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj^ubja )�”}”(hjd h]”hŒ*”…”�”}”(hjR^h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj^ubj„)�”}”(hŒrange”h]”hŒrange”…”�”}”(hj_^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjþ]ubjë )�”}”(hŒpt_level_fn_t fn”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_level_fn_t”h]”hŒ pt_level_fn_t”…”�”}”(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”NjD jG )�”}”jJ ]”j@^Œc.pt_walk_range”†”asbuh1hhjt^ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™^h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjt^ubj„)�”}”(hŒfn”h]”hŒfn”…”�”}”(hj§^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjt^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjþ]ubjë )�”}”(hŒ void *arg”h]”(j­ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÀ^h²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj¼^ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎ^h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¼^ubja )�”}”(hjd h]”hŒ*”…”�”}”(hjÜ^h²hh³Nh´Nubah}”(h]”h ]”jm ah"]”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”ˆhÅhÆuh1jê hjþ]ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjÅ]h²hh³j×]h´MŒubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjÁ]h²hh³j×]h´MŒubah}”(h]”j¼]ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j×]h´MŒhj¾]h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒWalk over a VA range”h]”hŒWalk over a VA range”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.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Òj+_jÓj+_jÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hXR**Parameters** ``struct pt_range *range`` Range pointer ``pt_level_fn_t fn`` Walker function to call ``void *arg`` Value to pass to the function **Description** Walk over a VA range. The caller should have done a validity check, at least calling pt_check_range(), when building range. The walk will start at the top most table.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj5_h]”hŒ Parameters”…”�”}”(hj7_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj3_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M�hj/_ubjc)�”}”(hhh]”(jh)�”}”(hŒ)``struct pt_range *range`` Range pointer ”h]”(jn)�”}”(hŒ``struct pt_range *range``”h]”j/)�”}”(hjT_h]”hŒstruct pt_range *range”…”�”}”(hjV_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjR_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M�hjN_ubj)�”}”(hhh]”hÞ)�”}”(hŒ Range pointer”h]”hŒ Range pointer”…”�”}”(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&]”uh1jgh³ji_h´M�hjK_ubjh)�”}”(hŒ-``pt_level_fn_t fn`` Walker function to call ”h]”(jn)�”}”(hŒ``pt_level_fn_t fn``”h]”j/)�”}”(hj�_h]”hŒpt_level_fn_t fn”…”�”}”(hj�_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj‹_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MŽhj‡_ubj)�”}”(hhh]”hÞ)�”}”(hŒWalker function to call”h]”hŒWalker function to call”…”�”}”(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&]”uh1jgh³j¢_h´MŽhjK_ubjh)�”}”(hŒ,``void *arg`` Value to pass to the function ”h]”(jn)�”}”(hŒ ``void *arg``”h]”j/)�”}”(hjÆ_h]”hŒ void *arg”…”�”}”(hjÈ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjÄ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M�hjÀ_ubj)�”}”(hhh]”hÞ)�”}”(hŒValue to pass to the function”h]”hŒValue to pass to the function”…”�”}”(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&]”uh1jgh³jÛ_h´M�hjK_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhj/_ubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj`h]”hŒ Description”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÿ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M‘hj/_ubhÞ)�”}”(hŒ¦Walk over a VA range. The caller should have done a validity check, at least calling pt_check_range(), when building range. The walk will start at the top most table.”h]”hŒ¦Walk over a VA range. The caller should have done a validity check, at least calling pt_check_range(), when building range. The walk will start at the top most table.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M�hj/_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_range_slice (C function)”Œc.pt_range_slice”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒmstruct pt_range pt_range_slice (const struct pt_state *pts, unsigned int start_index, unsigned int end_index)”h]”jU)�”}”(hŒlstruct pt_range pt_range_slice(const struct pt_state *pts, unsigned int start_index, unsigned int end_index)”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hjF`h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjB`h²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MËubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT`h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjB`h²hh³jS`h´MËubh)�”}”(hhh]”j„)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ Œpt_range_slice”sbŒc.pt_range_slice”†”asbuh1hhjB`h²hh³jS`h´MËubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†`h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjB`h²hh³jS`h´MËubj~)�”}”(hŒpt_range_slice”h]”j„)�”}”(hjƒ`h]”hŒpt_range_slice”…”�”}”(hj˜`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj”`ubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hjB`h²hh³jS`h´MËubjå )�”}”(hŒN(const struct pt_state *pts, unsigned int start_index, unsigned int end_index)”h]”(jë )�”}”(hŒconst struct pt_state *pts”h]”(j[)�”}”(hjò h]”hŒconst”…”�”}”(hj³`h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj¯`ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ`h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¯`ubj[)�”}”(hj^h]”hŒstruct”…”�”}”(hjÎ`h²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhj¯`ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ`h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¯`ubh)�”}”(hhh]”j„)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(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”NjD jG )�”}”jJ ]”j�`Œc.pt_range_slice”†”asbuh1hhj¯`ubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj¯`ubja )�”}”(hjd h]”hŒ*”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hj¯`ubj„)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj%ah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj¯`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj«`ubjë )�”}”(hŒunsigned int start_index”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj>ah²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj:aubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLah²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj:aubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjZah²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj:aubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhah²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj:aubj„)�”}”(hŒ start_index”h]”hŒ start_index”…”�”}”(hjvah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj:aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj«`ubjë )�”}”(hŒunsigned int end_index”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj�ah²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj‹aubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ah²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj‹aubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hj«ah²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj‹aubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹ah²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj‹aubj„)�”}”(hŒ end_index”h]”hŒ end_index”…”�”}”(hjÇah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj‹aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj«`ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hjB`h²hh³jS`h´MËubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj>`h²hh³jS`h´MËubah}”(h]”j9`ah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jS`h´MËhj;`h²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ!Return a range that spans indexes”h]”hŒ!Return a range that spans indexes”…”�”}”(hjñah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MËhjîah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj;`h²hh³jS`h´MËubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj bjÓj bjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hX**Parameters** ``const struct pt_state *pts`` Iteration State ``unsigned int start_index`` Starting index within pts ``unsigned int end_index`` Ending index within pts **Description** Create a range than spans an index range of the current table level pt_state points at.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjbh]”hŒ Parameters”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MÏhj bubjc)�”}”(hhh]”(jh)�”}”(hŒ/``const struct pt_state *pts`` Iteration State ”h]”(jn)�”}”(hŒ``const struct pt_state *pts``”h]”j/)�”}”(hj2bh]”hŒconst struct pt_state *pts”…”�”}”(hj4bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj0bubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MÌhj,bubj)�”}”(hhh]”hÞ)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hjKbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jGbh´MÌhjHbubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj,bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jGbh´MÌhj)bubjh)�”}”(hŒ7``unsigned int start_index`` Starting index within pts ”h]”(jn)�”}”(hŒ``unsigned int start_index``”h]”j/)�”}”(hjkbh]”hŒunsigned int start_index”…”�”}”(hjmbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjibubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MÍhjebubj)�”}”(hhh]”hÞ)�”}”(hŒStarting index within pts”h]”hŒStarting index within pts”…”�”}”(hj„bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j€bh´MÍhj�bubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjebubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j€bh´MÍhj)bubjh)�”}”(hŒ3``unsigned int end_index`` Ending index within pts ”h]”(jn)�”}”(hŒ``unsigned int end_index``”h]”j/)�”}”(hj¤bh]”hŒunsigned int end_index”…”�”}”(hj¦bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj¢bubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MÎhjžbubj)�”}”(hhh]”hÞ)�”}”(hŒEnding index within pts”h]”hŒEnding index within pts”…”�”}”(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&]”uh1jgh³j¹bh´MÎhj)bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhj bubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjßbh]”hŒ Description”…”�”}”(hjábh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjÝbubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MÐhj bubhÞ)�”}”(hŒWCreate a range than spans an index range of the current table level pt_state points at.”h]”hŒWCreate a range than spans an index range of the current table level pt_state points at.”…”�”}”(hjõbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MÏhj bubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒpt_top_memsize_lg2 (C function)”Œc.pt_top_memsize_lg2”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒRunsigned int pt_top_memsize_lg2 (struct pt_common *common, uintptr_t top_of_table)”h]”jU)�”}”(hŒQunsigned int pt_top_memsize_lg2(struct pt_common *common, uintptr_t top_of_table)”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj$ch²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj ch²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Måubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3ch²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj ch²hh³j2ch´Måubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjAch²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj ch²hh³j2ch´Måubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOch²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj ch²hh³j2ch´Måubj~)�”}”(hŒpt_top_memsize_lg2”h]”j„)�”}”(hŒpt_top_memsize_lg2”h]”hŒpt_top_memsize_lg2”…”�”}”(hjach²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj]cubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj ch²hh³j2ch´Måubjå )�”}”(hŒ2(struct pt_common *common, uintptr_t top_of_table)”h]”(jë )�”}”(hŒstruct pt_common *common”h]”(j[)�”}”(hj^h]”hŒstruct”…”�”}”(hj}ch²hh³Nh´Nubah}”(h]”h ]”jgah"]”h$]”h&]”uh1jZhjycubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠch²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjycubh)�”}”(hhh]”j„)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hj›ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj˜cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”j�cŒmodname”NŒ classname”NjD jG )�”}”jJ ]”jM )�”}”j@ jccsbŒc.pt_top_memsize_lg2”†”asbuh1hhjycubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»ch²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjycubja )�”}”(hjd h]”hŒ*”…”�”}”(hjÉch²hh³Nh´Nubah}”(h]”h ]”jm ah"]”h$]”h&]”uh1j` hjycubj„)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hjÖch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjycubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjucubjë )�”}”(hŒuintptr_t top_of_table”h]”(h)�”}”(hhh]”j„)�”}”(hŒ uintptr_t”h]”hŒ uintptr_t”…”�”}”(hjòch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjïcubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”jôcŒmodname”NŒ classname”NjD jG )�”}”jJ ]”j·cŒc.pt_top_memsize_lg2”†”asbuh1hhjëcubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjëcubj„)�”}”(hŒ top_of_table”h]”hŒ top_of_table”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjëcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hjucubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj ch²hh³j2ch´Måubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hjch²hh³j2ch´Måubah}”(h]”jcah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³j2ch´Måhjch²hubj°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¯hjch²hh³j2ch´Måubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒjQdjÓjQdjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hX **Parameters** ``struct pt_common *common`` Table ``uintptr_t top_of_table`` Top of table value from _pt_top_set() **Description** Compute the allocation size of the top table. For PT_FEAT_DYNAMIC_TOP this will compute the top size assuming the table will grow.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj[dh]”hŒ Parameters”…”�”}”(hj]dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjYdubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MéhjUdubjc)�”}”(hhh]”(jh)�”}”(hŒ#``struct pt_common *common`` Table ”h]”(jn)�”}”(hŒ``struct pt_common *common``”h]”j/)�”}”(hjzdh]”hŒstruct pt_common *common”…”�”}”(hj|dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjxdubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mæhjtdubj)�”}”(hhh]”hÞ)�”}”(hŒTable”h]”hŒTable”…”�”}”(hj“dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j�dh´Mæhj�dubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjtdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j�dh´Mæhjqdubjh)�”}”(hŒA``uintptr_t top_of_table`` Top of table value from _pt_top_set() ”h]”(jn)�”}”(hŒ``uintptr_t top_of_table``”h]”j/)�”}”(hj³dh]”hŒuintptr_t top_of_table”…”�”}”(hjµdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj±dubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mçhj­dubj)�”}”(hhh]”hÞ)�”}”(hŒ%Top of table value from _pt_top_set()”h]”hŒ%Top of table value from _pt_top_set()”…”�”}”(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&]”uh1jgh³jÈdh´Mçhjqdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhjUdubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjîdh]”hŒ Description”…”�”}”(hjðdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjìdubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MéhjUdubhÞ)�”}”(hŒ‚Compute the allocation size of the top table. For PT_FEAT_DYNAMIC_TOP this will compute the top size assuming the table will grow.”h]”hŒ‚Compute the allocation size of the top table. For PT_FEAT_DYNAMIC_TOP this will compute the top size assuming the table will grow.”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MèhjUdubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒ#pt_compute_best_pgsize (C function)”Œc.pt_compute_best_pgsize”hNt”auh1j8hjB•¬eh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒnunsigned int pt_compute_best_pgsize (pt_vaddr_t pgsz_bitmap, pt_vaddr_t va, pt_vaddr_t last_va, pt_oaddr_t oa)”h]”jU)�”}”(hŒmunsigned int pt_compute_best_pgsize(pt_vaddr_t pgsz_bitmap, pt_vaddr_t va, pt_vaddr_t last_va, pt_oaddr_t oa)”h]”(j­ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj3eh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj/eh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mþubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBeh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj/eh²hh³jAeh´Mþubj­ )�”}”(hŒint”h]”hŒint”…”�”}”(hjPeh²hh³Nh´Nubah}”(h]”h ]”j¹ ah"]”h$]”h&]”uh1j¬ hj/eh²hh³jAeh´Mþubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^eh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj/eh²hh³jAeh´Mþubj~)�”}”(hŒpt_compute_best_pgsize”h]”j„)�”}”(hŒpt_compute_best_pgsize”h]”hŒpt_compute_best_pgsize”…”�”}”(hjpeh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjleubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj/eh²hh³jAeh´Mþubjå )�”}”(hŒJ(pt_vaddr_t pgsz_bitmap, pt_vaddr_t va, pt_vaddr_t last_va, pt_oaddr_t oa)”h]”(jë )�”}”(hŒpt_vaddr_t pgsz_bitmap”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_vaddr_t”h]”hŒ pt_vaddr_t”…”�”}”(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”NjD jG )�”}”jJ ]”jM )�”}”j@ jresbŒc.pt_compute_best_pgsize”†”asbuh1hhjˆeubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯eh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjˆeubj„)�”}”(hŒ pgsz_bitmap”h]”hŒ pgsz_bitmap”…”�”}”(hj½eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjˆeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj„eubjë )�”}”(hŒ pt_vaddr_t va”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_vaddr_t”h]”hŒ pt_vaddr_t”…”�”}”(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”NjD jG )�”}”jJ ]”j«eŒc.pt_compute_best_pgsize”†”asbuh1hhjÒeubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷eh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÒeubj„)�”}”(hŒva”h]”hŒva”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjÒeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj„eubjë )�”}”(hŒpt_vaddr_t last_va”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_vaddr_t”h]”hŒ pt_vaddr_t”…”�”}”(hj!fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”j#fŒmodname”NŒ classname”NjD jG )�”}”jJ ]”j«eŒc.pt_compute_best_pgsize”†”asbuh1hhjfubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?fh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjfubj„)�”}”(hŒlast_va”h]”hŒlast_va”…”�”}”(hjMfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj„eubjë )�”}”(hŒ pt_oaddr_t oa”h]”(h)�”}”(hhh]”j„)�”}”(hŒ pt_oaddr_t”h]”hŒ pt_oaddr_t”…”�”}”(hjifh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjffubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jÌŒreftype”j@ Œ reftarget”jkfŒmodname”NŒ classname”NjD jG )�”}”jJ ]”j«eŒc.pt_compute_best_pgsize”†”asbuh1hhjbfubjm)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡fh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjbfubj„)�”}”(hŒoa”h]”hŒoa”…”�”}”(hj•fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhjbfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jê hj„eubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jä hj/eh²hh³jAeh´Mþubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj+eh²hh³jAeh´Mþubah}”(h]”j&eah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jAeh´Mþhj(eh²hubj°)�”}”(hhh]”hÞ)�”}”(hŒ-Determine the best page size for leaf entries”h]”hŒ-Determine the best page size for leaf entries”…”�”}”(hj¿fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mþhj¼fh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj(eh²hh³jAeh´Mþubeh}”(h]”h ]”(jÌŒfunction”eh"]”h$]”h&]”jÑjÌjÒj×fjÓj×fjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubjØ)�”}”(hXK**Parameters** ``pt_vaddr_t pgsz_bitmap`` Permitted page sizes ``pt_vaddr_t va`` Starting virtual address for the leaf entry ``pt_vaddr_t last_va`` Last virtual address for the leaf entry, sets the max page size ``pt_oaddr_t oa`` Starting output address for the leaf entry **Description** Compute the largest page size for va, last_va, and oa together and return it in lg2. The largest page size depends on the format's supported page sizes at this level, and the relative alignment of the VA and OA addresses. 0 means the OA cannot be stored with the provided pgsz_bitmap.”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hjáfh]”hŒ Parameters”…”�”}”(hjãfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjßfubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MhjÛfubjc)�”}”(hhh]”(jh)�”}”(hŒ0``pt_vaddr_t pgsz_bitmap`` Permitted page sizes ”h]”(jn)�”}”(hŒ``pt_vaddr_t pgsz_bitmap``”h]”j/)�”}”(hjgh]”hŒpt_vaddr_t pgsz_bitmap”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjþfubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mÿhjúfubj)�”}”(hhh]”hÞ)�”}”(hŒPermitted page sizes”h]”hŒPermitted page sizes”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jgh´Mÿhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjúfubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jgh´Mÿhj÷fubjh)�”}”(hŒ>``pt_vaddr_t va`` Starting virtual address for the leaf entry ”h]”(jn)�”}”(hŒ``pt_vaddr_t va``”h]”j/)�”}”(hj9gh]”hŒ pt_vaddr_t va”…”�”}”(hj;gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj7gubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhj3gubj)�”}”(hhh]”hÞ)�”}”(hŒ+Starting virtual address for the leaf entry”h]”hŒ+Starting virtual address for the leaf entry”…”�”}”(hjRgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jNgh´MhjOgubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj3gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jNgh´Mhj÷fubjh)�”}”(hŒW``pt_vaddr_t last_va`` Last virtual address for the leaf entry, sets the max page size ”h]”(jn)�”}”(hŒ``pt_vaddr_t last_va``”h]”j/)�”}”(hjrgh]”hŒpt_vaddr_t last_va”…”�”}”(hjtgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjpgubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhjlgubj)�”}”(hhh]”hÞ)�”}”(hŒ?Last virtual address for the leaf entry, sets the max page size”h]”hŒ?Last virtual address for the leaf entry, sets the max page size”…”�”}”(hj‹gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j‡gh´Mhjˆgubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjlgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³j‡gh´Mhj÷fubjh)�”}”(hŒ=``pt_oaddr_t oa`` Starting output address for the leaf entry ”h]”(jn)�”}”(hŒ``pt_oaddr_t oa``”h]”j/)�”}”(hj«gh]”hŒ pt_oaddr_t oa”…”�”}”(hj­gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj©gubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhj¥gubj)�”}”(hhh]”hÞ)�”}”(hŒ*Starting output address for the leaf entry”h]”hŒ*Starting output address for the leaf entry”…”�”}”(hjÄgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÀgh´MhjÁgubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj¥gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jÀgh´Mhj÷fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÛfubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hjægh]”hŒ Description”…”�”}”(hjègh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjägubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MhjÛfubhÞ)�”}”(hXCompute the largest page size for va, last_va, and oa together and return it in lg2. The largest page size depends on the format's supported page sizes at this level, and the relative alignment of the VA and OA addresses. 0 means the OA cannot be stored with the provided pgsz_bitmap.”h]”hXCompute the largest page size for va, last_va, and oa together and return it in lg2. The largest page size depends on the format’s supported page sizes at this level, and the relative alignment of the VA and OA addresses. 0 means the OA cannot be stored with the provided pgsz_bitmap.”…”�”}”(hjügh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MhjÛfubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubj9)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jEŒPT_MAKE_LEVELS (C macro)”Œc.PT_MAKE_LEVELS”hNt”auh1j8hjBh²hh³Nh´NubjJ)�”}”(hhh]”(jO)�”}”(hŒPT_MAKE_LEVELS”h]”jU)�”}”(hŒPT_MAKE_LEVELS”h]”j~)�”}”(hŒPT_MAKE_LEVELS”h]”j„)�”}”(hj%hh]”hŒPT_MAKE_LEVELS”…”�”}”(hj/hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1jƒhj+hubah}”(h]”h ]”(j–j—eh"]”h$]”h&]”hÅhÆuh1j}hj'hh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mvubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¡ˆuh1jTj¢j£hj#hh²hh³jBhh´Mvubah}”(h]”jhah ]”(j§j¨eh"]”h$]”h&]”j¬ˆj­)j®huh1jNh³jBhh´Mvhj hh²hubj°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j¯hj hh²hh³jBhh´Mvubeh}”(h]”h ]”(jÌŒmacro”eh"]”h$]”h&]”jÑjÌjÒj[hjÓj[hjÔ‰jÕ‰jÖ‰uh1jIh²hhjBh³Nh´NubhÞ)�”}”(hŒ``PT_MAKE_LEVELS (fn, do_fn)``”h]”j/)�”}”(hjahh]”hŒPT_MAKE_LEVELS (fn, do_fn)”…”�”}”(hjchh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj_hubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MxhjBh²hubj )�”}”(hŒBuild an unwound walker ”h]”hÞ)�”}”(hŒBuild an unwound walker”h]”hŒBuild an unwound walker”…”�”}”(hj{hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mvhjwhubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³j‰hh´MvhjBh²hubjØ)�”}”(hXé**Parameters** ``fn`` Name of the walker function ``do_fn`` Function to call at each level **Description** This builds a function call tree that can be fully inlined. The caller must provide a function body in an __always_inline function:: static __always_inline int do_fn(struct pt_range *range, void *arg, unsigned int level, struct pt_table_p *table, pt_level_fn_t descend_fn) An inline function will be created for each table level that calls do_fn with a compile time constant for level and a pointer to the next lower function. This generates an optimally inlined walk where each of the functions sees a constant level and can codegen the exact constants/etc for that level. Note this can produce a lot of code!”h]”(hÞ)�”}”(hŒ**Parameters**”h]”jâ)�”}”(hj–hh]”hŒ Parameters”…”�”}”(hj˜hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj”hubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mzhj�hubjc)�”}”(hhh]”(jh)�”}”(hŒ#``fn`` Name of the walker function ”h]”(jn)�”}”(hŒ``fn``”h]”j/)�”}”(hjµhh]”hŒfn”…”�”}”(hj·hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hj³hubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mwhj¯hubj)�”}”(hhh]”hÞ)�”}”(hŒName of the walker function”h]”hŒName of the walker function”…”�”}”(hjÎhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÊhh´MwhjËhubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hj¯hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jÊhh´Mwhj¬hubjh)�”}”(hŒ)``do_fn`` Function to call at each level ”h]”(jn)�”}”(hŒ ``do_fn``”h]”j/)�”}”(hjîhh]”hŒdo_fn”…”�”}”(hjðhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j.hjìhubah}”(h]”h ]”h"]”h$]”h&]”uh1jmh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mxhjèhubj)�”}”(hhh]”hÞ)�”}”(hŒFunction to call at each level”h]”hŒFunction to call at each level”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jih´Mxhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j~hjèhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jgh³jih´Mxhj¬hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhj�hubhÞ)�”}”(hŒ**Description**”h]”jâ)�”}”(hj)ih]”hŒ Description”…”�”}”(hj+ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhj'iubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mzhj�hubhÞ)�”}”(hŒ„This builds a function call tree that can be fully inlined. The caller must provide a function body in an __always_inline function::”h]”hŒƒThis builds a function call tree that can be fully inlined. The caller must provide a function body in an __always_inline function:”…”�”}”(hj?ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Myhj�hubjÄ)�”}”(hŒ™static __always_inline int do_fn(struct pt_range *range, void *arg, unsigned int level, struct pt_table_p *table, pt_level_fn_t descend_fn)”h]”hŒ™static __always_inline int do_fn(struct pt_range *range, void *arg, unsigned int level, struct pt_table_p *table, pt_level_fn_t descend_fn)”…”�”}”hjNisbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÃh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M|hj�hubhÞ)�”}”(hX,An inline function will be created for each table level that calls do_fn with a compile time constant for level and a pointer to the next lower function. This generates an optimally inlined walk where each of the functions sees a constant level and can codegen the exact constants/etc for that level.”h]”hX,An inline function will be created for each table level that calls do_fn with a compile time constant for level and a pointer to the next lower function. This generates an optimally inlined walk where each of the functions sees a constant level and can codegen the exact constants/etc for that level.”…”�”}”(hj]ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M€hj�hubhÞ)�”}”(hŒ$Note this can produce a lot of code!”h]”hŒ$Note this can produce a lot of code!”…”�”}”(hjlih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M…hj�hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j×hjBh²hh³Nh´Nubeh}”(h]”Œiteration-helpers”ah ]”h"]”Œiteration helpers”ah$]”h&]”uh1hÈhjzh²hh³hÇh´KGubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒWriting a Format”h]”hŒWriting a Format”…”�”}”(hj�ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjŠih²hh³hÇh´KLubhÞ)�”}”(hŒ¨It is best to start from a simple format that is similar to the target. x86_64 is usually a good reference for something simple, and AMDv1 is something fairly complete.”h]”hŒ¨It is best to start from a simple format that is similar to the target. x86_64 is usually a good reference for something simple, and AMDv1 is something fairly complete.”…”�”}”(hj›ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KNhjŠih²hubhÞ)�”}”(hŒ|The required inline functions need to be implemented in the format header. These should all follow the standard pattern of::”h]”hŒ{The required inline functions need to be implemented in the format header. These should all follow the standard pattern of:”…”�”}”(hj©ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KRhjŠih²hubjÄ)�”}”(hŒzstatic inline pt_oaddr_t amdv1pt_entry_oa(const struct pt_state *pts) { [..] } #define pt_entry_oa amdv1pt_entry_oa”h]”hŒzstatic inline pt_oaddr_t amdv1pt_entry_oa(const struct pt_state *pts) { [..] } #define pt_entry_oa amdv1pt_entry_oa”…”�”}”hj·isbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÃh³hÇh´KUhjŠih²hubhÞ)�”}”(hXAwhere a uniquely named per-format inline function provides the implementation and a define maps it to the generic name. This is intended to make debug symbols work better. inline functions should always be used as the prototypes in pt_common.h will cause the compiler to validate the function signature to prevent errors.”h]”hXAwhere a uniquely named per-format inline function provides the implementation and a define maps it to the generic name. This is intended to make debug symbols work better. inline functions should always be used as the prototypes in pt_common.h will cause the compiler to validate the function signature to prevent errors.”…”�”}”(hjÅih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K[hjŠih²hubhÞ)�”}”(hŒDReview pt_fmt_defaults.h to understand some of the optional inlines.”h]”hŒDReview pt_fmt_defaults.h to understand some of the optional inlines.”…”�”}”(hjÓih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KahjŠih²hubhÞ)�”}”(hŒ‰Once the format compiles then it should be run through the generic page table kunit test in kunit_generic_pt.h using kunit. For example::”h]”hŒˆOnce the format compiles then it should be run through the generic page table kunit test in kunit_generic_pt.h using kunit. For example:”…”�”}”(hjáih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KchjŠih²hubjÄ)�”}”(hX+$ tools/testing/kunit/kunit.py run --build_dir build_kunit_x86_64 --arch x86_64 --kunitconfig ./drivers/iommu/generic_pt/.kunitconfig amdv1_fmt_test.* [...] [11:15:08] Testing complete. Ran 9 tests: passed: 9 [11:15:09] Elapsed time: 3.137s total, 0.001s configuring, 2.368s building, 0.311s running”h]”hX+$ tools/testing/kunit/kunit.py run --build_dir build_kunit_x86_64 --arch x86_64 --kunitconfig ./drivers/iommu/generic_pt/.kunitconfig amdv1_fmt_test.* [...] [11:15:08] Testing complete. Ran 9 tests: passed: 9 [11:15:09] Elapsed time: 3.137s total, 0.001s configuring, 2.368s building, 0.311s running”…”�”}”hjïisbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jÃh³hÇh´KfhjŠih²hubhÞ)�”}”(hŒ·The generic tests are intended to prove out the format functions and give clearer failures to speed up finding the problems. Once those pass then the entire kunit suite should be run.”h]”hŒ·The generic tests are intended to prove out the format functions and give clearer failures to speed up finding the problems. Once those pass then the entire kunit suite should be run.”…”�”}”(hjýih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KkhjŠih²hubeh}”(h]”Œwriting-a-format”ah ]”h"]”Œwriting a format”ah$]”h&]”uh1hÈhjzh²hh³hÇh´KLubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒIOMMU Invalidation Features”h]”hŒIOMMU Invalidation Features”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjjh²hh³hÇh´KpubhÞ)�”}”(hŒ˜Invalidation is how the page table algorithms synchronize with a HW cache of the page table memory, typically called the TLB (or IOTLB for IOMMU cases).”h]”hŒ˜Invalidation is how the page table algorithms synchronize with a HW cache of the page table memory, typically called the TLB (or IOTLB for IOMMU cases).”…”�”}”(hj$jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Krhjjh²hubhÞ)�”}”(hŒËThe TLB can store present PTEs, non-present PTEs and table pointers, depending on its design. Every HW has its own approach on how to describe what has changed to have changed items removed from the TLB.”h]”hŒËThe TLB can store present PTEs, non-present PTEs and table pointers, depending on its design. Every HW has its own approach on how to describe what has changed to have changed items removed from the TLB.”…”�”}”(hj2jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kuhjjh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒPT_FEAT_FLUSH_RANGE”h]”hŒPT_FEAT_FLUSH_RANGE”…”�”}”(hjCjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj@jh²hh³hÇh´KzubhÞ)�”}”(hXÏPT_FEAT_FLUSH_RANGE is the easiest scheme to understand. It tries to generate a single range invalidation for each operation, over-invalidating if there are gaps of VA that don't need invalidation. This trades off impacted VA for number of invalidation operations. It does not keep track of what is being invalidated; however, if pages have to be freed then page table pointers have to be cleaned from the walk cache. The range can start/end at any page boundary.”h]”hXÑPT_FEAT_FLUSH_RANGE is the easiest scheme to understand. It tries to generate a single range invalidation for each operation, over-invalidating if there are gaps of VA that don’t need invalidation. This trades off impacted VA for number of invalidation operations. It does not keep track of what is being invalidated; however, if pages have to be freed then page table pointers have to be cleaned from the walk cache. The range can start/end at any page boundary.”…”�”}”(hjQjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K|hj@jh²hubeh}”(h]”Œpt-feat-flush-range”ah ]”h"]”Œpt_feat_flush_range”ah$]”h&]”uh1hÈhjjh²hh³hÇh´KzubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒPT_FEAT_FLUSH_RANGE_NO_GAPS”h]”hŒPT_FEAT_FLUSH_RANGE_NO_GAPS”…”�”}”(hjjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjgjh²hh³hÇh´K„ubhÞ)�”}”(hX.PT_FEAT_FLUSH_RANGE_NO_GAPS is similar to PT_FEAT_FLUSH_RANGE; however, it tries to minimize the amount of impacted VA by issuing extra flush operations. This is useful if the cost of processing VA is very high, for instance because a hypervisor is processing the page table with a shadowing algorithm.”h]”hX.PT_FEAT_FLUSH_RANGE_NO_GAPS is similar to PT_FEAT_FLUSH_RANGE; however, it tries to minimize the amount of impacted VA by issuing extra flush operations. This is useful if the cost of processing VA is very high, for instance because a hypervisor is processing the page table with a shadowing algorithm.”…”�”}”(hjxjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K†hjgjh²hubeh}”(h]”Œpt-feat-flush-range-no-gaps”ah ]”h"]”Œpt_feat_flush_range_no_gaps”ah$]”h&]”uh1hÈhjjh²hh³hÇh´K„ubeh}”(h]”Œiommu-invalidation-features”ah ]”h"]”Œiommu invalidation features”ah$]”h&]”uh1hÈhjzh²hh³hÇh´Kpubeh}”(h]”Œusage”ah ]”h"]”Œusage”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´Kubeh}”(h]”Œgeneric-radix-page-table”ah ]”h"]”Œgeneric radix page table”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(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”Œentry”Œ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”jÉjŒ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”}”Œrefids”}”Œnameids”}”(j£jj jj›jj˜jjþAjûAj‡ij„ijjj jj“jj�jjdjjajj‹jjˆjuŒ nametypes”}”(j£j‰j›j‰jþA‰j‡i‰jj‰j“j‰jdj‰j‹j‰uh}”(j jhÊj˜jjzjûAj'jGjPj9j>jŸ j¤ jø jý j”j™j/j4j:j?jºj¿jJjOjåjêj?jDj÷jüjÄjÉj|j�j+j0jÚ jß ju"jz"jã%jè%jÞ(jã(jœ*j¡*jK,jP,j.j.jÙ/jÞ/j2j2jÍ3jÒ3j”5j™5jL7jQ7jû8j9jÒ:j×:jo<jt<jy>j~>j„@j‰@j„ijBjBj#BjŸCj¤Cj Ej%EjFGjKGjþHjIj¶Jj»Jj7Lj`jcjcj&ej+ejhj#hj jjŠij�jjjjajj@jjˆjjgjuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.