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]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*}hhsbah}(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\}hjsbah}(h]h ]h"]bsolah$]h&]uh1hhhhK hhhhubh)}(h*.. |cent| unicode:: U+000A2 .. CENT SIGNh]h¢}hjsbah}(h]h ]h"]centah$]h&]uh1hhhhK hhhhubh)}(h&.. |colon| unicode:: U+0003A .. COLONh]h:}hj-sbah}(h]h ]h"]colonah$]h&]uh1hhhhK hhhhubh)}(h&.. |comma| unicode:: U+0002C .. COMMAh]h,}hj<sbah}(h]h ]h"]commaah$]h&]uh1hhhhKhhhhubh)}(h... |commat| unicode:: U+00040 .. COMMERCIAL ATh]h@}hjKsbah}(h]h ]h"]commatah$]h&]uh1hhhhKhhhhubh)}(h/.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGNh]h©}hjZsbah}(h]h ]h"]copyah$]h&]uh1hhhhKhhhhubh)}(h... |curren| unicode:: U+000A4 .. CURRENCY SIGNh]h¤}hjisbah}(h]h ]h"]currenah$]h&]uh1hhhhKhhhhubh)}(h0.. |darr| unicode:: U+02193 .. DOWNWARDS ARROWh]h↓}hjxsbah}(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⅜}hjsbah}(h]h ]h"]frac38ah$]h&]uh1hhhhKhhhhubh)}(h=.. |frac58| unicode:: U+0215D .. VULGAR FRACTION FIVE EIGHTHSh]h⅝}hjsbah}(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>}hj;sbah}(h]h ]h"]gtah$]h&]uh1hhhhKhhhhubh)}(h9.. |half| unicode:: U+000BD .. VULGAR FRACTION ONE HALFh]h½}hjJsbah}(h]h ]h"]halfah$]h&]uh1hhhhK hhhhubh)}(h/.. |horbar| unicode:: U+02015 .. HORIZONTAL BARh]h―}hjYsbah}(h]h ]h"]horbarah$]h&]uh1hhhhK!hhhhubh)}(h'.. |hyphen| unicode:: U+02010 .. HYPHENh]h‐}hjhsbah}(h]h ]h"]hyphenah$]h&]uh1hhhhK"hhhhubh)}(h:.. |iexcl| unicode:: U+000A1 .. INVERTED EXCLAMATION MARKh]h¡}hjwsbah}(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µ}hjsbah}(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 }hj:sbah}(h]h ]h"]nbspah$]h&]uh1hhhhK0hhhhubh)}(h).. |not| unicode:: U+000AC .. NOT SIGNh]h¬}hjIsbah}(h]h ]h"]notah$]h&]uh1hhhhK1hhhhubh)}(h,.. |num| unicode:: U+00023 .. NUMBER SIGNh]h#}hjXsbah}(h]h ]h"]numah$]h&]uh1hhhhK2hhhhubh)}(h).. |ohm| unicode:: U+02126 .. OHM SIGNh]hΩ}hjgsbah}(h]h ]h"]ohmah$]h&]uh1hhhhK3hhhhubh)}(h;.. |ordf| unicode:: U+000AA .. FEMININE ORDINAL INDICATORh]hª}hjvsbah}(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→}hjsbah}(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”}hj9sbah}(h]h ]h"]rdquoah$]h&]uh1hhhhKAhhhhubh)}(h0.. |reg| unicode:: U+000AE .. REGISTERED SIGNh]h®}hjHsbah}(h]h ]h"]regah$]h&]uh1hhhhKBhhhhubh)}(h2.. |rpar| unicode:: U+00029 .. RIGHT PARENTHESISh]h)}hjWsbah}(h]h ]h"]rparah$]h&]uh1hhhhKChhhhubh)}(h5.. |rsqb| unicode:: U+0005D .. RIGHT SQUARE BRACKETh]h]}hjfsbah}(h]h ]h"]rsqbah$]h&]uh1hhhhKDhhhhubh)}(h<.. |rsquo| unicode:: U+02019 .. RIGHT SINGLE QUOTATION MARKh]h’}hjusbah}(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™}hj sbah}(h]h ]h"]tradeah$]h&]uh1hhhhKOhhhhubh)}(h... |uarr| unicode:: U+02191 .. UPWARDS ARROWh]h↑}hjsbah}(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¥}hj8sbah}(h]h ]h"]yenah$]h&]uh1hhhhKRhhhhubhsection)}(hhh](htitle)}(h8PCI Trusted Execution Environment Security Manager (TSM)h]h8PCI Trusted Execution Environment Security Manager (TSM)}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhhhhhKubjH)}(hhh](jM)}(hSubsystem Interfacesh]hSubsystem Interfaces}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlepci_ide_partner (C struct)c.pci_ide_partnerhNtauh1jmhj\hhhNhNubhdesc)}(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]j|ah ](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 noindexentrynocontentsentryuh1j~hhhj\hNhNubh 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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKhjubh 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; };}hj;sbah}(h]h ]h"]h$]h&]hhuh1j9hZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK!hjubeh}(h]h ]h"]h$]h&]uh1jhj8hKhjubj)}(h **Members**h]j)}(hjRh]hMembers}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK,hjubhdefinition_list)}(hhh](hdefinition_list_item)}(h4``rid_start`` Partner Port Requester ID range start h](hterm)}(h ``rid_start``h]hliteral)}(hjwh]h rid_start}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjuubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKhjoubh 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&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jmhjhKhjjubjn)}(h<``rid_end`` Partner Port Requester ID range end (inclusive) h](jt)}(h ``rid_end``h]jz)}(hjh]hrid_end}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshZ/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&]uh1jmhjhKhjjubjn)}(h?``stream_index`` Selective IDE Stream Register Block selection h](jt)}(h``stream_index``h]jz)}(hjh]h stream_index}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshZ/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&]uh1jmhjhKhjjubjn)}(hL``mem_assoc`` PCI bus memory address association for targeting peer partner h](jt)}(h ``mem_assoc``h]jz)}(hj&h]h mem_assoc}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK hj ubj)}(hhh]j)}(h=PCI bus memory address association for targeting peer partnerh]h=PCI bus memory address association for targeting peer partner}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;hK hj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj;hK hjjubjn)}(hZ``pref_assoc`` PCI bus prefetchable memory address association for targeting peer partner h](jt)}(h``pref_assoc``h]jz)}(hj_h]h pref_assoc}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj]ubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK"hjYubj)}(hhh]j)}(hJPCI bus prefetchable memory address association for targeting peer partnerh]hJPCI bus prefetchable memory address association for targeting peer partner}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK!hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jmhjthK"hjjubjn)}(hw``default_stream`` Endpoint uses this stream for all upstream TLPs regardless of address and RID association registers h](jt)}(h``default_stream``h]jz)}(hjh]hdefault_stream}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshZ/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&]uh1jmhjhK$hjjubjn)}(hW``setup`` flag to track whether to run pci_ide_stream_teardown() for this partner slot h](jt)}(h ``setup``h]jz)}(hjh]hsetup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshZ/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&]uh1jmhjhK&hjjubjn)}(hO``enable`` flag whether to run pci_ide_stream_disable() for this partner slot h](jt)}(h ``enable``h]jz)}(hj h]henable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshZ/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'hj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hK(hjjubeh}(h]h ]h"]h$]h&]uh1jhhjubj)}(h**Description**h]j)}(hjIh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK*hjubj)}(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 }(hj_hhhNhNubj)}(h **mem_assoc**h]h mem_assoc}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh and }(hj_hhhNhNubj)}(h**pref_assoc**h]h pref_assoc}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubh 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.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK'hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jzpci_ide_regs (C struct)c.pci_ide_regshNtauh1jmhj\hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK9hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK/ubeh}(h]h ](jstructeh"]h$]h&]jjj j j j j j j uh1j~hhhj\hNhNubj)}(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](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 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 ubj:)}(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; };}hj5 sbah}(h]h ]h"]h$]h&]hhuh1j9hZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK?hj ubeh}(h]h ]h"]h$]h&]uh1jhj4 hK=hj ubj)}(h **Members**h]j)}(hjL h]hMembers}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKJhj ubji)}(hhh](jn)}(h(``rid1`` IDE RID Association Register 1 h](jt)}(h``rid1``h]jz)}(hjk h]hrid1}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhji ubah}(h]h ]h"]h$]h&]uh1jshZ/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&]uh1jmhj hK?hjb ubjn)}(h>``nr_addr`` Number of address association blocks initialized h](jt)}(h ``nr_addr``h]jz)}(hj h]hnr_addr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshZ/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}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK@hj- ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj, hKAhjb ubeh}(h]h ]h"]h$]h&]uh1jhhj ubj)}(h**Description**h]j)}(hjS h]h Description}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ 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()}(hji 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&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jzpci_ide (C struct) c.pci_idehNtauh1jmhj\hhhNhNubj)}(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&]jjj j j j j j j uh1j~hhhj\hNhNubj)}(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](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 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 ubj:)}(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&]hhuh1j9hZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKUhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKShj ubj)}(h **Members**h]j)}(hj2 h]hMembers}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0 ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhK]hj ubji)}(hhh](jn)}(h3``pdev`` PCIe Endpoint in the pci_ide_partner pair h](jt)}(h``pdev``h]jz)}(hjQ h]hpdev}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjO ubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKQhjK ubj)}(hhh]j)}(h)PCIe Endpoint in the pci_ide_partner pairh]h)PCIe Endpoint in the pci_ide_partner pair}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf hKQhjg ubah}(h]h ]h"]h$]h&]uh1jhjK ubeh}(h]h ]h"]h$]h&]uh1jmhjf hKQhjH ubjn)}(h!``partner`` per-partner settings h](jt)}(h ``partner``h]jz)}(hj h]hpartner}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshZ/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&]uh1jmhj hKRhjH ubjn)}(hJ``host_bridge_stream`` allocated from host bridge **ide_stream_ida** pool h](jt)}(h``host_bridge_stream``h]jz)}(hj h]hhost_bridge_stream}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshZ/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 hhhNhNubj)}(h**ide_stream_ida**h]hide_stream_ida}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh pool}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhj hKShj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj hKShjH ubjn)}(h=``stream_id`` unique Stream ID (within Partner Port pairing) h](jt)}(h ``stream_id``h]jz)}(hj h]h stream_id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshZ/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&]uh1jhj# hKThj$ ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj# hKThjH ubjn)}(h@``name`` name of the established Selective IDE Stream in sysfs h](jt)}(h``name``h]jz)}(hjG h]hname}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjE ubah}(h]h ]h"]h$]h&]uh1jshZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKVhjA ubj)}(hhh]j)}(h5name of the established Selective IDE Stream in sysfsh]h5name of the established Selective IDE Stream in sysfs}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:97: ./include/linux/pci-ide.hhKUhj] ubah}(h]h ]h"]h$]h&]uh1jhjA ubeh}(h]h ]h"]h$]h&]uh1jmhj\ hKVhjH ubeh}(h]h ]h"]h$]h&]uh1jhhj ubj)}(h**Description**h]j)}(hj h]h Description}(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.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 hhhNhNubj)}(h **stream_id**h]h stream_id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 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&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jz!pci_ide_stream_alloc (C function)c.pci_ide_stream_allochNtauh1jmhj\hhhNhNubj)}(hhh](j)}(hhhhNhNubj)}(h**ide**h]hide}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh context}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMbhj;hhubah}(h]h ]h"]h$]h&]uh1jhjshhhjhMbubeh}(h]h ](jfunctioneh"]h$]h&]jjj jhj jhj j j uh1j~hhhj\hNhNubj)}(hX**Parameters** ``struct pci_ide *ide`` partially or fully registered IDE settings descriptor **Description** In support of automatic cleanup of IDE setup routines perform IDE teardown in expected reverse order of setup and with respect to which aspects of IDE setup have successfully completed. Be careful that setup order mirrors this shutdown order. Otherwise, open code releasing the IDE context.h](j)}(h**Parameters**h]j)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMfhjlubji)}(hhh]jn)}(hN``struct pci_ide *ide`` partially or fully registered IDE settings descriptor h](jt)}(h``struct pci_ide *ide``h]jz)}(hjh]hstruct pci_ide *ide}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMchjubj)}(hhh]j)}(h5partially or fully registered IDE settings descriptorh]h5partially or fully registered IDE settings descriptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhMchjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMchjubah}(h]h ]h"]h$]h&]uh1jhhjlubj)}(h**Description**h]j)}(hjh]h Description}(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.chMehjlubj)}(hIn support of automatic cleanup of IDE setup routines perform IDE teardown in expected reverse order of setup and with respect to which aspects of IDE setup have successfully completed.h]hIn support of automatic cleanup of IDE setup routines perform IDE teardown in expected reverse order of setup and with respect to which aspects of IDE setup have successfully completed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMdhjlubj)}(hhBe careful that setup order mirrors this shutdown order. Otherwise, open code releasing the IDE context.h]hhBe careful that setup order mirrors this shutdown order. Otherwise, open code releasing the IDE context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jz$pci_ide_stream_register (C function)c.pci_ide_stream_registerhNtauh1jmhj\hhhNhNubj)}(hhh](j)}(h1int pci_ide_stream_register (struct pci_ide *ide)h]j)}(h0int pci_ide_stream_register(struct pci_ide *ide)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj.hMubj)}(hpci_ide_stream_registerh]j)}(hpci_ide_stream_registerh]hpci_ide_stream_register}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj.hMubjY )}(h(struct pci_ide *ide)h]j_ )}(hstruct pci_ide *ideh](j)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(hpci_ideh]hpci_ide}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}modnameN classnameNj j )}j ]j )}j jCsbc.pci_ide_stream_registerasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj1 )}(hj4 h]h*}(hjhhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hjYubj)}(hideh]hide}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjUubah}(h]h ]h"]h$]h&]hhuh1jX hjhhhj.hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj.hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj.hMhjhhubj)}(hhh]j)}(h!Prepare to activate an IDE Streamh]h!Prepare to activate an 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&]uh1jhjhhhj.hMubeh}(h]h ](jfunctioneh"]h$]h&]jjj jj jj j j uh1j~hhhj\hNhNubj)}(h**Parameters** ``struct pci_ide *ide`` IDE settings descriptor **Description** After a Stream ID has been acquired for **ide**, record the presence of the stream in sysfs. The expectation is that **ide** is immutable while registered.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(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.chMhjubji)}(hhh]jn)}(h0``struct pci_ide *ide`` IDE settings descriptor h](jt)}(h``struct pci_ide *ide``h]jz)}(hj!h]hstruct pci_ide *ide}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubj)}(hhh]j)}(hIDE settings descriptorh]hIDE settings descriptor}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj6hMhjubah}(h]h ]h"]h$]h&]uh1jhhjubj)}(h**Description**h]j)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubj)}(hAfter a Stream ID has been acquired for **ide**, record the presence of the stream in sysfs. The expectation is that **ide** is immutable while registered.h](h(After a Stream ID has been acquired for }(hjrhhhNhNubj)}(h**ide**h]hide}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubhF, record the presence of the stream in sysfs. The expectation is that }(hjrhhhNhNubj)}(h**ide**h]hide}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubh is immutable while registered.}(hjrhhhNhNubeh}(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&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jz&pci_ide_stream_unregister (C function)c.pci_ide_stream_unregisterhNtauh1jmhj\hhhNhNubj)}(hhh](j)}(h4void pci_ide_stream_unregister (struct pci_ide *ide)h]j)}(h3void pci_ide_stream_unregister(struct pci_ide *ide)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]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_stream_unregisterh]j)}(hpci_ide_stream_unregisterh]hpci_ide_stream_unregister}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhMubjY )}(h(struct pci_ide *ide)h]j_ )}(hstruct pci_ide *ideh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hpci_ideh]hpci_ide}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNj j )}j ]j )}j jsbc.pci_ide_stream_unregisterasbuh1hhjubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj1 )}(hj4 h]h*}(hjNhhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hjubj)}(hideh]hide}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjubah}(h]h ]h"]h$]h&]hhuh1jX hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]j)}(h unwind pci_ide_stream_register()h]h unwind pci_ide_stream_register()}(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&]jjj jj jj j j uh1j~hhhj\hNhNubj)}(h**Parameters** ``struct pci_ide *ide`` idle IDE settings descriptor **Description** In preparation for freeing **ide**, remove sysfs enumeration for the stream.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(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.chMhjubji)}(hhh]jn)}(h5``struct pci_ide *ide`` idle IDE settings descriptor h](jt)}(h``struct pci_ide *ide``h]jz)}(hjh]hstruct pci_ide *ide}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjubj)}(hhh]j)}(hidle IDE settings descriptorh]hidle IDE settings descriptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubah}(h]h ]h"]h$]h&]uh1jhhjubj)}(h**Description**h]j)}(hjh]h Description}(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)}(hLIn preparation for freeing **ide**, remove sysfs enumeration for the stream.h](hIn preparation for freeing }(hjhhhNhNubj)}(h**ide**h]hide}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh*, remove sysfs enumeration for the stream.}(hjhhhNhNubeh}(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&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jz!pci_ide_stream_setup (C function)c.pci_ide_stream_setuphNtauh1jmhj\hhhNhNubj)}(hhh](j)}(hEvoid pci_ide_stream_setup (struct pci_dev *pdev, struct pci_ide *ide)h]j)}(hDvoid pci_ide_stream_setup(struct pci_dev *pdev, struct pci_ide *ide)h](j)}(hvoidh]hvoid}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMKubj)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjfhMKubj)}(hpci_ide_stream_setuph]j)}(hpci_ide_stream_setuph]hpci_ide_stream_setup}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubah}(h]h ](jjeh"]h$]h&]hhuh1jhjThhhjfhMKubjY )}(h+(struct pci_dev *pdev, struct pci_ide *ide)h](j_ )}(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 ]j )}j j{sbc.pci_ide_stream_setupasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj1 )}(hj4 h]h*}(hjhhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hjubj)}(hpdevh]hpdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjubj_ )}(hstruct pci_ide *ideh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hpci_ideh]hpci_ide}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNj j )}j ]jc.pci_ide_stream_setupasbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj1 )}(hj4 h]h*}(hjQhhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hjubj)}(hideh]hide}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjubeh}(h]h ]h"]h$]h&]hhuh1jX hjThhhjfhMKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjPhhhjfhMKubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jhjfhMKhjMhhubj)}(hhh]j)}(h2program settings to Selective IDE Stream registersh]h2program settings to Selective IDE Stream registers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMKhjhhubah}(h]h ]h"]h$]h&]uh1jhjMhhhjfhMKubeh}(h]h ](jfunctioneh"]h$]h&]jjj jj jj j j uh1j~hhhj\hNhNubj)}(hX**Parameters** ``struct pci_dev *pdev`` PCIe device object for either a Root Port or Endpoint Partner Port ``struct pci_ide *ide`` registered IDE settings descriptor **Description** When **pdev** is a PCI_EXP_TYPE_ENDPOINT then the PCI_IDE_EP partner settings are written to **pdev**'s Selective IDE Stream register block, and when **pdev** is a PCI_EXP_TYPE_ROOT_PORT, the PCI_IDE_RP settings are selected.h](j)}(h**Parameters**h]j)}(hjh]h Parameters}(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.chMOhjubji)}(hhh](jn)}(h\``struct pci_dev *pdev`` PCIe device object for either a Root Port or Endpoint Partner Port h](jt)}(h``struct pci_dev *pdev``h]jz)}(hjh]hstruct pci_dev *pdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMLhjubj)}(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&]uh1jhjhMLhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMLhjubjn)}(h;``struct pci_ide *ide`` registered IDE settings descriptor h](jt)}(h``struct pci_ide *ide``h]jz)}(hjh]hstruct pci_ide *ide}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMMhjubj)}(hhh]j)}(h"registered IDE settings descriptorh]h"registered IDE settings descriptor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhMMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubj)}(h**Description**h]j)}(hj=h]h Description}(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.chMOhjubj)}(hWhen **pdev** is a PCI_EXP_TYPE_ENDPOINT then the PCI_IDE_EP partner settings are written to **pdev**'s Selective IDE Stream register block, and when **pdev** is a PCI_EXP_TYPE_ROOT_PORT, the PCI_IDE_RP settings are selected.h](hWhen }(hjShhhNhNubj)}(h**pdev**h]hpdev}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubhP is a PCI_EXP_TYPE_ENDPOINT then the PCI_IDE_EP partner settings are written to }(hjShhhNhNubj)}(h**pdev**h]hpdev}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubh3’s Selective IDE Stream register block, and when }(hjShhhNhNubj)}(h**pdev**h]hpdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubhC is a PCI_EXP_TYPE_ROOT_PORT, the PCI_IDE_RP settings are selected.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jz$pci_ide_stream_teardown (C function)c.pci_ide_stream_teardownhNtauh1jmhj\hhhNhNubj)}(hhh](j)}(hHvoid pci_ide_stream_teardown (struct pci_dev *pdev, struct pci_ide *ide)h]j)}(hGvoid pci_ide_stream_teardown(struct pci_dev *pdev, struct pci_ide *ide)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chM~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM~ubj)}(hpci_ide_stream_teardownh]j)}(hpci_ide_stream_teardownh]hpci_ide_stream_teardown}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhM~ubjY )}(h+(struct pci_dev *pdev, struct pci_ide *ide)h](j_ )}(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 ]j )}j jsbc.pci_ide_stream_teardownasbuh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj1 )}(hj4 h]h*}(hjAhhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hjubj)}(hpdevh]hpdev}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjubj_ )}(hstruct pci_ide *ideh](j)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j)}(hpci_ideh]hpci_ide}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j/c.pci_ide_stream_teardownasbuh1hhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj1 )}(hj4 h]h*}(hjhhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hjcubj)}(hideh]hide}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjubeh}(h]h ]h"]h$]h&]hhuh1jX hjhhhjhM~ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM~ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM~hjhhubj)}(hhh]j)}(h)disable the stream and clear all settingsh]h)disable the stream and clear all settings}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chM~hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM~ubeh}(h]h ](jfunctioneh"]h$]h&]jjj jj jj j j uh1j~hhhj\hNhNubj)}(hX**Parameters** ``struct pci_dev *pdev`` PCIe device object for either a Root Port or Endpoint Partner Port ``struct pci_ide *ide`` registered IDE settings descriptor **Description** For stream destruction, zero all registers that may have been written by pci_ide_stream_setup(). Consider pci_ide_stream_disable() to leave settings in place while temporarily disabling the stream.h](j)}(h**Parameters**h]j)}(hj h]h Parameters}(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.chMhjubji)}(hhh](jn)}(h\``struct pci_dev *pdev`` PCIe device object for either a Root Port or Endpoint Partner Port h](jt)}(h``struct pci_dev *pdev``h]jz)}(hj)h]hstruct pci_dev *pdev}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhj#ubj)}(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}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jmhj>hMhj ubjn)}(h;``struct pci_ide *ide`` registered IDE settings descriptor h](jt)}(h``struct pci_ide *ide``h]jz)}(hjbh]hstruct pci_ide *ide}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj`ubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhj\ubj)}(hhh]j)}(h"registered IDE settings descriptorh]h"registered IDE settings descriptor}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwhMhjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1jmhjwhMhj ubeh}(h]h ]h"]h$]h&]uh1jhhjubj)}(h**Description**h]j)}(hjh]h Description}(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)}(hFor stream destruction, zero all registers that may have been written by pci_ide_stream_setup(). Consider pci_ide_stream_disable() to leave settings in place while temporarily disabling the stream.h]hFor stream destruction, zero all registers that may have been written by pci_ide_stream_setup(). Consider pci_ide_stream_disable() to leave settings in place while temporarily disabling the stream.}(hjhhhNhNubah}(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&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jz"pci_ide_stream_enable (C function)c.pci_ide_stream_enablehNtauh1jmhj\hhhNhNubj)}(hhh](j)}(hEint pci_ide_stream_enable (struct pci_dev *pdev, struct pci_ide *ide)h]j)}(hDint pci_ide_stream_enable(struct pci_dev *pdev, struct pci_ide *ide)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]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_stream_enableh]j)}(hpci_ide_stream_enableh]hpci_ide_stream_enable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhMubjY )}(h+(struct pci_dev *pdev, struct pci_ide *ide)h](j_ )}(hstruct pci_dev *pdevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(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 )}j jsbc.pci_ide_stream_enableasbuh1hhjubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj1 )}(hj4 h]h*}(hjkhhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hjubj)}(hpdevh]hpdev}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjubj_ )}(hstruct pci_ide *ideh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hpci_ideh]hpci_ide}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]jYc.pci_ide_stream_enableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj1 )}(hj4 h]h*}(hjhhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hjubj)}(hideh]hide}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjubeh}(h]h ]h"]h$]h&]hhuh1jX hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]j)}(henable a Selective IDE Streamh]henable 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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjj j*j j*j j j uh1j~hhhj\hNhNubj)}(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]j)}(hj4h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhj.ubji)}(hhh](jn)}(h\``struct pci_dev *pdev`` PCIe device object for either a Root Port or Endpoint Partner Port h](jt)}(h``struct pci_dev *pdev``h]jz)}(hjSh]hstruct pci_dev *pdev}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjQubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhjMubj)}(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}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhMhjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jmhjhhMhjJubjn)}(hE``struct pci_ide *ide`` registered and setup IDE settings descriptor h](jt)}(h``struct pci_ide *ide``h]jz)}(hjh]hstruct pci_ide *ide}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshU/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&]uh1jmhjhMhjJubeh}(h]h ]h"]h$]h&]uh1jhhj.ubj)}(h**Description**h]j)}(hjh]h Description}(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.chMhj.ubj)}(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.chMhj.ubj)}(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.chMhj.ubj)}(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.chMhj.ubj)}(h **Return**h]j)}(hj h]hReturn}(hjhhhNhNubah}(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)}(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 }(hj"hhhNhNubj)}(h**ide**h]hide}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubhF is invalid, and -ENXIO if the stream fails to enter the secure state.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jz#pci_ide_stream_disable (C function)c.pci_ide_stream_disablehNtauh1jmhj\hhhNhNubj)}(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}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:100: ./drivers/pci/ide.chMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhjqhMubj)}(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&]hhuh1jhj_hhhjqhMubjY )}(h+(struct pci_dev *pdev, struct pci_ide *ide)h](j_ )}(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 ]j )}j jsbc.pci_ide_stream_disableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj1 )}(hj4 h]h*}(hjhhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hjubj)}(hpdevh]hpdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjubj_ )}(hstruct pci_ide *ideh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hpci_ideh]hpci_ide}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj2modnameN classnameNj j )}j ]jc.pci_ide_stream_disableasbuh1hhjubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj1 )}(hj4 h]h*}(hj\hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hjubj)}(hideh]hide}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjubeh}(h]h ]h"]h$]h&]hhuh1jX hj_hhhjqhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj[hhhjqhMubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1jhjqhMhjXhhubj)}(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&]uh1jhjXhhhjqhMubeh}(h]h ](jfunctioneh"]h$]h&]jjj jj jj j j uh1j~hhhj\hNhNubj)}(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]j)}(hjh]h Parameters}(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.chMhjubji)}(hhh](jn)}(h\``struct pci_dev *pdev`` PCIe device object for either a Root Port or Endpoint Partner Port h](jt)}(h``struct pci_dev *pdev``h]jz)}(hjh]hstruct pci_dev *pdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshU/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&]uh1jmhjhMhjubjn)}(hE``struct pci_ide *ide`` registered and setup IDE settings descriptor h](jt)}(h``struct pci_ide *ide``h]jz)}(hj h]hstruct pci_ide *ide}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshU/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&]uh1jhj"hMhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhj"hMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubj)}(h**Description**h]j)}(hjHh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(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.}(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&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jz#pci_ide_set_nr_streams (C function)c.pci_ide_set_nr_streamshNtauh1jmhj\hhhNhNubj)}(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 ]jah"]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&]hhuh1jhjhhhjhMubjY )}(h$(struct pci_host_bridge *hb, u16 nr)h](j_ )}(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 ]j )}j jsbc.pci_ide_set_nr_streamsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj1 )}(hj4 h]h*}(hjhhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hjubj)}(hhbh]hhb}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjubj_ )}(hu16 nrh](h)}(hhh]j)}(hu16h]hu16}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNj j )}j ]jc.pci_ide_set_nr_streamsasbuh1hhj8ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hnrh]hnr}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjubeh}(h]h ]h"]h$]h&]hhuh1jX 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&]jjj jj jj j j uh1j~hhhj\hNhNubj)}(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]j)}(hjh]h Parameters}(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.chMhjubji)}(hhh](jn)}(hH``struct pci_host_bridge *hb`` host bridge boundary for the stream pool h](jt)}(h``struct pci_host_bridge *hb``h]jz)}(hjh]hstruct pci_host_bridge *hb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjubah}(h]h ]h"]h$]h&]uh1jshU/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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jmhjhMhjubjn)}(h``u16 nr`` number of streams h](jt)}(h ``u16 nr``h]jz)}(hj h]hu16 nr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj ubah}(h]h ]h"]h$]h&]uh1jshU/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&]uh1jhj$ hMhj% ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jmhj$ hMhjubeh}(h]h ]h"]h$]h&]uh1jhhjubj)}(h**Description**h]j)}(hjJ h]h Description}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH 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.}(hj` 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.}(hjo 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&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jzpci_tdi (C struct) c.pci_tdihNtauh1jmhj\hhhNhNubj)}(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&]jjj j j j j j j uh1j~hhhj\hNhNubj)}(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](j)}(h**Definition**h]h Definition}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!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!ubj:)}(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; };}hj!!sbah}(h]h ]h"]h$]h&]hhuh1j9h[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKWhj!ubeh}(h]h ]h"]h$]h&]uh1jhj !hKUhj ubj)}(h **Members**h]j)}(hj8!h]hMembers}(hj:!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6!ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhK]hj ubji)}(hhh](jn)}(h4``pdev`` host side representation of guest-side TDI h](jt)}(h``pdev``h]jz)}(hjW!h]hpdev}(hjY!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjU!ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKShjQ!ubj)}(hhh]j)}(h*host side representation of guest-side TDIh]h*host side representation of guest-side TDI}(hjp!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl!hKShjm!ubah}(h]h ]h"]h$]h&]uh1jhjQ!ubeh}(h]h ]h"]h$]h&]uh1jmhjl!hKShjN!ubjn)}(h$``kvm`` TEE VM context of bound TDI h](jt)}(h``kvm``h]jz)}(hj!h]hkvm}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jsh[/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&]uh1jmhj!hKThjN!ubjn)}(hP``tdi_id`` Identifier (virtual BDF) for the TDI as referenced by the TSM and DSMh](jt)}(h ``tdi_id``h]jz)}(hj!h]htdi_id}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj!ubah}(h]h ]h"]h$]h&]uh1jsh[/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&]uh1jmhj!hKThjN!ubeh}(h]h ]h"]h$]h&]uh1jhhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jzpci_tsm (C struct) c.pci_tsmhNtauh1jmhj\hhhNhNubj)}(hhh](j)}(hpci_tsmh]j)}(hstruct pci_tsmh](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.hhK[ubj)}(h h]h }(hj1"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj0"hK[ubj)}(hpci_tsmh]j)}(hj"h]hpci_tsm}(hjC"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?"ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj"hhhj0"hK[ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj"hhhj0"hK[ubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1jhj0"hK[hj"hhubj)}(hhh]j)}(h*Core TSM context for a given PCIe endpointh]h*Core TSM context for a given PCIe endpoint}(hje"hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhK]hjb"hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj0"hK[ubeh}(h]h ](jstructeh"]h$]h&]jjj j}"j j}"j j j uh1j~hhhj\hNhNubj)}(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](j)}(h**Definition**h]h Definition}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"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"ubj:)}(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&]hhuh1j9h[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKchj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hKahj"ubj)}(h **Members**h]j)}(hj"h]hMembers}(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.hhKjhj"ubji)}(hhh](jn)}(hL``pdev`` Back ref to device function, distinguishes type of pci_tsm context h](jt)}(h``pdev``h]jz)}(hj"h]hpdev}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj"ubah}(h]h ]h"]h$]h&]uh1jsh[/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&]uh1jmhj"hK_hj"ubjn)}(hH``dsm_dev`` PCI Device Security Manager for link operations on **pdev** h](jt)}(h ``dsm_dev``h]jz)}(hj#h]hdsm_dev}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1jsh[/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 }(hj.#hhhNhNubj)}(h**pdev**h]hpdev}(hj6#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.#ubeh}(h]h ]h"]h$]h&]uh1jhj*#hK`hj+#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jmhj*#hK`hj"ubjn)}(hl``tsm_dev`` PCI TEE Security Manager device for Link Confidentiality or Device Function Security operations h](jt)}(h ``tsm_dev``h]jz)}(hj\#h]htsm_dev}(hj^#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjZ#ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKbhjV#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}(hju#hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKahjr#ubah}(h]h ]h"]h$]h&]uh1jhjV#ubeh}(h]h ]h"]h$]h&]uh1jmhjq#hKbhj"ubjn)}(h@``tdi`` TDI context established by the **bind** link operation h](jt)}(h``tdi``h]jz)}(hj#h]htdi}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj#ubah}(h]h ]h"]h$]h&]uh1jsh[/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#hhhNhNubj)}(h**bind**h]hbind}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#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&]uh1jmhj#hKdhj"ubeh}(h]h ]h"]h$]h&]uh1jhhj"ubj)}(h**Description**h]j)}(hj#h]h Description}(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.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&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jzpci_tsm_pf0 (C struct) c.pci_tsm_pf0hNtauh1jmhj\hhhNhNubj)}(hhh](j)}(h pci_tsm_pf0h]j)}(hstruct pci_tsm_pf0h](j)}(hjh]hstruct}(hj8$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4$hhh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKpubj)}(h h]h }(hjF$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4$hhhjE$hKpubj)}(h pci_tsm_pf0h]j)}(hj2$h]h pci_tsm_pf0}(hjX$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT$ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj4$hhhjE$hKpubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj0$hhhjE$hKpubah}(h]j+$ah ](jjeh"]h$]h&]jj)jhuh1jhjE$hKphj-$hhubj)}(hhh]j)}(h&Physical Function 0 TDISP link contexth]h&Physical Function 0 TDISP link context}(hjz$hhhNhNubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKvhjw$hhubah}(h]h ]h"]h$]h&]uh1jhj-$hhhjE$hKpubeh}(h]h ](jstructeh"]h$]h&]jjj j$j j$j j j uh1j~hhhj\hNhNubj)}(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](j)}(h**Definition**h]h Definition}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$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$ubj:)}(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&]hhuh1j9h[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhK|hj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hKzhj$ubj)}(h **Members**h]j)}(hj$h]hMembers}(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$ubji)}(hhh](jn)}(h(``base_tsm`` generic core "tsm" context h](jt)}(h ``base_tsm``h]jz)}(hj$h]hbase_tsm}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj$ubah}(h]h ]h"]h$]h&]uh1jsh[/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&]uh1jmhj%hKxhj$ubjn)}(h6``lock`` mutual exclustion for pci_tsm_ops invocation h](jt)}(h``lock``h]jz)}(hj*%h]hlock}(hj,%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj(%ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKyhj$%ubj)}(hhh]j)}(h,mutual exclustion for pci_tsm_ops invocationh]h,mutual exclustion for pci_tsm_ops invocation}(hjC%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?%hKyhj@%ubah}(h]h ]h"]h$]h&]uh1jhj$%ubeh}(h]h ]h"]h$]h&]uh1jmhj?%hKyhj$ubjn)}(h,``doe_mb`` PCIe Data Object Exchange mailboxh](jt)}(h ``doe_mb``h]jz)}(hjc%h]hdoe_mb}(hje%hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhja%ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKyhj]%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.hhKzhjy%ubah}(h]h ]h"]h$]h&]uh1jhj]%ubeh}(h]h ]h"]h$]h&]uh1jmhjx%hKyhj$ubeh}(h]h ]h"]h$]h&]uh1jhhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jzpci_tsm_req_scope (C enum)c.pci_tsm_req_scopehNtauh1jmhj\hhhNhNubj)}(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&]jjj j&j j&j j j uh1j~hhhj\hNhNubj)}(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]j)}(hj&&h]h Constants}(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 &ubji)}(hhh](jn)}(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](jt)}(h``PCI_TSM_REQ_INFO``h]jz)}(hjE&h]hPCI_TSM_REQ_INFO}(hjG&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjC&ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj?&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.}(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&]uh1jmhjZ&hKhj<&ubjn)}(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](jt)}(h``PCI_TSM_REQ_STATE_CHANGE``h]jz)}(hj&h]hPCI_TSM_REQ_STATE_CHANGE}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj}&ubah}(h]h ]h"]h$]h&]uh1jsh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhjy&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&]uh1jhjy&ubeh}(h]h ]h"]h$]h&]uh1jmhj&hKhj<&ubjn)}(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](jt)}(h``PCI_TSM_REQ_DEBUG_READ``h]jz)}(hj&h]hPCI_TSM_REQ_DEBUG_READ}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj&ubah}(h]h ]h"]h$]h&]uh1jsh[/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&]uh1jmhj&hKhj<&ubjn)}(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](jt)}(h``PCI_TSM_REQ_DEBUG_WRITE``h]jz)}(hj'h]hPCI_TSM_REQ_DEBUG_WRITE}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj'ubah}(h]h ]h"]h$]h&]uh1jsh[/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&]uh1jmhj'hKhj<&ubeh}(h]h ]h"]h$]h&]uh1jhhj &ubeh}(h]h ]h"]h$]h&]uh1jhj;&hKhj&ubj)}(h**Description**h]j)}(hjS'h]h Description}(hjU'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ'ubah}(h]h ]h"]h$]h&]uh1jh[/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:103: ./include/linux/pci-tsm.hhKhj&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.}(hji'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 ] kernelindentah"]h$]h&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jzpci_tsm_bind (C function)c.pci_tsm_bindhNtauh1jmhj\hhhNhNubj)}(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 ]jah"]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'hMKubjY )}(h3(struct pci_dev *pdev, struct kvm *kvm, u32 tdi_id)h](j_ )}(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 )}j j'sbc.pci_tsm_bindasbuh1hhj'ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj1 )}(hj4 h]h*}(hj!(hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hj'ubj)}(hpdevh]hpdev}(hj.(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hj'ubj_ )}(hstruct kvm *kvmh](j)}(hjh]hstruct}(hjG(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC(ubj)}(h h]h }(hjT(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC(ubh)}(hhh]j)}(hkvmh]hkvm}(hje(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjg(modnameN classnameNj j )}j ]j(c.pci_tsm_bindasbuh1hhjC(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC(ubj1 )}(hj4 h]h*}(hj(hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hjC(ubj)}(hkvmh]hkvm}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC(ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hj'ubj_ )}(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&]noemphhhuh1j^ hj'ubeh}(h]h ]h"]h$]h&]hhuh1jX 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)hhhNhNubj)}(h**pdev**h]hpdev}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh as a TDI for }(hj)hhhNhNubj)}(h**kvm**h]hkvm}(hj*)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)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&]jjj jH)j jH)j j j uh1j~hhhj\hNhNubj)}(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]j)}(hjR)h]h Parameters}(hjT)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP)ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMOhjL)ubji)}(hhh](jn)}(h5``struct pci_dev *pdev`` PCI device function to bind h](jt)}(h``struct pci_dev *pdev``h]jz)}(hjq)h]hstruct pci_dev *pdev}(hjs)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjo)ubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMLhjk)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&]uh1jhjk)ubeh}(h]h ]h"]h$]h&]uh1jmhj)hMLhjh)ubjn)}(h2``struct kvm *kvm`` Private memory attach context h](jt)}(h``struct kvm *kvm``h]jz)}(hj)h]hstruct kvm *kvm}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1jshU/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&]uh1jmhj)hMMhjh)ubjn)}(hU``u32 tdi_id`` Identifier (virtual BDF) for the TDI as referenced by the TSM and DSM h](jt)}(h``u32 tdi_id``h]jz)}(hj)h]h u32 tdi_id}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)ubah}(h]h ]h"]h$]h&]uh1jshU/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&]uh1jmhj)hMNhjh)ubeh}(h]h ]h"]h$]h&]uh1jhhjL)ubj)}(h**Description**h]j)}(hj*h]h Description}(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.chMPhjL)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.}(hj4*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMOhjL)ubj)}(h **Context**h]j)}(hjE*h]hContext}(hjG*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC*ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMQhjL)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.}(hj[*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMRhjL)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jzpci_tsm_guest_req (C function)c.pci_tsm_guest_reqhNtauh1jmhj\hhhNhNubj)}(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 ]j )}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{ubjY )}(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](j_ )}(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*ubj1 )}(hj4 h]h*}(hj&+hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hj*ubj)}(hpdevh]hpdev}(hj3+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hj*ubj_ )}(henum pci_tsm_req_scope scopeh](j)}(hj%h]henum}(hjL+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH+ubj)}(h h]h }(hjY+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH+ubh)}(hhh]j)}(hpci_tsm_req_scopeh]hpci_tsm_req_scope}(hjj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjl+modnameN classnameNj j )}j ]j*c.pci_tsm_guest_reqasbuh1hhjH+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH+ubj)}(hscopeh]hscope}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hj*ubj_ )}(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&]noemphhhuh1j^ hj*ubj_ )}(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&]noemphhhuh1j^ hj*ubj_ )}(hsockptr_t req_outh](h)}(hhh]j)}(h sockptr_th]h sockptr_t}(hjB,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjD,modnameN classnameNj j )}j ]j*c.pci_tsm_guest_reqasbuh1hhj;,ubj)}(h h]h }(hj`,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;,ubj)}(hreq_outh]hreq_out}(hjn,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hj*ubj_ )}(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&]noemphhhuh1j^ hj*ubj_ )}(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,ubj1 )}(hj4 h]h*}(hj,hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hj,ubj)}(htsm_codeh]htsm_code}(hj -hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hj*ubeh}(h]h ]h"]h$]h&]hhuh1jX 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}(hj5-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chM{hj2-hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhj*hM{ubeh}(h]h ](jfunctioneh"]h$]h&]jjj jM-j jM-j j j uh1j~hhhj\hNhNubj)}(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]j)}(hjW-h]h Parameters}(hjY-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU-ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhjQ-ubji)}(hhh](jn)}(h;``struct pci_dev *pdev`` **pdev** representing a bound tdi h](jt)}(h``struct pci_dev *pdev``h]jz)}(hjv-h]hstruct pci_dev *pdev}(hjx-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjt-ubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chM|hjp-ubj)}(hhh]j)}(h!**pdev** representing a bound tdih](j)}(h**pdev**h]hpdev}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh representing a bound tdi}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhj-hM|hj-ubah}(h]h ]h"]h$]h&]uh1jhjp-ubeh}(h]h ]h"]h$]h&]uh1jmhj-hM|hjm-ubjn)}(hh``enum pci_tsm_req_scope scope`` caller asserts this passthrough request is limited to TDISP operations h](jt)}(h ``enum pci_tsm_req_scope scope``h]jz)}(hj-h]henum pci_tsm_req_scope scope}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jshU/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&]uh1jmhj-hM}hjm-ubjn)}(h<``sockptr_t req_in`` Input payload forwarded from the guest h](jt)}(h``sockptr_t req_in``h]jz)}(hj-h]hsockptr_t req_in}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-ubah}(h]h ]h"]h$]h&]uh1jshU/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&]uh1jmhj .hM~hjm-ubjn)}(h'``size_t in_len`` Length of **req_in** h](jt)}(h``size_t in_len``h]jz)}(hj/.h]h size_t in_len}(hj1.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj-.ubah}(h]h ]h"]h$]h&]uh1jshU/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 }(hjH.hhhNhNubj)}(h **req_in**h]hreq_in}(hjP.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH.ubeh}(h]h ]h"]h$]h&]uh1jhjD.hMhjE.ubah}(h]h ]h"]h$]h&]uh1jhj).ubeh}(h]h ]h"]h$]h&]uh1jmhjD.hMhjm-ubjn)}(hB``sockptr_t req_out`` Output payload buffer response to the guest h](jt)}(h``sockptr_t req_out``h]jz)}(hjv.h]hsockptr_t req_out}(hjx.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjt.ubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhjp.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&]uh1jhjp.ubeh}(h]h ]h"]h$]h&]uh1jmhj.hMhjm-ubjn)}(hY``size_t out_len`` Length of **req_out** on input, bytes filled in **req_out** on output h](jt)}(h``size_t out_len``h]jz)}(hj.h]hsize_t out_len}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj.ubah}(h]h ]h"]h$]h&]uh1jshU/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.hhhNhNubj)}(h **req_out**h]hreq_out}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh on input, bytes filled in }(hj.hhhNhNubj)}(h **req_out**h]hreq_out}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.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&]uh1jmhj.hMhjm-ubjn)}(hK``u64 *tsm_code`` Optional TSM arch specific result code for the guest TSM h](jt)}(h``u64 *tsm_code``h]jz)}(hj /h]h u64 *tsm_code}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj /ubah}(h]h ]h"]h$]h&]uh1jshU/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}(hj%/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!/hMhj"/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jmhj!/hMhjm-ubeh}(h]h ]h"]h$]h&]uh1jhhjQ-ubj)}(h**Description**h]j)}(hjG/h]h Description}(hjI/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE/ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhjQ-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.}(hj]/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhjQ-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 }(hjl/hhhNhNubj)}(h **req_out**h]hreq_out}(hjt/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl/ubh is filled with less then }(hjl/hhhNhNubj)}(h **out_len**h]hout_len}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl/ubh, or }(hjl/hhhNhNubj)}(h **req_out**h]hreq_out}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl/ubh> is NULL and a residue number of bytes were not consumed from }(hjl/hhhNhNubj)}(h **req_in**h]hreq_in}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl/ubh. On success or failure }(hjl/hhhNhNubj)}(h **tsm_code**h]htsm_code}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl/ubhZ may be populated with a TSM implementation specific result code for the guest to consume.}(hjl/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhjQ-ubj)}(h **Context**h]j)}(hj/h]hContext}(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.chMhjQ-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.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhjQ-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jz$pci_tsm_tdi_constructor (C function)c.pci_tsm_tdi_constructorhNtauh1jmhj\hhhNhNubj)}(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}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhU/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&]uh1jhj0hhhj*0hMubj)}(hpci_tsm_tdi_constructorh]j)}(hpci_tsm_tdi_constructorh]hpci_tsm_tdi_constructor}(hj=0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj90ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj0hhhj*0hMubjY )}(hH(struct pci_dev *pdev, struct pci_tdi *tdi, struct kvm *kvm, u32 tdi_id)h](j_ )}(hstruct pci_dev *pdevh](j)}(hjh]hstruct}(hjY0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU0ubj)}(h h]h }(hjf0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU0ubh)}(hhh]j)}(hpci_devh]hpci_dev}(hjw0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjy0modnameN classnameNj j )}j ]j )}j j?0sbc.pci_tsm_tdi_constructorasbuh1hhjU0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU0ubj1 )}(hj4 h]h*}(hj0hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hjU0ubj)}(hpdevh]hpdev}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU0ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjQ0ubj_ )}(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&]uh1jhj0ubj1 )}(hj4 h]h*}(hj1hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hj0ubj)}(htdih]htdi}(hj"1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjQ0ubj_ )}(hstruct kvm *kvmh](j)}(hjh]hstruct}(hj;1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj71ubj)}(h h]h }(hjH1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj71ubh)}(hhh]j)}(hkvmh]hkvm}(hjY1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[1modnameN classnameNj j )}j ]j0c.pci_tsm_tdi_constructorasbuh1hhj71ubj)}(h h]h }(hjw1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj71ubj1 )}(hj4 h]h*}(hj1hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hj71ubj)}(hkvmh]hkvm}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj71ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hjQ0ubj_ )}(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&]noemphhhuh1j^ hjQ0ubeh}(h]h ]h"]h$]h&]hhuh1jX hj0hhhj*0hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj0hhhj*0hMubah}(h]j0ah ](jjeh"]h$]h&]jj)jhuh1jhj*0hMhj0hhubj)}(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&]uh1jhj0hhhj*0hMubeh}(h]h ](jfunctioneh"]h$]h&]jjj j2j j2j j j uh1j~hhhj\hNhNubj)}(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]j)}(hj&2h]h Parameters}(hj(2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$2ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj 2ubji)}(hhh](jn)}(hB``struct pci_dev *pdev`` PCI device function representing the TDI h](jt)}(h``struct pci_dev *pdev``h]jz)}(hjE2h]hstruct pci_dev *pdev}(hjG2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjC2ubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj?2ubj)}(hhh]j)}(h(PCI device function representing the TDIh]h(PCI device function representing the TDI}(hj^2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ2hMhj[2ubah}(h]h ]h"]h$]h&]uh1jhj?2ubeh}(h]h ]h"]h$]h&]uh1jmhjZ2hMhj<2ubjn)}(h.``struct pci_tdi *tdi`` context to initialize h](jt)}(h``struct pci_tdi *tdi``h]jz)}(hj~2h]hstruct pci_tdi *tdi}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj|2ubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhjx2ubj)}(hhh]j)}(hcontext to initializeh]hcontext to initialize}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhjx2ubeh}(h]h ]h"]h$]h&]uh1jmhj2hMhj<2ubjn)}(h2``struct kvm *kvm`` Private memory attach context h](jt)}(h``struct kvm *kvm``h]jz)}(hj2h]hstruct kvm *kvm}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1jshU/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&]uh1jmhj2hMhj<2ubjn)}(hT``u32 tdi_id`` Identifier (virtual BDF) for the TDI as referenced by the TSM and DSMh](jt)}(h``u32 tdi_id``h]jz)}(hj2h]h u32 tdi_id}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj2ubah}(h]h ]h"]h$]h&]uh1jshU/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}(hj 3hhhNhNubah}(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&]uh1jmhj3hMhj<2ubeh}(h]h ]h"]h$]h&]uh1jhhj 2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jz%pci_tsm_link_constructor (C function)c.pci_tsm_link_constructorhNtauh1jmhj\hhhNhNubj)}(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}(hjJ3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF3hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMubj)}(h h]h }(hjY3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjF3hhhjX3hMubj)}(hpci_tsm_link_constructorh]j)}(hpci_tsm_link_constructorh]hpci_tsm_link_constructor}(hjk3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg3ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjF3hhhjX3hMubjY )}(hD(struct pci_dev *pdev, struct pci_tsm *tsm, struct tsm_dev *tsm_dev)h](j_ )}(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 ]j )}j jm3sbc.pci_tsm_link_constructorasbuh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj1 )}(hj4 h]h*}(hj3hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hj3ubj)}(hpdevh]hpdev}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hj3ubj_ )}(hstruct pci_tsm *tsmh](j)}(hjh]hstruct}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(hpci_tsmh]hpci_tsm}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNj j )}j ]j3c.pci_tsm_link_constructorasbuh1hhj3ubj)}(h h]h }(hj54hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj1 )}(hj4 h]h*}(hjC4hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hj3ubj)}(htsmh]htsm}(hjP4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hj3ubj_ )}(hstruct tsm_dev *tsm_devh](j)}(hjh]hstruct}(hji4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje4ubj)}(h h]h }(hjv4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje4ubh)}(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_constructorasbuh1hhje4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje4ubj1 )}(hj4 h]h*}(hj4hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hje4ubj)}(htsm_devh]htsm_dev}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhje4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hj3ubeh}(h]h ]h"]h$]h&]hhuh1jX hjF3hhhjX3hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjB3hhhjX3hMubah}(h]j=3ah ](jjeh"]h$]h&]jj)jhuh1jhjX3hMhj?3hhubj)}(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&]uh1jhj?3hhhjX3hMubeh}(h]h ](jfunctioneh"]h$]h&]jjj j5j j5j j j uh1j~hhhj\hNhNubj)}(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]j)}(hj 5h]h Parameters}(hj5hhhNhNubah}(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.chMhj5ubji)}(hhh](jn)}(h(``struct pci_dev *pdev`` The PCI device h](jt)}(h``struct pci_dev *pdev``h]jz)}(hj+5h]hstruct pci_dev *pdev}(hj-5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj)5ubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj%5ubj)}(hhh]j)}(hThe PCI deviceh]hThe PCI device}(hjD5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@5hMhjA5ubah}(h]h ]h"]h$]h&]uh1jhj%5ubeh}(h]h ]h"]h$]h&]uh1jmhj@5hMhj"5ubjn)}(h.``struct pci_tsm *tsm`` context to initialize h](jt)}(h``struct pci_tsm *tsm``h]jz)}(hjd5h]hstruct pci_tsm *tsm}(hjf5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjb5ubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj^5ubj)}(hhh]j)}(hcontext to initializeh]hcontext to initialize}(hj}5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy5hMhjz5ubah}(h]h ]h"]h$]h&]uh1jhj^5ubeh}(h]h ]h"]h$]h&]uh1jmhjy5hMhj"5ubjn)}(h[``struct tsm_dev *tsm_dev`` Platform TEE Security Manager, initiator of security operationsh](jt)}(h``struct tsm_dev *tsm_dev``h]jz)}(hj5h]hstruct tsm_dev *tsm_dev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj5ubah}(h]h ]h"]h$]h&]uh1jshU/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&]uh1jmhj5hMhj"5ubeh}(h]h ]h"]h$]h&]uh1jhhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj\hhhNhNubjn)}(hhh]h}(h]h ]h"]h$]h&]entries](jz$pci_tsm_pf0_constructor (C function)c.pci_tsm_pf0_constructorhNtauh1jmhj\hhhNhNubj)}(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}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5hhhj6hMubj)}(hpci_tsm_pf0_constructorh]j)}(hpci_tsm_pf0_constructorh]hpci_tsm_pf0_constructor}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj5hhhj6hMubjY )}(hH(struct pci_dev *pdev, struct pci_tsm_pf0 *tsm, struct tsm_dev *tsm_dev)h](j_ )}(hstruct pci_dev *pdevh](j)}(hjh]hstruct}(hj46hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj06ubj)}(h h]h }(hjA6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj06ubh)}(hhh]j)}(hpci_devh]hpci_dev}(hjR6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjT6modnameN classnameNj j )}j ]j )}j j6sbc.pci_tsm_pf0_constructorasbuh1hhj06ubj)}(h h]h }(hjr6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj06ubj1 )}(hj4 h]h*}(hj6hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hj06ubj)}(hpdevh]hpdev}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj06ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hj,6ubj_ )}(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 ]jn6c.pci_tsm_pf0_constructorasbuh1hhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj1 )}(hj4 h]h*}(hj6hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hj6ubj)}(htsmh]htsm}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hj,6ubj_ )}(hstruct tsm_dev *tsm_devh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(h h]h }(hj#7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubh)}(hhh]j)}(htsm_devh]htsm_dev}(hj47hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj17ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj67modnameN classnameNj j )}j ]jn6c.pci_tsm_pf0_constructorasbuh1hhj7ubj)}(h h]h }(hjR7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj1 )}(hj4 h]h*}(hj`7hhhNhNubah}(h]h ]j= ah"]h$]h&]uh1j0 hj7ubj)}(htsm_devh]htsm_dev}(hjm7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j^ hj,6ubeh}(h]h ]h"]h$]h&]hhuh1jX hj5hhhj6hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj5hhhj6hMubah}(h]j5ah ](jjeh"]h$]h&]jj)jhuh1jhj6hMhj5hhubj)}(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&]uh1jhj5hhhj6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjj j7j j7j j j uh1j~hhhj\hNhNubj)}(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]j)}(hj7h]h Parameters}(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.chMhj7ubji)}(hhh](jn)}(h[``struct pci_dev *pdev`` Physical Function 0 PCI device (as indicated by is_pci_tsm_pf0()) h](jt)}(h``struct pci_dev *pdev``h]jz)}(hj7h]hstruct pci_dev *pdev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj7ubah}(h]h ]h"]h$]h&]uh1jshU/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())}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jmhj7hMhj7ubjn)}(h2``struct pci_tsm_pf0 *tsm`` context to initialize h](jt)}(h``struct pci_tsm_pf0 *tsm``h]jz)}(hj8h]hstruct pci_tsm_pf0 *tsm}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhj8ubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj 8ubj)}(hhh]j)}(hcontext to initializeh]hcontext to initialize}(hj*8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&8hMhj'8ubah}(h]h ]h"]h$]h&]uh1jhj 8ubeh}(h]h ]h"]h$]h&]uh1jmhj&8hMhj7ubjn)}(h[``struct tsm_dev *tsm_dev`` Platform TEE Security Manager, initiator of security operationsh](jt)}(h``struct tsm_dev *tsm_dev``h]jz)}(hjJ8h]hstruct tsm_dev *tsm_dev}(hjL8hhhNhNubah}(h]h ]h"]h$]h&]uh1jyhjH8ubah}(h]h ]h"]h$]h&]uh1jshU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhjD8ubj)}(hhh]j)}(h?Platform TEE Security Manager, initiator of security operationsh]h?Platform TEE Security Manager, initiator of security operations}(hjc8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/driver-api/pci/tsm:106: ./drivers/pci/tsm.chMhj`8ubah}(h]h ]h"]h$]h&]uh1jhjD8ubeh}(h]h ]h"]h$]h&]uh1jmhj_8hMhj7ubeh}(h]h ]h"]h$]h&]uh1jhhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj\hhhNhNubeh}(h]subsystem-interfacesah ]h"]subsystem interfacesah$]h&]uh1jGhjIhhhhhK ubeh}(h]6pci-trusted-execution-environment-security-manager-tsmah ]h"]8pci trusted execution environment security manager (tsm)ah$]h&]uh1jGhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jLN 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_sourceh _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}(hhhhhhj jjjj*jj9j-jHj<jWjKjfjZjujijjxjjjjjjjjjjjjjjjjj jjjj)jj8j,jGj;jVjJjejYjtjhjjwjjjjjjjjjjjjjjjjj jjj j(jj7j+jFj:jUjIjdjXjsjgjjvjjjjjjjjjjjjjjjjj jjj j'jj6j*jEj9jTjHjcjWjrjfjjujjjjjjjjjjjjjjjjjjjj j&jj5j)jDj8usubstitution_names}(amphߌaposhasthbrvbarj bsoljcentj*colonj9commajHcommatjWcopyjfcurrenjudarrjdegjdividejdollarjequalsjexcljfrac12jfrac14jfrac18jfrac34j frac38jfrac58j)frac78j8gtjGhalfjVhorbarjehyphenjtiexcljiquestjlaquojlarrjlcubjldquojlowbarjlparjlsqbjlsquoj ltjmicroj(middotj7nbspjFnotjUnumjdohmjsordfjordmjparajpercntjperiodjplusjplusmnjpoundjquestjquotj raquojrarrj'rcubj6rdquojEregjTrparjcrsqbjrrsquojsectjsemijshyjsoljsungjsup1jsup2jsup3jtimesjtradejuarrj&verbarj5yenjDurefnames}refids}nameids}(j8j8j8j8u nametypes}(j8j8uh}(j8jIj8j\j|jjjj j j j jjjqjvjjjjjKjPjjjjjVj[jjj j j"j"j+$j0$j%j%j'j'j}*j*j0j0j=3jB3j5j5u 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.