sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget&/translations/zh_CN/driver-api/pci/tsmmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/zh_TW/driver-api/pci/tsmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/it_IT/driver-api/pci/tsmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/ja_JP/driver-api/pci/tsmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/ko_KR/driver-api/pci/tsmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/pt_BR/driver-api/pci/tsmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget&/translations/sp_SP/driver-api/pci/tsmmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh@/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm.rsthKubh)}(h4This data file has been placed in the public domain.h]h4This data file has been placed in the public domain.}hhsbah}(h]h ]h"]h$]h&]hhuh1hhhhhho/srv/docbuild/lib/venvs/build-kernel-docs/lib64/python3.9/site-packages/docutils/parsers/rst/include/isonum.txthKubh)}(hDerived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .h]hDerived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .}hhsbah}(h]h ]h"]h$]h&]hhuh1hhhhhhhhKubhsubstitution_definition)}(h*.. |amp| unicode:: U+00026 .. AMPERSANDh]h&}hhsbah}(h]h ]h"]ampah$]h&]uh1hhhhKhhhhubh)}(h+.. |apos| unicode:: U+00027 .. APOSTROPHEh]h'}hhsbah}(h]h ]h"]aposah$]h&]uh1hhhhKhhhhubh)}(h).. |ast| unicode:: U+0002A .. ASTERISKh]h*}hjsbah}(h]h ]h"]astah$]h&]uh1hhhhK hhhhubh)}(h+.. |brvbar| unicode:: U+000A6 .. BROKEN BARh]h¦}hjsbah}(h]h ]h"]brvbarah$]h&]uh1hhhhK hhhhubh)}(h0.. |bsol| unicode:: U+0005C .. REVERSE SOLIDUSh]h\}hj#sbah}(h]h ]h"]bsolah$]h&]uh1hhhhK hhhhubh)}(h*.. |cent| unicode:: U+000A2 .. CENT SIGNh]h¢}hj2sbah}(h]h ]h"]centah$]h&]uh1hhhhK hhhhubh)}(h&.. |colon| unicode:: U+0003A .. COLONh]h:}hjAsbah}(h]h ]h"]colonah$]h&]uh1hhhhK hhhhubh)}(h&.. |comma| unicode:: U+0002C .. COMMAh]h,}hjPsbah}(h]h ]h"]commaah$]h&]uh1hhhhKhhhhubh)}(h... |commat| unicode:: U+00040 .. COMMERCIAL ATh]h@}hj_sbah}(h]h ]h"]commatah$]h&]uh1hhhhKhhhhubh)}(h/.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGNh]h©}hjnsbah}(h]h ]h"]copyah$]h&]uh1hhhhKhhhhubh)}(h... |curren| unicode:: U+000A4 .. CURRENCY SIGNh]h¤}hj}sbah}(h]h ]h"]currenah$]h&]uh1hhhhKhhhhubh)}(h0.. |darr| unicode:: U+02193 .. DOWNWARDS ARROWh]h↓}hjsbah}(h]h ]h"]darrah$]h&]uh1hhhhKhhhhubh)}(h,.. |deg| unicode:: U+000B0 .. DEGREE SIGNh]h°}hjsbah}(h]h ]h"]degah$]h&]uh1hhhhKhhhhubh)}(h... |divide| unicode:: U+000F7 .. DIVISION SIGNh]h÷}hjsbah}(h]h ]h"]divideah$]h&]uh1hhhhKhhhhubh)}(h,.. |dollar| unicode:: U+00024 .. DOLLAR SIGNh]h$}hjsbah}(h]h ]h"]dollarah$]h&]uh1hhhhKhhhhubh)}(h,.. |equals| unicode:: U+0003D .. EQUALS SIGNh]h=}hjsbah}(h]h ]h"]equalsah$]h&]uh1hhhhKhhhhubh)}(h1.. |excl| unicode:: U+00021 .. EXCLAMATION MARKh]h!}hjsbah}(h]h ]h"]exclah$]h&]uh1hhhhKhhhhubh)}(h9.. |frac12| unicode:: U+000BD .. VULGAR FRACTION ONE HALFh]h½}hjsbah}(h]h ]h"]frac12ah$]h&]uh1hhhhKhhhhubh)}(h<.. |frac14| unicode:: U+000BC .. VULGAR FRACTION ONE QUARTERh]h¼}hjsbah}(h]h ]h"]frac14ah$]h&]uh1hhhhKhhhhubh)}(h;.. |frac18| unicode:: U+0215B .. VULGAR FRACTION ONE EIGHTHh]h⅛}hjsbah}(h]h ]h"]frac18ah$]h&]uh1hhhhKhhhhubh)}(h?.. |frac34| unicode:: U+000BE .. VULGAR FRACTION THREE QUARTERSh]h¾}hjsbah}(h]h ]h"]frac34ah$]h&]uh1hhhhKhhhhubh)}(h>.. |frac38| unicode:: U+0215C .. VULGAR FRACTION THREE EIGHTHSh]h⅜}hj"sbah}(h]h ]h"]frac38ah$]h&]uh1hhhhKhhhhubh)}(h=.. |frac58| unicode:: U+0215D .. VULGAR FRACTION FIVE EIGHTHSh]h⅝}hj1sbah}(h]h ]h"]frac58ah$]h&]uh1hhhhKhhhhubh)}(h>.. |frac78| unicode:: U+0215E .. VULGAR FRACTION SEVEN EIGHTHSh]h⅞}hj@sbah}(h]h ]h"]frac78ah$]h&]uh1hhhhKhhhhubh)}(h2.. |gt| unicode:: U+0003E .. GREATER-THAN SIGNh]h>}hjOsbah}(h]h ]h"]gtah$]h&]uh1hhhhKhhhhubh)}(h9.. |half| unicode:: U+000BD .. VULGAR FRACTION ONE HALFh]h½}hj^sbah}(h]h ]h"]halfah$]h&]uh1hhhhK hhhhubh)}(h/.. |horbar| unicode:: U+02015 .. HORIZONTAL BARh]h―}hjmsbah}(h]h ]h"]horbarah$]h&]uh1hhhhK!hhhhubh)}(h'.. |hyphen| unicode:: U+02010 .. HYPHENh]h‐}hj|sbah}(h]h ]h"]hyphenah$]h&]uh1hhhhK"hhhhubh)}(h:.. |iexcl| unicode:: U+000A1 .. INVERTED EXCLAMATION MARKh]h¡}hjsbah}(h]h ]h"]iexclah$]h&]uh1hhhhK#hhhhubh)}(h7.. |iquest| unicode:: U+000BF .. INVERTED QUESTION MARKh]h¿}hjsbah}(h]h ]h"]iquestah$]h&]uh1hhhhK$hhhhubh)}(hJ.. |laquo| unicode:: U+000AB .. LEFT-POINTING DOUBLE ANGLE QUOTATION MARKh]h«}hjsbah}(h]h ]h"]laquoah$]h&]uh1hhhhK%hhhhubh)}(h0.. |larr| unicode:: U+02190 .. LEFTWARDS ARROWh]h←}hjsbah}(h]h ]h"]larrah$]h&]uh1hhhhK&hhhhubh)}(h3.. |lcub| unicode:: U+0007B .. LEFT CURLY BRACKETh]h{}hjsbah}(h]h ]h"]lcubah$]h&]uh1hhhhK'hhhhubh)}(h;.. |ldquo| unicode:: U+0201C .. LEFT DOUBLE QUOTATION MARKh]h“}hjsbah}(h]h ]h"]ldquoah$]h&]uh1hhhhK(hhhhubh)}(h).. |lowbar| unicode:: U+0005F .. LOW LINEh]h_}hjsbah}(h]h ]h"]lowbarah$]h&]uh1hhhhK)hhhhubh)}(h1.. |lpar| unicode:: U+00028 .. LEFT PARENTHESISh]h(}hjsbah}(h]h ]h"]lparah$]h&]uh1hhhhK*hhhhubh)}(h4.. |lsqb| unicode:: U+0005B .. LEFT SQUARE BRACKETh]h[}hjsbah}(h]h ]h"]lsqbah$]h&]uh1hhhhK+hhhhubh)}(h;.. |lsquo| unicode:: U+02018 .. LEFT SINGLE QUOTATION MARKh]h‘}hjsbah}(h]h ]h"]lsquoah$]h&]uh1hhhhK,hhhhubh)}(h/.. |lt| unicode:: U+0003C .. LESS-THAN SIGNh]h<}hj!sbah}(h]h ]h"]ltah$]h&]uh1hhhhK-hhhhubh)}(h+.. |micro| unicode:: U+000B5 .. MICRO SIGNh]hµ}hj0sbah}(h]h ]h"]microah$]h&]uh1hhhhK.hhhhubh)}(h+.. |middot| unicode:: U+000B7 .. MIDDLE DOTh]h·}hj?sbah}(h]h ]h"]middotah$]h&]uh1hhhhK/hhhhubh)}(h/.. |nbsp| unicode:: U+000A0 .. NO-BREAK SPACEh]h }hjNsbah}(h]h ]h"]nbspah$]h&]uh1hhhhK0hhhhubh)}(h).. |not| unicode:: U+000AC .. NOT SIGNh]h¬}hj]sbah}(h]h ]h"]notah$]h&]uh1hhhhK1hhhhubh)}(h,.. |num| unicode:: U+00023 .. NUMBER SIGNh]h#}hjlsbah}(h]h ]h"]numah$]h&]uh1hhhhK2hhhhubh)}(h).. |ohm| unicode:: U+02126 .. OHM SIGNh]hΩ}hj{sbah}(h]h ]h"]ohmah$]h&]uh1hhhhK3hhhhubh)}(h;.. |ordf| unicode:: U+000AA .. FEMININE ORDINAL INDICATORh]hª}hjsbah}(h]h ]h"]ordfah$]h&]uh1hhhhK4hhhhubh)}(h<.. |ordm| unicode:: U+000BA .. MASCULINE ORDINAL INDICATORh]hº}hjsbah}(h]h ]h"]ordmah$]h&]uh1hhhhK5hhhhubh)}(h-.. |para| unicode:: U+000B6 .. PILCROW SIGNh]h¶}hjsbah}(h]h ]h"]paraah$]h&]uh1hhhhK6hhhhubh)}(h-.. |percnt| unicode:: U+00025 .. PERCENT SIGNh]h%}hjsbah}(h]h ]h"]percntah$]h&]uh1hhhhK7hhhhubh)}(h*.. |period| unicode:: U+0002E .. FULL STOPh]h.}hjsbah}(h]h ]h"]periodah$]h&]uh1hhhhK8hhhhubh)}(h*.. |plus| unicode:: U+0002B .. PLUS SIGNh]h+}hjsbah}(h]h ]h"]plusah$]h&]uh1hhhhK9hhhhubh)}(h0.. |plusmn| unicode:: U+000B1 .. PLUS-MINUS SIGNh]h±}hjsbah}(h]h ]h"]plusmnah$]h&]uh1hhhhK:hhhhubh)}(h+.. |pound| unicode:: U+000A3 .. POUND SIGNh]h£}hjsbah}(h]h ]h"]poundah$]h&]uh1hhhhK;hhhhubh)}(h... |quest| unicode:: U+0003F .. QUESTION MARKh]h?}hjsbah}(h]h ]h"]questah$]h&]uh1hhhhKhhhhubh)}(h1.. |rarr| unicode:: U+02192 .. RIGHTWARDS ARROWh]h→}hj/sbah}(h]h ]h"]rarrah$]h&]uh1hhhhK?hhhhubh)}(h4.. |rcub| unicode:: U+0007D .. RIGHT CURLY BRACKETh]h}}hj>sbah}(h]h ]h"]rcubah$]h&]uh1hhhhK@hhhhubh)}(h<.. |rdquo| unicode:: U+0201D .. RIGHT DOUBLE QUOTATION MARKh]h”}hjMsbah}(h]h ]h"]rdquoah$]h&]uh1hhhhKAhhhhubh)}(h0.. |reg| unicode:: U+000AE .. REGISTERED SIGNh]h®}hj\sbah}(h]h ]h"]regah$]h&]uh1hhhhKBhhhhubh)}(h2.. |rpar| unicode:: U+00029 .. RIGHT PARENTHESISh]h)}hjksbah}(h]h ]h"]rparah$]h&]uh1hhhhKChhhhubh)}(h5.. |rsqb| unicode:: U+0005D .. RIGHT SQUARE BRACKETh]h]}hjzsbah}(h]h ]h"]rsqbah$]h&]uh1hhhhKDhhhhubh)}(h<.. |rsquo| unicode:: U+02019 .. RIGHT SINGLE QUOTATION MARKh]h’}hjsbah}(h]h ]h"]rsquoah$]h&]uh1hhhhKEhhhhubh)}(h-.. |sect| unicode:: U+000A7 .. SECTION SIGNh]h§}hjsbah}(h]h ]h"]sectah$]h&]uh1hhhhKFhhhhubh)}(h*.. |semi| unicode:: U+0003B .. SEMICOLONh]h;}hjsbah}(h]h ]h"]semiah$]h&]uh1hhhhKGhhhhubh)}(h,.. |shy| unicode:: U+000AD .. SOFT HYPHENh]h­}hjsbah}(h]h ]h"]shyah$]h&]uh1hhhhKHhhhhubh)}(h(.. |sol| unicode:: U+0002F .. SOLIDUSh]h/}hjsbah}(h]h ]h"]solah$]h&]uh1hhhhKIhhhhubh)}(h,.. |sung| unicode:: U+0266A .. EIGHTH NOTEh]h♪}hjsbah}(h]h ]h"]sungah$]h&]uh1hhhhKJhhhhubh)}(h0.. |sup1| unicode:: U+000B9 .. SUPERSCRIPT ONEh]h¹}hjsbah}(h]h ]h"]sup1ah$]h&]uh1hhhhKKhhhhubh)}(h0.. |sup2| unicode:: U+000B2 .. SUPERSCRIPT TWOh]h²}hjsbah}(h]h ]h"]sup2ah$]h&]uh1hhhhKLhhhhubh)}(h2.. |sup3| unicode:: U+000B3 .. SUPERSCRIPT THREEh]h³}hjsbah}(h]h ]h"]sup3ah$]h&]uh1hhhhKMhhhhubh)}(h4.. |times| unicode:: U+000D7 .. MULTIPLICATION SIGNh]h×}hjsbah}(h]h ]h"]timesah$]h&]uh1hhhhKNhhhhubh)}(h0.. |trade| unicode:: U+02122 .. TRADE MARK SIGNh]h™}hjsbah}(h]h ]h"]tradeah$]h&]uh1hhhhKOhhhhubh)}(h... |uarr| unicode:: U+02191 .. UPWARDS ARROWh]h↑}hj.sbah}(h]h ]h"]uarrah$]h&]uh1hhhhKPhhhhubh)}(h... |verbar| unicode:: U+0007C .. VERTICAL LINEh]h|}hj=sbah}(h]h ]h"]verbarah$]h&]uh1hhhhKQhhhhubh)}(h*.. |yen| unicode:: U+000A5 .. YEN SIGN h]h¥}hjLsbah}(h]h ]h"]yenah$]h&]uh1hhhhKRhhhhubhsection)}(hhh](htitle)}(h8PCI Trusted Execution Environment Security Manager (TSM)h]h8PCI Trusted Execution Environment Security Manager (TSM)}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj]hhhhhKubj\)}(hhh](ja)}(hSubsystem Interfacesh]hSubsystem Interfaces}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjphhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlepci_ide_partner (C struct)c.pci_ide_partnerhNtauh1jhjphhhNhNubhdesc)}(hhh](hdesc_signature)}(hpci_ide_partnerh]hdesc_signature_line)}(hstruct pci_ide_partnerh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(hpci_ide_partnerh]h desc_sig_name)}(hjh]hpci_ide_partner}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h paragraph)}(h+Per port pair Selective IDE Stream settingsh]h+Per port pair Selective IDE Stream settings}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjphNhNubh container)}(hX **Definition**:: struct pci_ide_partner { u16 rid_start; u16 rid_end; u8 stream_index; struct pci_bus_region mem_assoc; struct pci_bus_region pref_assoc; unsigned int default_stream:1; unsigned int setup:1; unsigned int enable:1; }; **Members** ``rid_start`` Partner Port Requester ID range start ``rid_end`` Partner Port Requester ID range end (inclusive) ``stream_index`` Selective IDE Stream Register Block selection ``mem_assoc`` PCI bus memory address association for targeting peer partner ``pref_assoc`` PCI bus prefetchable memory address association for targeting peer partner ``default_stream`` Endpoint uses this stream for all upstream TLPs regardless of address and RID association registers ``setup`` flag to track whether to run pci_ide_stream_teardown() for this partner slot ``enable`` flag whether to run pci_ide_stream_disable() for this partner slot **Description** By default, pci_ide_stream_alloc() initializes **mem_assoc** and **pref_assoc** with the immediate ancestor downstream port memory ranges (i.e. Type 1 Configuration Space Header values). Caller may zero size ({0, -1}) the range to drop it from consideration at pci_ide_stream_setup() time.h](h block_quote)}(hX.**Definition**:: struct pci_ide_partner { u16 rid_start; u16 rid_end; u8 stream_index; struct pci_bus_region mem_assoc; struct pci_bus_region pref_assoc; unsigned int default_stream:1; unsigned int setup:1; unsigned int enable:1; }; h](j)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj.ubh:}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKhj*ubh literal_block)}(hXstruct pci_ide_partner { u16 rid_start; u16 rid_end; u8 stream_index; struct pci_bus_region mem_assoc; struct pci_bus_region pref_assoc; unsigned int default_stream:1; unsigned int setup:1; unsigned int enable:1; };h]hXstruct pci_ide_partner { u16 rid_start; u16 rid_end; u8 stream_index; struct pci_bus_region mem_assoc; struct pci_bus_region pref_assoc; unsigned int default_stream:1; unsigned int setup:1; unsigned int enable:1; };}hjOsbah}(h]h ]h"]h$]h&]hhuh1jMhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK!hj*ubeh}(h]h ]h"]h$]h&]uh1j(hjLhKhj$ubj)}(h **Members**h]j3)}(hjfh]hMembers}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjdubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK,hj$ubhdefinition_list)}(hhh](hdefinition_list_item)}(h4``rid_start`` Partner Port Requester ID range start h](hterm)}(h ``rid_start``h]hliteral)}(hjh]h rid_start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKhjubh definition)}(hhh]j)}(h%Partner Port Requester ID range starth]h%Partner Port Requester ID range start}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj~ubj)}(h<``rid_end`` Partner Port Requester ID range end (inclusive) h](j)}(h ``rid_end``h]j)}(hjh]hrid_end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKhjubj)}(hhh]j)}(h/Partner Port Requester ID range end (inclusive)h]h/Partner Port Requester ID range end (inclusive)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj~ubj)}(h?``stream_index`` Selective IDE Stream Register Block selection h](j)}(h``stream_index``h]j)}(hjh]h stream_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKhjubj)}(hhh]j)}(h-Selective IDE Stream Register Block selectionh]h-Selective IDE Stream Register Block selection}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj~ubj)}(hL``mem_assoc`` PCI bus memory address association for targeting peer partner h](j)}(h ``mem_assoc``h]j)}(hj:h]h mem_assoc}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK hj4ubj)}(hhh]j)}(h=PCI bus memory address association for targeting peer partnerh]h=PCI bus memory address association for targeting peer partner}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOhK hjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjOhK hj~ubj)}(hZ``pref_assoc`` PCI bus prefetchable memory address association for targeting peer partner h](j)}(h``pref_assoc``h]j)}(hjsh]h pref_assoc}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK"hjmubj)}(hhh]j)}(hJPCI bus prefetchable memory address association for targeting peer partnerh]hJPCI bus prefetchable memory address association for targeting peer partner}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK!hjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhK"hj~ubj)}(hw``default_stream`` Endpoint uses this stream for all upstream TLPs regardless of address and RID association registers h](j)}(h``default_stream``h]j)}(hjh]hdefault_stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK$hjubj)}(hhh]j)}(hcEndpoint uses this stream for all upstream TLPs regardless of address and RID association registersh]hcEndpoint uses this stream for all upstream TLPs regardless of address and RID association registers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK$hj~ubj)}(hW``setup`` flag to track whether to run pci_ide_stream_teardown() for this partner slot h](j)}(h ``setup``h]j)}(hjh]hsetup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK&hjubj)}(hhh]j)}(hLflag to track whether to run pci_ide_stream_teardown() for this partner sloth]hLflag to track whether to run pci_ide_stream_teardown() for this partner slot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK&hj~ubj)}(hO``enable`` flag whether to run pci_ide_stream_disable() for this partner slot h](j)}(h ``enable``h]j)}(hj!h]henable}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK(hjubj)}(hhh]j)}(hBflag whether to run pci_ide_stream_disable() for this partner sloth]hBflag whether to run pci_ide_stream_disable() for this partner slot}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK'hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hK(hj~ubeh}(h]h ]h"]h$]h&]uh1j|hj$ubj)}(h**Description**h]j3)}(hj]h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj[ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK*hj$ubj)}(hX!By default, pci_ide_stream_alloc() initializes **mem_assoc** and **pref_assoc** with the immediate ancestor downstream port memory ranges (i.e. Type 1 Configuration Space Header values). Caller may zero size ({0, -1}) the range to drop it from consideration at pci_ide_stream_setup() time.h](h/By default, pci_ide_stream_alloc() initializes }(hjshhhNhNubj3)}(h **mem_assoc**h]h mem_assoc}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjsubh and }(hjshhhNhNubj3)}(h**pref_assoc**h]h pref_assoc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjsubh with the immediate ancestor downstream port memory ranges (i.e. Type 1 Configuration Space Header values). Caller may zero size ({0, -1}) the range to drop it from consideration at pci_ide_stream_setup() time.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK'hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpci_ide_regs (C struct)c.pci_ide_regshNtauh1jhjphhhNhNubj)}(hhh](j)}(h pci_ide_regsh]j)}(hstruct pci_ide_regsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK/ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK/ubj)}(h pci_ide_regsh]j)}(hjh]h pci_ide_regs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhK/ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhK/ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhK/hjhhubj)}(hhh]j)}(h@Hardware register association settings for Selective IDE Streamsh]h@Hardware register association settings for Selective IDE Streams}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK9hj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK/ubeh}(h]h ](jstructeh"]h$]h&]jjjj jj jj j!uh1jhhhjphNhNubj#)}(hXC **Definition**:: struct pci_ide_regs { u32 rid1; u32 rid2; struct { u32 assoc1; u32 assoc2; u32 assoc3; } addr[2]; int nr_addr; }; **Members** ``rid1`` IDE RID Association Register 1 ``rid2`` IDE RID Association Register 2 ``addr`` Up to two address association blocks (IDE Address Association Register 1 through 3) for MMIO and prefetchable MMIO ``nr_addr`` Number of address association blocks initialized **Description** See pci_ide_stream_to_regs()h](j))}(h**Definition**:: struct pci_ide_regs { u32 rid1; u32 rid2; struct { u32 assoc1; u32 assoc2; u32 assoc3; } addr[2]; int nr_addr; }; h](j)}(h**Definition**::h](j3)}(h**Definition**h]h Definition}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj, ubh:}(hj, hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK=hj( ubjN)}(hstruct pci_ide_regs { u32 rid1; u32 rid2; struct { u32 assoc1; u32 assoc2; u32 assoc3; } addr[2]; int nr_addr; };h]hstruct pci_ide_regs { u32 rid1; u32 rid2; struct { u32 assoc1; u32 assoc2; u32 assoc3; } addr[2]; int nr_addr; };}hjI sbah}(h]h ]h"]h$]h&]hhuh1jMhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK?hj( ubeh}(h]h ]h"]h$]h&]uh1j(hjH hK=hj$ ubj)}(h **Members**h]j3)}(hj` h]hMembers}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj^ ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKJhj$ ubj})}(hhh](j)}(h(``rid1`` IDE RID Association Register 1 h](j)}(h``rid1``h]j)}(hj h]hrid1}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj} ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK?hjv ubj)}(h>``nr_addr`` Number of address association blocks initialized h](j)}(h ``nr_addr``h]j)}(hj+ h]hnr_addr}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj) ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKAhj% ubj)}(hhh]j)}(h0Number of address association blocks initializedh]h0Number of address association blocks initialized}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK@hjA ubah}(h]h ]h"]h$]h&]uh1jhj% ubeh}(h]h ]h"]h$]h&]uh1jhj@ hKAhjv ubeh}(h]h ]h"]h$]h&]uh1j|hj$ ubj)}(h**Description**h]j3)}(hjg h]h Description}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hje ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKChj$ ubj)}(hSee pci_ide_stream_to_regs()h]hSee pci_ide_stream_to_regs()}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK@hj$ ubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpci_ide (C struct) c.pci_idehNtauh1jhjphhhNhNubj)}(hhh](j)}(hpci_ideh]j)}(hstruct pci_ideh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKEubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKEubj)}(hpci_ideh]j)}(hj h]hpci_ide}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hKEubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hKEubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hKEhj hhubj)}(hhh]j)}(h$PCIe Selective IDE Stream descriptorh]h$PCIe Selective IDE Stream descriptor}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKOhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKEubeh}(h]h ](jstructeh"]h$]h&]jjjj jj jj j!uh1jhhhjphNhNubj#)}(hX **Definition**:: struct pci_ide { struct pci_dev *pdev; struct pci_ide_partner partner[PCI_IDE_PARTNER_MAX]; u8 host_bridge_stream; int stream_id; const char *name; }; **Members** ``pdev`` PCIe Endpoint in the pci_ide_partner pair ``partner`` per-partner settings ``host_bridge_stream`` allocated from host bridge **ide_stream_ida** pool ``stream_id`` unique Stream ID (within Partner Port pairing) ``name`` name of the established Selective IDE Stream in sysfs **Description** Negative **stream_id** values indicate "uninitialized" on the expectation that with TSM established IDE the TSM owns the stream_id allocation.h](j))}(h**Definition**:: struct pci_ide { struct pci_dev *pdev; struct pci_ide_partner partner[PCI_IDE_PARTNER_MAX]; u8 host_bridge_stream; int stream_id; const char *name; }; h](j)}(h**Definition**::h](j3)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKShj ubjN)}(hstruct pci_ide { struct pci_dev *pdev; struct pci_ide_partner partner[PCI_IDE_PARTNER_MAX]; u8 host_bridge_stream; int stream_id; const char *name; };h]hstruct pci_ide { struct pci_dev *pdev; struct pci_ide_partner partner[PCI_IDE_PARTNER_MAX]; u8 host_bridge_stream; int stream_id; const char *name; };}hj/ sbah}(h]h ]h"]h$]h&]hhuh1jMhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKUhj ubeh}(h]h ]h"]h$]h&]uh1j(hj. hKShj ubj)}(h **Members**h]j3)}(hjF h]hMembers}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjD ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK]hj ubj})}(hhh](j)}(h3``pdev`` PCIe Endpoint in the pci_ide_partner pair h](j)}(h``pdev``h]j)}(hje h]hpdev}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKQhj_ ubj)}(hhh]j)}(h)PCIe Endpoint in the pci_ide_partner pairh]h)PCIe Endpoint in the pci_ide_partner pair}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz hKQhj{ ubah}(h]h ]h"]h$]h&]uh1jhj_ ubeh}(h]h ]h"]h$]h&]uh1jhjz hKQhj\ ubj)}(h!``partner`` per-partner settings h](j)}(h ``partner``h]j)}(hj h]hpartner}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKRhj ubj)}(hhh]j)}(hper-partner settingsh]hper-partner settings}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hKRhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKRhj\ ubj)}(hJ``host_bridge_stream`` allocated from host bridge **ide_stream_ida** pool h](j)}(h``host_bridge_stream``h]j)}(hj h]hhost_bridge_stream}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKShj ubj)}(hhh]j)}(h2allocated from host bridge **ide_stream_ida** poolh](hallocated from host bridge }(hj hhhNhNubj3)}(h**ide_stream_ida**h]hide_stream_ida}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj ubh pool}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhj hKShj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKShj\ ubj)}(h=``stream_id`` unique Stream ID (within Partner Port pairing) h](j)}(h ``stream_id``h]j)}(hj" h]h stream_id}(hj$ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKThj ubj)}(hhh]j)}(h.unique Stream ID (within Partner Port pairing)h]h.unique Stream ID (within Partner Port pairing)}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7 hKThj8 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj7 hKThj\ ubj)}(h@``name`` name of the established Selective IDE Stream in sysfs h](j)}(h``name``h]j)}(hj[ h]hname}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKVhjU ubj)}(hhh]j)}(h5name of the established Selective IDE Stream in sysfsh]h5name of the established Selective IDE Stream in sysfs}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKUhjq ubah}(h]h ]h"]h$]h&]uh1jhjU ubeh}(h]h ]h"]h$]h&]uh1jhjp hKVhj\ ubeh}(h]h ]h"]h$]h&]uh1j|hj ubj)}(h**Description**h]j3)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKXhj ubj)}(hNegative **stream_id** values indicate "uninitialized" on the expectation that with TSM established IDE the TSM owns the stream_id allocation.h](h Negative }(hj hhhNhNubj3)}(h **stream_id**h]h stream_id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj ubh| values indicate “uninitialized” on the expectation that with TSM established IDE the TSM owns the stream_id allocation.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKUhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!pci_ide_stream_alloc (C function)c.pci_ide_stream_allochNtauh1jhjphhhNhNubj)}(hhh](j)}(hjj>jj j!uh1jhhhjphNhNubj#)}(hX**Parameters** ``struct pci_dev *pdev`` PCIe device object for either a Root Port or Endpoint Partner Port ``struct pci_ide *ide`` registered and setup IDE settings descriptor **Description** Activate the stream by writing to the Selective IDE Stream Control Register. Note that the state may go "insecure" at any point after returning 0, but those events are equivalent to a "link down" event and handled via asynchronous error reporting. Caller is responsible to clear the enable bit in the -ENXIO case. **Return** 0 if the stream successfully entered the "secure" state, and -EINVAL if **ide** is invalid, and -ENXIO if the stream fails to enter the secure state.h](j)}(h**Parameters**h]j3)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjFubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjBubj})}(hhh](j)}(h\``struct pci_dev *pdev`` PCIe device object for either a Root Port or Endpoint Partner Port h](j)}(h``struct pci_dev *pdev``h]j)}(hjgh]hstruct pci_dev *pdev}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjaubj)}(hhh]j)}(hBPCIe device object for either a Root Port or Endpoint Partner Porth]hBPCIe device object for either a Root Port or Endpoint Partner Port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|hMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hMhj^ubj)}(hE``struct pci_ide *ide`` registered and setup IDE settings descriptor h](j)}(h``struct pci_ide *ide``h]j)}(hjh]hstruct pci_ide *ide}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubj)}(hhh]j)}(h,registered and setup IDE settings descriptorh]h,registered and setup IDE settings descriptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj^ubeh}(h]h ]h"]h$]h&]uh1j|hjBubj)}(h**Description**h]j3)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjBubj)}(hLActivate the stream by writing to the Selective IDE Stream Control Register.h]hLActivate the stream by writing to the Selective IDE Stream Control Register.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjBubj)}(hNote that the state may go "insecure" at any point after returning 0, but those events are equivalent to a "link down" event and handled via asynchronous error reporting.h]hNote that the state may go “insecure” at any point after returning 0, but those events are equivalent to a “link down” event and handled via asynchronous error reporting.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjBubj)}(hACaller is responsible to clear the enable bit in the -ENXIO case.h]hACaller is responsible to clear the enable bit in the -ENXIO case.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjBubj)}(h **Return**h]j3)}(hj h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjBubj)}(h0 if the stream successfully entered the "secure" state, and -EINVAL if **ide** is invalid, and -ENXIO if the stream fails to enter the secure state.h](hL0 if the stream successfully entered the “secure” state, and -EINVAL if }(hj6hhhNhNubj3)}(h**ide**h]hide}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj6ubhF is invalid, and -ENXIO if the stream fails to enter the secure state.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#pci_ide_stream_disable (C function)c.pci_ide_stream_disablehNtauh1jhjphhhNhNubj)}(hhh](j)}(hGvoid pci_ide_stream_disable (struct pci_dev *pdev, struct pci_ide *ide)h]j)}(hFvoid pci_ide_stream_disable(struct pci_dev *pdev, struct pci_ide *ide)h](j)}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjshhhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjhMubj)}(hpci_ide_stream_disableh]j)}(hpci_ide_stream_disableh]hpci_ide_stream_disable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjshhhjhMubjm )}(h+(struct pci_dev *pdev, struct pci_ide *ide)h](js )}(hstruct pci_dev *pdevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hpci_devh]hpci_dev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetjmodnameN classnameNj' j* )}j- ]j0 )}j# jsbc.pci_ide_stream_disableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjE )}(hjH h]h*}(hjhhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hjubj)}(hpdevh]hpdev}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hjubjs )}(hstruct pci_ide *ideh](j)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(hpci_ideh]hpci_ide}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetjFmodnameN classnameNj' j* )}j- ]jc.pci_ide_stream_disableasbuh1hhj"ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubjE )}(hjH h]h*}(hjphhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hj"ubj)}(hideh]hide}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hjubeh}(h]h ]h"]h$]h&]hhuh1jl hjshhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjohhhjhMubah}(h]jjah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjlhhubj)}(hhh]j)}(hdisable a Selective IDE Streamh]hdisable a Selective IDE Stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjj j!uh1jhhhjphNhNubj#)}(hX!**Parameters** ``struct pci_dev *pdev`` PCIe device object for either a Root Port or Endpoint Partner Port ``struct pci_ide *ide`` registered and setup IDE settings descriptor **Description** Clear the Selective IDE Stream Control Register, but leave all other registers untouched.h](j)}(h**Parameters**h]j3)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubj})}(hhh](j)}(h\``struct pci_dev *pdev`` PCIe device object for either a Root Port or Endpoint Partner Port h](j)}(h``struct pci_dev *pdev``h]j)}(hjh]hstruct pci_dev *pdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubj)}(hhh]j)}(hBPCIe device object for either a Root Port or Endpoint Partner Porth]hBPCIe device object for either a Root Port or Endpoint Partner Port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hE``struct pci_ide *ide`` registered and setup IDE settings descriptor h](j)}(h``struct pci_ide *ide``h]j)}(hj!h]hstruct pci_ide *ide}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubj)}(hhh]j)}(h,registered and setup IDE settings descriptorh]h,registered and setup IDE settings descriptor}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hMhjubeh}(h]h ]h"]h$]h&]uh1j|hjubj)}(h**Description**h]j3)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjZubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubj)}(hYClear the Selective IDE Stream Control Register, but leave all other registers untouched.h]hYClear the Selective IDE Stream Control Register, but leave all other registers untouched.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#pci_ide_set_nr_streams (C function)c.pci_ide_set_nr_streamshNtauh1jhjphhhNhNubj)}(hhh](j)}(h@void pci_ide_set_nr_streams (struct pci_host_bridge *hb, u16 nr)h]j)}(h?void pci_ide_set_nr_streams(struct pci_host_bridge *hb, u16 nr)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hpci_ide_set_nr_streamsh]j)}(hpci_ide_set_nr_streamsh]hpci_ide_set_nr_streams}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhMubjm )}(h$(struct pci_host_bridge *hb, u16 nr)h](js )}(hstruct pci_host_bridge *hbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hpci_host_bridgeh]hpci_host_bridge}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetjmodnameN classnameNj' j* )}j- ]j0 )}j# jsbc.pci_ide_set_nr_streamsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjE )}(hjH h]h*}(hj*hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hjubj)}(hhbh]hhb}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hjubjs )}(hu16 nrh](h)}(hhh]j)}(hu16h]hu16}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetjUmodnameN classnameNj' j* )}j- ]jc.pci_ide_set_nr_streamsasbuh1hhjLubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hnrh]hnr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hjubeh}(h]h ]h"]h$]h&]hhuh1jl hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]j)}(h-sets size of the pool of IDE Stream resourcesh]h-sets size of the pool of IDE Stream resources}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjj j!uh1jhhhjphNhNubj#)}(hX`**Parameters** ``struct pci_host_bridge *hb`` host bridge boundary for the stream pool ``u16 nr`` number of streams **Description** Platform PCI init and/or expert test module use only. Limit IDE Stream establishment by setting the number of stream resources available at the host bridge. Platform init code must set this before the first pci_ide_stream_alloc() call if the platform has less than the default of 256 streams per host-bridge. The "PCI_IDE" symbol namespace is required because this is typically a detail that is settled in early PCI init. I.e. this export is not for endpoint drivers.h](j)}(h**Parameters**h]j3)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubj})}(hhh](j)}(hH``struct pci_host_bridge *hb`` host bridge boundary for the stream pool h](j)}(h``struct pci_host_bridge *hb``h]j)}(hjh]hstruct pci_host_bridge *hb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubj)}(hhh]j)}(h(host bridge boundary for the stream poolh]h(host bridge boundary for the stream pool}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``u16 nr`` number of streams h](j)}(h ``u16 nr``h]j)}(hj# h]hu16 nr}(hj% hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj! ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhj ubj)}(hhh]j)}(hnumber of streamsh]hnumber of streams}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8 hMhj9 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj8 hMhjubeh}(h]h ]h"]h$]h&]uh1j|hjubj)}(h**Description**h]j3)}(hj^ h]h Description}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj\ ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubj)}(hX4Platform PCI init and/or expert test module use only. Limit IDE Stream establishment by setting the number of stream resources available at the host bridge. Platform init code must set this before the first pci_ide_stream_alloc() call if the platform has less than the default of 256 streams per host-bridge.h]hX4Platform PCI init and/or expert test module use only. Limit IDE Stream establishment by setting the number of stream resources available at the host bridge. Platform init code must set this before the first pci_ide_stream_alloc() call if the platform has less than the default of 256 streams per host-bridge.}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubj)}(hThe "PCI_IDE" symbol namespace is required because this is typically a detail that is settled in early PCI init. I.e. this export is not for endpoint drivers.h]hThe “PCI_IDE” symbol namespace is required because this is typically a detail that is settled in early PCI init. I.e. this export is not for endpoint drivers.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpci_tdi (C struct) c.pci_tdihNtauh1jhjphhhNhNubj)}(hhh](j)}(hpci_tdih]j)}(hstruct pci_tdih](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKubj)}(hpci_tdih]j)}(hj h]hpci_tdi}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hKhj hhubj)}(hhh]j)}(h+Core TEE I/O Device Interface (TDI) contexth]h+Core TEE I/O Device Interface (TDI) context}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKQhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKubeh}(h]h ](jstructeh"]h$]h&]jjjj !jj !jj j!uh1jhhhjphNhNubj#)}(hX? **Definition**:: struct pci_tdi { struct pci_dev *pdev; struct kvm *kvm; u32 tdi_id; }; **Members** ``pdev`` host side representation of guest-side TDI ``kvm`` TEE VM context of bound TDI ``tdi_id`` Identifier (virtual BDF) for the TDI as referenced by the TSM and DSMh](j))}(hu**Definition**:: struct pci_tdi { struct pci_dev *pdev; struct kvm *kvm; u32 tdi_id; }; h](j)}(h**Definition**::h](j3)}(h**Definition**h]h Definition}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj!ubh:}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKUhj!ubjN)}(hXstruct pci_tdi { struct pci_dev *pdev; struct kvm *kvm; u32 tdi_id; };h]hXstruct pci_tdi { struct pci_dev *pdev; struct kvm *kvm; u32 tdi_id; };}hj5!sbah}(h]h ]h"]h$]h&]hhuh1jMh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKWhj!ubeh}(h]h ]h"]h$]h&]uh1j(hj4!hKUhj!ubj)}(h **Members**h]j3)}(hjL!h]hMembers}(hjN!hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjJ!ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhK]hj!ubj})}(hhh](j)}(h4``pdev`` host side representation of guest-side TDI h](j)}(h``pdev``h]j)}(hjk!h]hpdev}(hjm!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji!ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKShje!ubj)}(hhh]j)}(h*host side representation of guest-side TDIh]h*host side representation of guest-side TDI}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!hKShj!ubah}(h]h ]h"]h$]h&]uh1jhje!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKShjb!ubj)}(h$``kvm`` TEE VM context of bound TDI h](j)}(h``kvm``h]j)}(hj!h]hkvm}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKThj!ubj)}(hhh]j)}(hTEE VM context of bound TDIh]hTEE VM context of bound TDI}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!hKThj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKThjb!ubj)}(hP``tdi_id`` Identifier (virtual BDF) for the TDI as referenced by the TSM and DSMh](j)}(h ``tdi_id``h]j)}(hj!h]htdi_id}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKThj!ubj)}(hhh]j)}(hEIdentifier (virtual BDF) for the TDI as referenced by the TSM and DSMh]hEIdentifier (virtual BDF) for the TDI as referenced by the TSM and DSM}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKUhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKThjb!ubeh}(h]h ]h"]h$]h&]uh1j|hj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpci_tsm (C struct) c.pci_tsmhNtauh1jhjphhhNhNubj)}(hhh](j)}(hpci_tsmh]j)}(hstruct pci_tsmh](j)}(hjh]hstruct}(hj7"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3"hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhK[ubj)}(h h]h }(hjE"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3"hhhjD"hK[ubj)}(hpci_tsmh]j)}(hj1"h]hpci_tsm}(hjW"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS"ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj3"hhhjD"hK[ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj/"hhhjD"hK[ubah}(h]j*"ah ](jjeh"]h$]h&]jj)jhuh1jhjD"hK[hj,"hhubj)}(hhh]j)}(h*Core TSM context for a given PCIe endpointh]h*Core TSM context for a given PCIe endpoint}(hjy"hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhK]hjv"hhubah}(h]h ]h"]h$]h&]uh1jhj,"hhhjD"hK[ubeh}(h]h ](jstructeh"]h$]h&]jjjj"jj"jj j!uh1jhhhjphNhNubj#)}(hX **Definition**:: struct pci_tsm { struct pci_dev *pdev; struct pci_dev *dsm_dev; struct tsm_dev *tsm_dev; struct pci_tdi *tdi; }; **Members** ``pdev`` Back ref to device function, distinguishes type of pci_tsm context ``dsm_dev`` PCI Device Security Manager for link operations on **pdev** ``tsm_dev`` PCI TEE Security Manager device for Link Confidentiality or Device Function Security operations ``tdi`` TDI context established by the **bind** link operation **Description** This structure is wrapped by low level TSM driver data and returned by probe()/lock(), it is freed by the corresponding remove()/unlock(). For link operations it serves to cache the association between a Device Security Manager (DSM) and the functions that manager can assign to a TVM. That can be "self", for assigning function0 of a TEE I/O device, a sub-function (SR-IOV virtual function, or non-function0 multifunction-device), or a downstream endpoint (PCIe upstream switch-port as DSM).h](j))}(h**Definition**:: struct pci_tsm { struct pci_dev *pdev; struct pci_dev *dsm_dev; struct tsm_dev *tsm_dev; struct pci_tdi *tdi; }; h](j)}(h**Definition**::h](j3)}(h**Definition**h]h Definition}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj"ubh:}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKahj"ubjN)}(hstruct pci_tsm { struct pci_dev *pdev; struct pci_dev *dsm_dev; struct tsm_dev *tsm_dev; struct pci_tdi *tdi; };h]hstruct pci_tsm { struct pci_dev *pdev; struct pci_dev *dsm_dev; struct tsm_dev *tsm_dev; struct pci_tdi *tdi; };}hj"sbah}(h]h ]h"]h$]h&]hhuh1jMh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKchj"ubeh}(h]h ]h"]h$]h&]uh1j(hj"hKahj"ubj)}(h **Members**h]j3)}(hj"h]hMembers}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj"ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKjhj"ubj})}(hhh](j)}(hL``pdev`` Back ref to device function, distinguishes type of pci_tsm context h](j)}(h``pdev``h]j)}(hj"h]hpdev}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhK_hj"ubj)}(hhh]j)}(hBBack ref to device function, distinguishes type of pci_tsm contexth]hBBack ref to device function, distinguishes type of pci_tsm context}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#hK_hj#ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj#hK_hj"ubj)}(hH``dsm_dev`` PCI Device Security Manager for link operations on **pdev** h](j)}(h ``dsm_dev``h]j)}(hj)#h]hdsm_dev}(hj+#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'#ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhK`hj##ubj)}(hhh]j)}(h;PCI Device Security Manager for link operations on **pdev**h](h3PCI Device Security Manager for link operations on }(hjB#hhhNhNubj3)}(h**pdev**h]hpdev}(hjJ#hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjB#ubeh}(h]h ]h"]h$]h&]uh1jhj>#hK`hj?#ubah}(h]h ]h"]h$]h&]uh1jhj##ubeh}(h]h ]h"]h$]h&]uh1jhj>#hK`hj"ubj)}(hl``tsm_dev`` PCI TEE Security Manager device for Link Confidentiality or Device Function Security operations h](j)}(h ``tsm_dev``h]j)}(hjp#h]htsm_dev}(hjr#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn#ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKbhjj#ubj)}(hhh]j)}(h_PCI TEE Security Manager device for Link Confidentiality or Device Function Security operationsh]h_PCI TEE Security Manager device for Link Confidentiality or Device Function Security operations}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKahj#ubah}(h]h ]h"]h$]h&]uh1jhjj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKbhj"ubj)}(h@``tdi`` TDI context established by the **bind** link operation h](j)}(h``tdi``h]j)}(hj#h]htdi}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKdhj#ubj)}(hhh]j)}(h6TDI context established by the **bind** link operationh](hTDI context established by the }(hj#hhhNhNubj3)}(h**bind**h]hbind}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj#ubh link operation}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKchj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKdhj"ubeh}(h]h ]h"]h$]h&]uh1j|hj"ubj)}(h**Description**h]j3)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj#ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKfhj"ubj)}(hThis structure is wrapped by low level TSM driver data and returned by probe()/lock(), it is freed by the corresponding remove()/unlock().h]hThis structure is wrapped by low level TSM driver data and returned by probe()/lock(), it is freed by the corresponding remove()/unlock().}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKchj"ubj)}(hXaFor link operations it serves to cache the association between a Device Security Manager (DSM) and the functions that manager can assign to a TVM. That can be "self", for assigning function0 of a TEE I/O device, a sub-function (SR-IOV virtual function, or non-function0 multifunction-device), or a downstream endpoint (PCIe upstream switch-port as DSM).h]hXeFor link operations it serves to cache the association between a Device Security Manager (DSM) and the functions that manager can assign to a TVM. That can be “self”, for assigning function0 of a TEE I/O device, a sub-function (SR-IOV virtual function, or non-function0 multifunction-device), or a downstream endpoint (PCIe upstream switch-port as DSM).}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKfhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpci_tsm_pf0 (C struct) c.pci_tsm_pf0hNtauh1jhjphhhNhNubj)}(hhh](j)}(h pci_tsm_pf0h]j)}(hstruct pci_tsm_pf0h](j)}(hjh]hstruct}(hjL$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH$hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKpubj)}(h h]h }(hjZ$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH$hhhjY$hKpubj)}(h pci_tsm_pf0h]j)}(hjF$h]h pci_tsm_pf0}(hjl$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh$ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjH$hhhjY$hKpubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjD$hhhjY$hKpubah}(h]j?$ah ](jjeh"]h$]h&]jj)jhuh1jhjY$hKphjA$hhubj)}(hhh]j)}(h&Physical Function 0 TDISP link contexth]h&Physical Function 0 TDISP link context}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKvhj$hhubah}(h]h ]h"]h$]h&]uh1jhjA$hhhjY$hKpubeh}(h]h ](jstructeh"]h$]h&]jjjj$jj$jj j!uh1jhhhjphNhNubj#)}(hX9 **Definition**:: struct pci_tsm_pf0 { struct pci_tsm base_tsm; struct mutex lock; struct pci_doe_mb *doe_mb; }; **Members** ``base_tsm`` generic core "tsm" context ``lock`` mutual exclustion for pci_tsm_ops invocation ``doe_mb`` PCIe Data Object Exchange mailboxh](j))}(h**Definition**:: struct pci_tsm_pf0 { struct pci_tsm base_tsm; struct mutex lock; struct pci_doe_mb *doe_mb; }; h](j)}(h**Definition**::h](j3)}(h**Definition**h]h Definition}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj$ubh:}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKzhj$ubjN)}(hpstruct pci_tsm_pf0 { struct pci_tsm base_tsm; struct mutex lock; struct pci_doe_mb *doe_mb; };h]hpstruct pci_tsm_pf0 { struct pci_tsm base_tsm; struct mutex lock; struct pci_doe_mb *doe_mb; };}hj$sbah}(h]h ]h"]h$]h&]hhuh1jMh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhK|hj$ubeh}(h]h ]h"]h$]h&]uh1j(hj$hKzhj$ubj)}(h **Members**h]j3)}(hj$h]hMembers}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj$ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj$ubj})}(hhh](j)}(h(``base_tsm`` generic core "tsm" context h](j)}(h ``base_tsm``h]j)}(hj%h]hbase_tsm}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKxhj$ubj)}(hhh]j)}(hgeneric core "tsm" contexth]hgeneric core “tsm” context}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%hKxhj%ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj%hKxhj$ubj)}(h6``lock`` mutual exclustion for pci_tsm_ops invocation h](j)}(h``lock``h]j)}(hj>%h]hlock}(hj@%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<%ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKyhj8%ubj)}(hhh]j)}(h,mutual exclustion for pci_tsm_ops invocationh]h,mutual exclustion for pci_tsm_ops invocation}(hjW%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS%hKyhjT%ubah}(h]h ]h"]h$]h&]uh1jhj8%ubeh}(h]h ]h"]h$]h&]uh1jhjS%hKyhj$ubj)}(h,``doe_mb`` PCIe Data Object Exchange mailboxh](j)}(h ``doe_mb``h]j)}(hjw%h]hdoe_mb}(hjy%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju%ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKyhjq%ubj)}(hhh]j)}(h!PCIe Data Object Exchange mailboxh]h!PCIe Data Object Exchange mailbox}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKzhj%ubah}(h]h ]h"]h$]h&]uh1jhjq%ubeh}(h]h ]h"]h$]h&]uh1jhj%hKyhj$ubeh}(h]h ]h"]h$]h&]uh1j|hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpci_tsm_req_scope (C enum)c.pci_tsm_req_scopehNtauh1jhjphhhNhNubj)}(hhh](j)}(hpci_tsm_req_scopeh]j)}(henum pci_tsm_req_scopeh](j)}(henumh]henum}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%hhhj%hKubj)}(hpci_tsm_req_scopeh]j)}(hj%h]hpci_tsm_req_scope}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj%hhhj%hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj%hhhj%hKubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1jhj%hKhj%hhubj)}(hhh]j)}(h.Scope of guest requests to be validated by TSMh]h.Scope of guest requests to be validated by TSM}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj&hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj%hKubeh}(h]h ](jenumeh"]h$]h&]jjjj,&jj,&jj j!uh1jhhhjphNhNubj#)}(hX **Constants** ``PCI_TSM_REQ_INFO`` Read-only, without side effects, request for typical TDISP collateral information like Device Interface Reports. No device secrets are permitted, and no device state is changed. ``PCI_TSM_REQ_STATE_CHANGE`` Request to change the TDISP state from UNLOCKED->LOCKED, LOCKED->RUN, or other architecture specific state changes to support those transitions for a TDI. No other (unrelated to TDISP) device / host state, configuration, or data change is permitted. ``PCI_TSM_REQ_DEBUG_READ`` Read-only request for debug information A method to facilitate TVM information retrieval outside of typical TDISP operational requirements. No device secrets are permitted. ``PCI_TSM_REQ_DEBUG_WRITE`` Device state changes for debug purposes The request may affect the operational state of the device outside of the TDISP operational model. If allowed, requires CAP_SYS_RAW_IO, and will taint the kernel. **Description** Guest requests are a transport for a TVM to communicate with a TSM + DSM for a given TDI. A TSM driver is responsible for maintaining the kernel security model and limit commands that may affect the host, or are otherwise outside the typical TDISP operational model.h](j))}(hX**Constants** ``PCI_TSM_REQ_INFO`` Read-only, without side effects, request for typical TDISP collateral information like Device Interface Reports. No device secrets are permitted, and no device state is changed. ``PCI_TSM_REQ_STATE_CHANGE`` Request to change the TDISP state from UNLOCKED->LOCKED, LOCKED->RUN, or other architecture specific state changes to support those transitions for a TDI. No other (unrelated to TDISP) device / host state, configuration, or data change is permitted. ``PCI_TSM_REQ_DEBUG_READ`` Read-only request for debug information A method to facilitate TVM information retrieval outside of typical TDISP operational requirements. No device secrets are permitted. ``PCI_TSM_REQ_DEBUG_WRITE`` Device state changes for debug purposes The request may affect the operational state of the device outside of the TDISP operational model. If allowed, requires CAP_SYS_RAW_IO, and will taint the kernel. h](j)}(h **Constants**h]j3)}(hj:&h]h Constants}(hj<&hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj8&ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj4&ubj})}(hhh](j)}(h``PCI_TSM_REQ_INFO`` Read-only, without side effects, request for typical TDISP collateral information like Device Interface Reports. No device secrets are permitted, and no device state is changed. h](j)}(h``PCI_TSM_REQ_INFO``h]j)}(hjY&h]hPCI_TSM_REQ_INFO}(hj[&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW&ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhjS&ubj)}(hhh]j)}(hRead-only, without side effects, request for typical TDISP collateral information like Device Interface Reports. No device secrets are permitted, and no device state is changed.h]hRead-only, without side effects, request for typical TDISP collateral information like Device Interface Reports. No device secrets are permitted, and no device state is changed.}(hjr&hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhjo&ubah}(h]h ]h"]h$]h&]uh1jhjS&ubeh}(h]h ]h"]h$]h&]uh1jhjn&hKhjP&ubj)}(hX``PCI_TSM_REQ_STATE_CHANGE`` Request to change the TDISP state from UNLOCKED->LOCKED, LOCKED->RUN, or other architecture specific state changes to support those transitions for a TDI. No other (unrelated to TDISP) device / host state, configuration, or data change is permitted. h](j)}(h``PCI_TSM_REQ_STATE_CHANGE``h]j)}(hj&h]hPCI_TSM_REQ_STATE_CHANGE}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj&ubj)}(hhh]j)}(hRequest to change the TDISP state from UNLOCKED->LOCKED, LOCKED->RUN, or other architecture specific state changes to support those transitions for a TDI. No other (unrelated to TDISP) device / host state, configuration, or data change is permitted.h]hRequest to change the TDISP state from UNLOCKED->LOCKED, LOCKED->RUN, or other architecture specific state changes to support those transitions for a TDI. No other (unrelated to TDISP) device / host state, configuration, or data change is permitted.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhjP&ubj)}(h``PCI_TSM_REQ_DEBUG_READ`` Read-only request for debug information A method to facilitate TVM information retrieval outside of typical TDISP operational requirements. No device secrets are permitted. h](j)}(h``PCI_TSM_REQ_DEBUG_READ``h]j)}(hj&h]hPCI_TSM_REQ_DEBUG_READ}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj&ubj)}(hhh](j)}(h'Read-only request for debug informationh]h'Read-only request for debug information}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj&ubj)}(hA method to facilitate TVM information retrieval outside of typical TDISP operational requirements. No device secrets are permitted.h]hA method to facilitate TVM information retrieval outside of typical TDISP operational requirements. No device secrets are permitted.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhjP&ubj)}(h``PCI_TSM_REQ_DEBUG_WRITE`` Device state changes for debug purposes The request may affect the operational state of the device outside of the TDISP operational model. If allowed, requires CAP_SYS_RAW_IO, and will taint the kernel. h](j)}(h``PCI_TSM_REQ_DEBUG_WRITE``h]j)}(hj'h]hPCI_TSM_REQ_DEBUG_WRITE}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj'ubj)}(hhh](j)}(h'Device state changes for debug purposesh]h'Device state changes for debug purposes}(hj/'hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj,'ubj)}(hThe request may affect the operational state of the device outside of the TDISP operational model. If allowed, requires CAP_SYS_RAW_IO, and will taint the kernel.h]hThe request may affect the operational state of the device outside of the TDISP operational model. If allowed, requires CAP_SYS_RAW_IO, and will taint the kernel.}(hj>'hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj,'ubeh}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj+'hKhjP&ubeh}(h]h ]h"]h$]h&]uh1j|hj4&ubeh}(h]h ]h"]h$]h&]uh1j(hjO&hKhj0&ubj)}(h**Description**h]j3)}(hjg'h]h Description}(hji'hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hje'ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj0&ubj)}(hX Guest requests are a transport for a TVM to communicate with a TSM + DSM for a given TDI. A TSM driver is responsible for maintaining the kernel security model and limit commands that may affect the host, or are otherwise outside the typical TDISP operational model.h]hX Guest requests are a transport for a TVM to communicate with a TSM + DSM for a given TDI. A TSM driver is responsible for maintaining the kernel security model and limit commands that may affect the host, or are otherwise outside the typical TDISP operational model.}(hj}'hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj0&ubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpci_tsm_bind (C function)c.pci_tsm_bindhNtauh1jhjphhhNhNubj)}(hhh](j)}(hDint pci_tsm_bind (struct pci_dev *pdev, struct kvm *kvm, u32 tdi_id)h]j)}(hCint pci_tsm_bind(struct pci_dev *pdev, struct kvm *kvm, u32 tdi_id)h](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj'hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMKubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj'hMKubj)}(h pci_tsm_bindh]j)}(h pci_tsm_bindh]h pci_tsm_bind}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj'hhhj'hMKubjm )}(h3(struct pci_dev *pdev, struct kvm *kvm, u32 tdi_id)h](js )}(hstruct pci_dev *pdevh](j)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]j)}(hpci_devh]hpci_dev}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj (modnameN classnameNj' j* )}j- ]j0 )}j# j'sbc.pci_tsm_bindasbuh1hhj'ubj)}(h h]h }(hj'(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjE )}(hjH h]h*}(hj5(hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hj'ubj)}(hpdevh]hpdev}(hjB(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj'ubjs )}(hstruct kvm *kvmh](j)}(hjh]hstruct}(hj[(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW(ubj)}(h h]h }(hjh(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW(ubh)}(hhh]j)}(hkvmh]hkvm}(hjy(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv(ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj{(modnameN classnameNj' j* )}j- ]j#(c.pci_tsm_bindasbuh1hhjW(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW(ubjE )}(hjH h]h*}(hj(hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hjW(ubj)}(hkvmh]hkvm}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj'ubjs )}(h u32 tdi_idh](h)}(hhh]j)}(hu32h]hu32}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj(modnameN classnameNj' j* )}j- ]j#(c.pci_tsm_bindasbuh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(htdi_idh]htdi_id}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj'ubeh}(h]h ]h"]h$]h&]hhuh1jl hj'hhhj'hMKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj'hhhj'hMKubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1jhj'hMKhj'hhubj)}(hhh]j)}(h"Bind **pdev** as a TDI for **kvm**h](hBind }(hj$)hhhNhNubj3)}(h**pdev**h]hpdev}(hj,)hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj$)ubh as a TDI for }(hj$)hhhNhNubj3)}(h**kvm**h]hkvm}(hj>)hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj$)ubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMKhj!)hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj'hMKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj\)jj\)jj j!uh1jhhhjphNhNubj#)}(hX**Parameters** ``struct pci_dev *pdev`` PCI device function to bind ``struct kvm *kvm`` Private memory attach context ``u32 tdi_id`` Identifier (virtual BDF) for the TDI as referenced by the TSM and DSM **Description** Returns 0 on success, or a negative error code on failure. **Context** Caller is responsible for constraining the bind lifetime to the registered state of the device. For example, pci_tsm_bind() / pci_tsm_unbind() limited to the VFIO driver bound state of the device.h](j)}(h**Parameters**h]j3)}(hjf)h]h Parameters}(hjh)hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjd)ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMOhj`)ubj})}(hhh](j)}(h5``struct pci_dev *pdev`` PCI device function to bind h](j)}(h``struct pci_dev *pdev``h]j)}(hj)h]hstruct pci_dev *pdev}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMLhj)ubj)}(hhh]j)}(hPCI device function to bindh]hPCI device function to bind}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)hMLhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMLhj|)ubj)}(h2``struct kvm *kvm`` Private memory attach context h](j)}(h``struct kvm *kvm``h]j)}(hj)h]hstruct kvm *kvm}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMMhj)ubj)}(hhh]j)}(hPrivate memory attach contexth]hPrivate memory attach context}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)hMMhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hMMhj|)ubj)}(hU``u32 tdi_id`` Identifier (virtual BDF) for the TDI as referenced by the TSM and DSM h](j)}(h``u32 tdi_id``h]j)}(hj)h]h u32 tdi_id}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMNhj)ubj)}(hhh]j)}(hEIdentifier (virtual BDF) for the TDI as referenced by the TSM and DSMh]hEIdentifier (virtual BDF) for the TDI as referenced by the TSM and DSM}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj *hMNhj *ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj *hMNhj|)ubeh}(h]h ]h"]h$]h&]uh1j|hj`)ubj)}(h**Description**h]j3)}(hj2*h]h Description}(hj4*hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj0*ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMPhj`)ubj)}(h:Returns 0 on success, or a negative error code on failure.h]h:Returns 0 on success, or a negative error code on failure.}(hjH*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMOhj`)ubj)}(h **Context**h]j3)}(hjY*h]hContext}(hj[*hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjW*ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMQhj`)ubj)}(hCaller is responsible for constraining the bind lifetime to the registered state of the device. For example, pci_tsm_bind() / pci_tsm_unbind() limited to the VFIO driver bound state of the device.h]hCaller is responsible for constraining the bind lifetime to the registered state of the device. For example, pci_tsm_bind() / pci_tsm_unbind() limited to the VFIO driver bound state of the device.}(hjo*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMRhj`)ubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jpci_tsm_guest_req (C function)c.pci_tsm_guest_reqhNtauh1jhjphhhNhNubj)}(hhh](j)}(hssize_t pci_tsm_guest_req (struct pci_dev *pdev, enum pci_tsm_req_scope scope, sockptr_t req_in, size_t in_len, sockptr_t req_out, size_t out_len, u64 *tsm_code)h]j)}(hssize_t pci_tsm_guest_req(struct pci_dev *pdev, enum pci_tsm_req_scope scope, sockptr_t req_in, size_t in_len, sockptr_t req_out, size_t out_len, u64 *tsm_code)h](h)}(hhh]j)}(hssize_th]hssize_t}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj*modnameN classnameNj' j* )}j- ]j0 )}j# pci_tsm_guest_reqsbc.pci_tsm_guest_reqasbuh1hhj*hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chM{ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj*hM{ubj)}(hpci_tsm_guest_reqh]j)}(hj*h]hpci_tsm_guest_req}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj*hhhj*hM{ubjm )}(h(struct pci_dev *pdev, enum pci_tsm_req_scope scope, sockptr_t req_in, size_t in_len, sockptr_t req_out, size_t out_len, u64 *tsm_code)h](js )}(hstruct pci_dev *pdevh](j)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubh)}(hhh]j)}(hpci_devh]hpci_dev}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj +ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj+modnameN classnameNj' j* )}j- ]j*c.pci_tsm_guest_reqasbuh1hhj*ubj)}(h h]h }(hj,+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjE )}(hjH h]h*}(hj:+hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hj*ubj)}(hpdevh]hpdev}(hjG+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj*ubjs )}(henum pci_tsm_req_scope scopeh](j)}(hj%h]henum}(hj`+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\+ubj)}(h h]h }(hjm+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\+ubh)}(hhh]j)}(hpci_tsm_req_scopeh]hpci_tsm_req_scope}(hj~+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{+ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj+modnameN classnameNj' j* )}j- ]j*c.pci_tsm_guest_reqasbuh1hhj\+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\+ubj)}(hscopeh]hscope}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj*ubjs )}(hsockptr_t req_inh](h)}(hhh]j)}(h sockptr_th]h sockptr_t}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj+modnameN classnameNj' j* )}j- ]j*c.pci_tsm_guest_reqasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hreq_inh]hreq_in}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj*ubjs )}(h size_t in_lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ,ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj,modnameN classnameNj' j* )}j- ]j*c.pci_tsm_guest_reqasbuh1hhj,ubj)}(h h]h }(hj,,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hin_lenh]hin_len}(hj:,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj*ubjs )}(hsockptr_t req_outh](h)}(hhh]j)}(h sockptr_th]h sockptr_t}(hjV,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS,ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetjX,modnameN classnameNj' j* )}j- ]j*c.pci_tsm_guest_reqasbuh1hhjO,ubj)}(h h]h }(hjt,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO,ubj)}(hreq_outh]hreq_out}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj*ubjs )}(hsize_t out_lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj,modnameN classnameNj' j* )}j- ]j*c.pci_tsm_guest_reqasbuh1hhj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hout_lenh]hout_len}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj*ubjs )}(h u64 *tsm_codeh](h)}(hhh]j)}(hu64h]hu64}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj,modnameN classnameNj' j* )}j- ]j*c.pci_tsm_guest_reqasbuh1hhj,ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjE )}(hjH h]h*}(hj-hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hj,ubj)}(htsm_codeh]htsm_code}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj*ubeh}(h]h ]h"]h$]h&]hhuh1jl hj*hhhj*hM{ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj*hhhj*hM{ubah}(h]j*ah ](jjeh"]h$]h&]jj)jhuh1jhj*hM{hj*hhubj)}(hhh]j)}(h2helper to marshal guest requests to the TSM driverh]h2helper to marshal guest requests to the TSM driver}(hjI-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chM{hjF-hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhj*hM{ubeh}(h]h ](jfunctioneh"]h$]h&]jjjja-jja-jj j!uh1jhhhjphNhNubj#)}(hXS**Parameters** ``struct pci_dev *pdev`` **pdev** representing a bound tdi ``enum pci_tsm_req_scope scope`` caller asserts this passthrough request is limited to TDISP operations ``sockptr_t req_in`` Input payload forwarded from the guest ``size_t in_len`` Length of **req_in** ``sockptr_t req_out`` Output payload buffer response to the guest ``size_t out_len`` Length of **req_out** on input, bytes filled in **req_out** on output ``u64 *tsm_code`` Optional TSM arch specific result code for the guest TSM **Description** This is a common entry point for requests triggered by userspace KVM-exit service handlers responding to TDI information or state change requests. The scope parameter limits requests to TDISP state management, or limited debug. This path is only suitable for commands and results that are the host kernel has no use, the host is only facilitating guest to TSM communication. Returns 0 on success and -error on failure and positive "residue" on success but **req_out** is filled with less then **out_len**, or **req_out** is NULL and a residue number of bytes were not consumed from **req_in**. On success or failure **tsm_code** may be populated with a TSM implementation specific result code for the guest to consume. **Context** Caller is responsible for calling this within the pci_tsm_bind() state of the TDI.h](j)}(h**Parameters**h]j3)}(hjk-h]h Parameters}(hjm-hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hji-ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhje-ubj})}(hhh](j)}(h;``struct pci_dev *pdev`` **pdev** representing a bound tdi h](j)}(h``struct pci_dev *pdev``h]j)}(hj-h]hstruct pci_dev *pdev}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chM|hj-ubj)}(hhh]j)}(h!**pdev** representing a bound tdih](j3)}(h**pdev**h]hpdev}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj-ubh representing a bound tdi}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhj-hM|hj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hM|hj-ubj)}(hh``enum pci_tsm_req_scope scope`` caller asserts this passthrough request is limited to TDISP operations h](j)}(h ``enum pci_tsm_req_scope scope``h]j)}(hj-h]henum pci_tsm_req_scope scope}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chM}hj-ubj)}(hhh]j)}(hFcaller asserts this passthrough request is limited to TDISP operationsh]hFcaller asserts this passthrough request is limited to TDISP operations}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-hM}hj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hM}hj-ubj)}(h<``sockptr_t req_in`` Input payload forwarded from the guest h](j)}(h``sockptr_t req_in``h]j)}(hj .h]hsockptr_t req_in}(hj .hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chM~hj.ubj)}(hhh]j)}(h&Input payload forwarded from the guesth]h&Input payload forwarded from the guest}(hj#.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.hM~hj .ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hM~hj-ubj)}(h'``size_t in_len`` Length of **req_in** h](j)}(h``size_t in_len``h]j)}(hjC.h]h size_t in_len}(hjE.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA.ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj=.ubj)}(hhh]j)}(hLength of **req_in**h](h Length of }(hj\.hhhNhNubj3)}(h **req_in**h]hreq_in}(hjd.hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj\.ubeh}(h]h ]h"]h$]h&]uh1jhjX.hMhjY.ubah}(h]h ]h"]h$]h&]uh1jhj=.ubeh}(h]h ]h"]h$]h&]uh1jhjX.hMhj-ubj)}(hB``sockptr_t req_out`` Output payload buffer response to the guest h](j)}(h``sockptr_t req_out``h]j)}(hj.h]hsockptr_t req_out}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj.ubj)}(hhh]j)}(h+Output payload buffer response to the guesth]h+Output payload buffer response to the guest}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj-ubj)}(hY``size_t out_len`` Length of **req_out** on input, bytes filled in **req_out** on output h](j)}(h``size_t out_len``h]j)}(hj.h]hsize_t out_len}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj.ubj)}(hhh]j)}(hELength of **req_out** on input, bytes filled in **req_out** on outputh](h Length of }(hj.hhhNhNubj3)}(h **req_out**h]hreq_out}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj.ubh on input, bytes filled in }(hj.hhhNhNubj3)}(h **req_out**h]hreq_out}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj.ubh on output}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj-ubj)}(hK``u64 *tsm_code`` Optional TSM arch specific result code for the guest TSM h](j)}(h``u64 *tsm_code``h]j)}(hj /h]h u64 *tsm_code}(hj"/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj/ubj)}(hhh]j)}(h8Optional TSM arch specific result code for the guest TSMh]h8Optional TSM arch specific result code for the guest TSM}(hj9/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5/hMhj6/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj5/hMhj-ubeh}(h]h ]h"]h$]h&]uh1j|hje-ubj)}(h**Description**h]j3)}(hj[/h]h Description}(hj]/hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hjY/ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhje-ubj)}(hXvThis is a common entry point for requests triggered by userspace KVM-exit service handlers responding to TDI information or state change requests. The scope parameter limits requests to TDISP state management, or limited debug. This path is only suitable for commands and results that are the host kernel has no use, the host is only facilitating guest to TSM communication.h]hXvThis is a common entry point for requests triggered by userspace KVM-exit service handlers responding to TDI information or state change requests. The scope parameter limits requests to TDISP state management, or limited debug. This path is only suitable for commands and results that are the host kernel has no use, the host is only facilitating guest to TSM communication.}(hjq/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhje-ubj)}(hXXReturns 0 on success and -error on failure and positive "residue" on success but **req_out** is filled with less then **out_len**, or **req_out** is NULL and a residue number of bytes were not consumed from **req_in**. On success or failure **tsm_code** may be populated with a TSM implementation specific result code for the guest to consume.h](hUReturns 0 on success and -error on failure and positive “residue” on success but }(hj/hhhNhNubj3)}(h **req_out**h]hreq_out}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj/ubh is filled with less then }(hj/hhhNhNubj3)}(h **out_len**h]hout_len}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj/ubh, or }(hj/hhhNhNubj3)}(h **req_out**h]hreq_out}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj/ubh> is NULL and a residue number of bytes were not consumed from }(hj/hhhNhNubj3)}(h **req_in**h]hreq_in}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj/ubh. On success or failure }(hj/hhhNhNubj3)}(h **tsm_code**h]htsm_code}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj/ubhZ may be populated with a TSM implementation specific result code for the guest to consume.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhje-ubj)}(h **Context**h]j3)}(hj/h]hContext}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj/ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhje-ubj)}(hRCaller is responsible for calling this within the pci_tsm_bind() state of the TDI.h]hRCaller is responsible for calling this within the pci_tsm_bind() state of the TDI.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhje-ubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$pci_tsm_tdi_constructor (C function)c.pci_tsm_tdi_constructorhNtauh1jhjphhhNhNubj)}(hhh](j)}(hevoid pci_tsm_tdi_constructor (struct pci_dev *pdev, struct pci_tdi *tdi, struct kvm *kvm, u32 tdi_id)h]j)}(hdvoid pci_tsm_tdi_constructor(struct pci_dev *pdev, struct pci_tdi *tdi, struct kvm *kvm, u32 tdi_id)h](j)}(hvoidh]hvoid}(hj00hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj,0hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMubj)}(h h]h }(hj?0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,0hhhj>0hMubj)}(hpci_tsm_tdi_constructorh]j)}(hpci_tsm_tdi_constructorh]hpci_tsm_tdi_constructor}(hjQ0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM0ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj,0hhhj>0hMubjm )}(hH(struct pci_dev *pdev, struct pci_tdi *tdi, struct kvm *kvm, u32 tdi_id)h](js )}(hstruct pci_dev *pdevh](j)}(hjh]hstruct}(hjm0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji0ubj)}(h h]h }(hjz0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji0ubh)}(hhh]j)}(hpci_devh]hpci_dev}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj0modnameN classnameNj' j* )}j- ]j0 )}j# jS0sbc.pci_tsm_tdi_constructorasbuh1hhji0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji0ubjE )}(hjH h]h*}(hj0hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hji0ubj)}(hpdevh]hpdev}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hje0ubjs )}(hstruct pci_tdi *tdih](j)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(hpci_tdih]hpci_tdi}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj0modnameN classnameNj' j* )}j- ]j0c.pci_tsm_tdi_constructorasbuh1hhj0ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjE )}(hjH h]h*}(hj)1hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hj0ubj)}(htdih]htdi}(hj61hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hje0ubjs )}(hstruct kvm *kvmh](j)}(hjh]hstruct}(hjO1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK1ubj)}(h h]h }(hj\1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK1ubh)}(hhh]j)}(hkvmh]hkvm}(hjm1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetjo1modnameN classnameNj' j* )}j- ]j0c.pci_tsm_tdi_constructorasbuh1hhjK1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK1ubjE )}(hjH h]h*}(hj1hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hjK1ubj)}(hkvmh]hkvm}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK1ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hje0ubjs )}(h u32 tdi_idh](h)}(hhh]j)}(hu32h]hu32}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj1modnameN classnameNj' j* )}j- ]j0c.pci_tsm_tdi_constructorasbuh1hhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(htdi_idh]htdi_id}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hje0ubeh}(h]h ]h"]h$]h&]hhuh1jl hj,0hhhj>0hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj(0hhhj>0hMubah}(h]j#0ah ](jjeh"]h$]h&]jj)jhuh1jhj>0hMhj%0hhubj)}(hhh]j)}(h2base 'struct pci_tdi' initialization for link TSMsh]h6base ‘struct pci_tdi’ initialization for link TSMs}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj2hhubah}(h]h ]h"]h$]h&]uh1jhj%0hhhj>0hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj02jj02jj j!uh1jhhhjphNhNubj#)}(hX**Parameters** ``struct pci_dev *pdev`` PCI device function representing the TDI ``struct pci_tdi *tdi`` context to initialize ``struct kvm *kvm`` Private memory attach context ``u32 tdi_id`` Identifier (virtual BDF) for the TDI as referenced by the TSM and DSMh](j)}(h**Parameters**h]j3)}(hj:2h]h Parameters}(hj<2hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj82ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj42ubj})}(hhh](j)}(hB``struct pci_dev *pdev`` PCI device function representing the TDI h](j)}(h``struct pci_dev *pdev``h]j)}(hjY2h]hstruct pci_dev *pdev}(hj[2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW2ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhjS2ubj)}(hhh]j)}(h(PCI device function representing the TDIh]h(PCI device function representing the TDI}(hjr2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn2hMhjo2ubah}(h]h ]h"]h$]h&]uh1jhjS2ubeh}(h]h ]h"]h$]h&]uh1jhjn2hMhjP2ubj)}(h.``struct pci_tdi *tdi`` context to initialize h](j)}(h``struct pci_tdi *tdi``h]j)}(hj2h]hstruct pci_tdi *tdi}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj2ubj)}(hhh]j)}(hcontext to initializeh]hcontext to initialize}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjP2ubj)}(h2``struct kvm *kvm`` Private memory attach context h](j)}(h``struct kvm *kvm``h]j)}(hj2h]hstruct kvm *kvm}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj2ubj)}(hhh]j)}(hPrivate memory attach contexth]hPrivate memory attach context}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjP2ubj)}(hT``u32 tdi_id`` Identifier (virtual BDF) for the TDI as referenced by the TSM and DSMh](j)}(h``u32 tdi_id``h]j)}(hj3h]h u32 tdi_id}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj2ubj)}(hhh]j)}(hEIdentifier (virtual BDF) for the TDI as referenced by the TSM and DSMh]hEIdentifier (virtual BDF) for the TDI as referenced by the TSM and DSM}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj3ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj3hMhjP2ubeh}(h]h ]h"]h$]h&]uh1j|hj42ubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%pci_tsm_link_constructor (C function)c.pci_tsm_link_constructorhNtauh1jhjphhhNhNubj)}(hhh](j)}(haint pci_tsm_link_constructor (struct pci_dev *pdev, struct pci_tsm *tsm, struct tsm_dev *tsm_dev)h]j)}(h`int pci_tsm_link_constructor(struct pci_dev *pdev, struct pci_tsm *tsm, struct tsm_dev *tsm_dev)h](j)}(hinth]hint}(hj^3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjZ3hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMubj)}(h h]h }(hjm3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ3hhhjl3hMubj)}(hpci_tsm_link_constructorh]j)}(hpci_tsm_link_constructorh]hpci_tsm_link_constructor}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{3ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjZ3hhhjl3hMubjm )}(hD(struct pci_dev *pdev, struct pci_tsm *tsm, struct tsm_dev *tsm_dev)h](js )}(hstruct pci_dev *pdevh](j)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(hpci_devh]hpci_dev}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj3modnameN classnameNj' j* )}j- ]j0 )}j# j3sbc.pci_tsm_link_constructorasbuh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubjE )}(hjH h]h*}(hj3hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hj3ubj)}(hpdevh]hpdev}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj3ubjs )}(hstruct pci_tsm *tsmh](j)}(hjh]hstruct}(hj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 4ubh)}(hhh]j)}(hpci_tsmh]hpci_tsm}(hj+4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(4ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj-4modnameN classnameNj' j* )}j- ]j3c.pci_tsm_link_constructorasbuh1hhj 4ubj)}(h h]h }(hjI4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 4ubjE )}(hjH h]h*}(hjW4hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hj 4ubj)}(htsmh]htsm}(hjd4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 4ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj3ubjs )}(hstruct tsm_dev *tsm_devh](j)}(hjh]hstruct}(hj}4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy4ubh)}(hhh]j)}(htsm_devh]htsm_dev}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj4modnameN classnameNj' j* )}j- ]j3c.pci_tsm_link_constructorasbuh1hhjy4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy4ubjE )}(hjH h]h*}(hj4hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hjy4ubj)}(htsm_devh]htsm_dev}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjy4ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj3ubeh}(h]h ]h"]h$]h&]hhuh1jl hjZ3hhhjl3hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjV3hhhjl3hMubah}(h]jQ3ah ](jjeh"]h$]h&]jj)jhuh1jhjl3hMhjS3hhubj)}(hhh]j)}(h2base 'struct pci_tsm' initialization for link TSMsh]h6base ‘struct pci_tsm’ initialization for link TSMs}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj4hhubah}(h]h ]h"]h$]h&]uh1jhjS3hhhjl3hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj5jj5jj j!uh1jhhhjphNhNubj#)}(h**Parameters** ``struct pci_dev *pdev`` The PCI device ``struct pci_tsm *tsm`` context to initialize ``struct tsm_dev *tsm_dev`` Platform TEE Security Manager, initiator of security operationsh](j)}(h**Parameters**h]j3)}(hj 5h]h Parameters}(hj"5hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj5ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj5ubj})}(hhh](j)}(h(``struct pci_dev *pdev`` The PCI device h](j)}(h``struct pci_dev *pdev``h]j)}(hj?5h]hstruct pci_dev *pdev}(hjA5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=5ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj95ubj)}(hhh]j)}(hThe PCI deviceh]hThe PCI device}(hjX5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT5hMhjU5ubah}(h]h ]h"]h$]h&]uh1jhj95ubeh}(h]h ]h"]h$]h&]uh1jhjT5hMhj65ubj)}(h.``struct pci_tsm *tsm`` context to initialize h](j)}(h``struct pci_tsm *tsm``h]j)}(hjx5h]hstruct pci_tsm *tsm}(hjz5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv5ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhjr5ubj)}(hhh]j)}(hcontext to initializeh]hcontext to initialize}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjr5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj65ubj)}(h[``struct tsm_dev *tsm_dev`` Platform TEE Security Manager, initiator of security operationsh](j)}(h``struct tsm_dev *tsm_dev``h]j)}(hj5h]hstruct tsm_dev *tsm_dev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj5ubj)}(hhh]j)}(h?Platform TEE Security Manager, initiator of security operationsh]h?Platform TEE Security Manager, initiator of security operations}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj65ubeh}(h]h ]h"]h$]h&]uh1j|hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$pci_tsm_pf0_constructor (C function)c.pci_tsm_pf0_constructorhNtauh1jhjphhhNhNubj)}(hhh](j)}(hdint pci_tsm_pf0_constructor (struct pci_dev *pdev, struct pci_tsm_pf0 *tsm, struct tsm_dev *tsm_dev)h]j)}(hcint pci_tsm_pf0_constructor(struct pci_dev *pdev, struct pci_tsm_pf0 *tsm, struct tsm_dev *tsm_dev)h](j)}(hinth]hint}(hj 6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhj6hMubj)}(hpci_tsm_pf0_constructorh]j)}(hpci_tsm_pf0_constructorh]hpci_tsm_pf0_constructor}(hj,6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(6ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj6hhhj6hMubjm )}(hH(struct pci_dev *pdev, struct pci_tsm_pf0 *tsm, struct tsm_dev *tsm_dev)h](js )}(hstruct pci_dev *pdevh](j)}(hjh]hstruct}(hjH6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD6ubj)}(h h]h }(hjU6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD6ubh)}(hhh]j)}(hpci_devh]hpci_dev}(hjf6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc6ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetjh6modnameN classnameNj' j* )}j- ]j0 )}j# j.6sbc.pci_tsm_pf0_constructorasbuh1hhjD6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD6ubjE )}(hjH h]h*}(hj6hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hjD6ubj)}(hpdevh]hpdev}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD6ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj@6ubjs )}(hstruct pci_tsm_pf0 *tsmh](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j)}(h pci_tsm_pf0h]h pci_tsm_pf0}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetj6modnameN classnameNj' j* )}j- ]j6c.pci_tsm_pf0_constructorasbuh1hhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubjE )}(hjH h]h*}(hj7hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hj6ubj)}(htsmh]htsm}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj@6ubjs )}(hstruct tsm_dev *tsm_devh](j)}(hjh]hstruct}(hj*7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&7ubj)}(h h]h }(hj77hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&7ubh)}(hhh]j)}(htsm_devh]htsm_dev}(hjH7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE7ubah}(h]h ]h"]h$]h&] refdomainjreftypej# reftargetjJ7modnameN classnameNj' j* )}j- ]j6c.pci_tsm_pf0_constructorasbuh1hhj&7ubj)}(h h]h }(hjf7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&7ubjE )}(hjH h]h*}(hjt7hhhNhNubah}(h]h ]jQ ah"]h$]h&]uh1jD hj&7ubj)}(htsm_devh]htsm_dev}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&7ubeh}(h]h ]h"]h$]h&]noemphhhuh1jr hj@6ubeh}(h]h ]h"]h$]h&]hhuh1jl hj6hhhj6hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj6hhhj6hMubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1jhj6hMhj6hhubj)}(hhh]j)}(h0common 'struct pci_tsm_pf0' (DSM) initializationh]h4common ‘struct pci_tsm_pf0’ (DSM) initialization}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jhj6hhhj6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jj j!uh1jhhhjphNhNubj#)}(hX**Parameters** ``struct pci_dev *pdev`` Physical Function 0 PCI device (as indicated by is_pci_tsm_pf0()) ``struct pci_tsm_pf0 *tsm`` context to initialize ``struct tsm_dev *tsm_dev`` Platform TEE Security Manager, initiator of security operationsh](j)}(h**Parameters**h]j3)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j2hj7ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj7ubj})}(hhh](j)}(h[``struct pci_dev *pdev`` Physical Function 0 PCI device (as indicated by is_pci_tsm_pf0()) h](j)}(h``struct pci_dev *pdev``h]j)}(hj7h]hstruct pci_dev *pdev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj7ubj)}(hhh]j)}(hAPhysical Function 0 PCI device (as indicated by is_pci_tsm_pf0())h]hAPhysical Function 0 PCI device (as indicated by is_pci_tsm_pf0())}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj7ubj)}(h2``struct pci_tsm_pf0 *tsm`` context to initialize h](j)}(h``struct pci_tsm_pf0 *tsm``h]j)}(hj%8h]hstruct pci_tsm_pf0 *tsm}(hj'8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#8ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj8ubj)}(hhh]j)}(hcontext to initializeh]hcontext to initialize}(hj>8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:8hMhj;8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj:8hMhj7ubj)}(h[``struct tsm_dev *tsm_dev`` Platform TEE Security Manager, initiator of security operationsh](j)}(h``struct tsm_dev *tsm_dev``h]j)}(hj^8h]hstruct tsm_dev *tsm_dev}(hj`8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\8ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhjX8ubj)}(hhh]j)}(h?Platform TEE Security Manager, initiator of security operationsh]h?Platform TEE Security Manager, initiator of security operations}(hjw8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhjt8ubah}(h]h ]h"]h$]h&]uh1jhjX8ubeh}(h]h ]h"]h$]h&]uh1jhjs8hMhj7ubeh}(h]h ]h"]h$]h&]uh1j|hj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1j"hjphhhNhNubeh}(h]subsystem-interfacesah ]h"]subsystem interfacesah$]h&]uh1j[hj]hhhhhK ubeh}(h]6pci-trusted-execution-environment-security-manager-tsmah ]h"]8pci trusted execution environment security manager (tsm)ah$]h&]uh1j[hhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(j`N generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj8error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}(hhjhjjj jj/j#j>j2jMjAj\jPjkj_jzjnjj}jjjjjjjjjjjjjjjjjjjjj.j"j=j1jLj@j[jOjjj^jyjmjj|jjjjjjjjjjjjjjjjjjjjj-j!j<j0jKj?jZjNjij]jxjljj{jjjjjjjjjjjjjjjjjjjjj,j j;j/jJj>jYjMjhj\jwjkjjzjjjjjjjjjjjjjjjjj jjjj+jj:j.jIj=jXjLusubstitution_names}(amphaposjastjbrvbarj bsolj/centj>colonjMcommaj\commatjkcopyjzcurrenjdarrjdegjdividejdollarjequalsjexcljfrac12jfrac14jfrac18jfrac34jfrac38j.frac58j=frac78jLgtj[halfjjhorbarjyhyphenjiexcljiquestjlaquojlarrjlcubjldquojlowbarjlparjlsqbjlsquojltj-microj<middotjKnbspjZnotjinumjxohmjordfjordmjparajpercntjperiodjplusjplusmnjpoundjquestjquotjraquoj,rarrj;rcubjJrdquojYregjhrparjwrsqbjrsquojsectjsemijshyjsoljsungjsup1jsup2jsup3j timesjtradej+uarrj:verbarjIyenjXurefnames}refids}nameids}(j8j8j8j8u nametypes}(j8j8uh}(j8j]j8jpjjjjj j j j jjjjj'j,jjj_jdjjjjjjjojjj j j*"j/"j?$jD$j%j%j'j'j*j*j#0j(0jQ3jV3j5j6u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log]$Documentation/driver-api/pci/tsm.rst(NNNNta decorationNhhub.