€•3òŒsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ"/translations/zh_CN/driver-api/ntb”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/zh_TW/driver-api/ntb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/it_IT/driver-api/ntb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/ja_JP/driver-api/ntb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/ko_KR/driver-api/ntb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/pt_BR/driver-api/ntb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ"/translations/sp_SP/driver-api/ntb”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ NTB Drivers”h]”hŒ NTB Drivers”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¦hj-h²hubhÌ)�”}”(hŒ7The Tool does not currently have any module parameters.”h]”hŒ7The Tool does not currently have any module parameters.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kªhj-h²hubhÌ)�”}”(hŒDebugfs Files:”h]”hŒDebugfs Files:”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¬hj-h²hubj)�”}”(hhh]”(jÄ)�”}”(hŒ¦*debugfs*/ntb\_tool/*hw*/ A directory in debugfs will be created for each NTB device probed by the tool. This directory is shortened to *hw* below.”h]”jŸ)�”}”(hhh]”j¤)�”}”(hŒ”*debugfs*/ntb\_tool/*hw*/ A directory in debugfs will be created for each NTB device probed by the tool. This directory is shortened to *hw* below.”h]”(jª)�”}”(hŒ*debugfs*/ntb\_tool/*hw*/”h]”(hŒemphasis”“”)�”}”(hŒ *debugfs*”h]”hŒdebugfs”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjvubhŒ /ntb_tool/”…”�”}”(hjvh²hh³Nh´Nubj{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjvubhŒ/”…”�”}”(hjvh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´K°hjrubjº)�”}”(hhh]”hÌ)�”}”(hŒzA directory in debugfs will be created for each NTB device probed by the tool. This directory is shortened to *hw* below.”h]”(hŒoA directory in debugfs will be created for each NTB device probed by the tool. This directory is shortened to ”…”�”}”(hj©h²hh³Nh´Nubj{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj©ubhŒ below.”…”�”}”(hj©h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¯hj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hjrubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´K°hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjhh²hh³Nh´NubjÄ)�”}”(hXZ*hw*/db This file is used to read, set, and clear the local doorbell. Not all operations may be supported by all hardware. To read the doorbell, read the file. To set the doorbell, write `s` followed by the bits to set (eg: `echo 's 0x0101' > db`). To clear the doorbell, write `c` followed by the bits to clear.”h]”jŸ)�”}”(hhh]”j¤)�”}”(hX<*hw*/db This file is used to read, set, and clear the local doorbell. Not all operations may be supported by all hardware. To read the doorbell, read the file. To set the doorbell, write `s` followed by the bits to set (eg: `echo 's 0x0101' > db`). To clear the doorbell, write `c` followed by the bits to clear.”h]”(jª)�”}”(hŒ*hw*/db”h]”(j{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjìubhŒ/db”…”�”}”(hjìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´K¶hjèubjº)�”}”(hhh]”hÌ)�”}”(hX4This file is used to read, set, and clear the local doorbell. Not all operations may be supported by all hardware. To read the doorbell, read the file. To set the doorbell, write `s` followed by the bits to set (eg: `echo 's 0x0101' > db`). To clear the doorbell, write `c` followed by the bits to clear.”h]”(hŒ¶This file is used to read, set, and clear the local doorbell. Not all operations may be supported by all hardware. To read the doorbell, read the file. To set the doorbell, write ”…”�”}”(hj h²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ`s`”h]”hŒs”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ" followed by the bits to set (eg: ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ`echo 's 0x0101' > db`”h]”hŒecho ‘s 0x0101’ > db”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ!). To clear the doorbell, write ”…”�”}”(hj h²hh³Nh´Nubj)�”}”(hŒ`c`”h]”hŒc”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ followed by the bits to clear.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K³hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´K¶hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjhh²hh³Nh´NubjÄ)�”}”(hŒn*hw*/mask This file is used to read, set, and clear the local doorbell mask. See *db* for details.”h]”jŸ)�”}”(hhh]”j¤)�”}”(hŒb*hw*/mask This file is used to read, set, and clear the local doorbell mask. See *db* for details.”h]”(jª)�”}”(hŒ *hw*/mask”h]”(j{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjtubhŒ/mask”…”�”}”(hjth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´K¹hjpubjº)�”}”(hhh]”hÌ)�”}”(hŒXThis file is used to read, set, and clear the local doorbell mask. See *db* for details.”h]”(hŒGThis file is used to read, set, and clear the local doorbell mask. See ”…”�”}”(hj“h²hh³Nh´Nubj{)�”}”(hŒ*db*”h]”hŒdb”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj“ubhŒ for details.”…”�”}”(hj“h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¹hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´K¹hjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjhh²hh³Nh´NubjÄ)�”}”(hŒl*hw*/peer\_db This file is used to read, set, and clear the peer doorbell. See *db* for details.”h]”jŸ)�”}”(hhh]”j¤)�”}”(hŒ`*hw*/peer\_db This file is used to read, set, and clear the peer doorbell. See *db* for details.”h]”(jª)�”}”(hŒ *hw*/peer\_db”h]”(j{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjÖubhŒ /peer_db”…”�”}”(hjÖh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´K¼hjÒubjº)�”}”(hhh]”hÌ)�”}”(hŒRThis file is used to read, set, and clear the peer doorbell. See *db* for details.”h]”(hŒAThis file is used to read, set, and clear the peer doorbell. See ”…”�”}”(hjõh²hh³Nh´Nubj{)�”}”(hŒ*db*”h]”hŒdb”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjõubhŒ for details.”…”�”}”(hjõh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¼hjòubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´K¼hjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjhh²hh³Nh´NubjÄ)�”}”(hŒt*hw*/peer\_mask This file is used to read, set, and clear the peer doorbell mask. See *db* for details.”h]”jŸ)�”}”(hhh]”j¤)�”}”(hŒh*hw*/peer\_mask This file is used to read, set, and clear the peer doorbell mask. See *db* for details.”h]”(jª)�”}”(hŒ*hw*/peer\_mask”h]”(j{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj8ubhŒ /peer_mask”…”�”}”(hj8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´K¿hj4ubjº)�”}”(hhh]”hÌ)�”}”(hŒXThis file is used to read, set, and clear the peer doorbell mask. See *db* for details.”h]”(hŒGThis file is used to read, set, and clear the peer doorbell mask. See ”…”�”}”(hjWh²hh³Nh´Nubj{)�”}”(hŒ*db*”h]”hŒdb”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjWubhŒ for details.”…”�”}”(hjWh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¿hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´K¿hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjhh²hh³Nh´NubjÄ)�”}”(hXK*hw*/spad This file is used to read and write local scratchpads. To read the values of all scratchpads, read the file. To write values, write a series of pairs of scratchpad number and value (eg: `echo '4 0x123 7 0xabc' > spad` # to set scratchpads `4` and `7` to `0x123` and `0xabc`, respectively).”h]”jŸ)�”}”(hhh]”j¤)�”}”(hX-*hw*/spad This file is used to read and write local scratchpads. To read the values of all scratchpads, read the file. To write values, write a series of pairs of scratchpad number and value (eg: `echo '4 0x123 7 0xabc' > spad` # to set scratchpads `4` and `7` to `0x123` and `0xabc`, respectively).”h]”(jª)�”}”(hŒ *hw*/spad”h]”(j{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjšubhŒ/spad”…”�”}”(hjšh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´KÅhj–ubjº)�”}”(hhh]”hÌ)�”}”(hX#This file is used to read and write local scratchpads. To read the values of all scratchpads, read the file. To write values, write a series of pairs of scratchpad number and value (eg: `echo '4 0x123 7 0xabc' > spad` # to set scratchpads `4` and `7` to `0x123` and `0xabc`, respectively).”h]”(hŒ¼This file is used to read and write local scratchpads. To read the values of all scratchpads, read the file. To write values, write a series of pairs of scratchpad number and value (eg: ”…”�”}”(hj¹h²hh³Nh´Nubj)�”}”(hŒ`echo '4 0x123 7 0xabc' > spad`”h]”hŒ!echo ‘4 0x123 7 0xabc’ > spad”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹ubhŒ # to set scratchpads ”…”�”}”(hj¹h²hh³Nh´Nubj)�”}”(hŒ`4`”h]”hŒ4”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹ubhŒ and ”…”�”}”(hj¹h²hh³Nh´Nubj)�”}”(hŒ`7`”h]”hŒ7”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹ubhŒ to ”…”�”}”(hj¹h²hh³Nh´Nubj)�”}”(hŒ`0x123`”h]”hŒ0x123”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹ubhŒ and ”…”�”}”hj¹sbj)�”}”(hŒ`0xabc`”h]”hŒ0xabc”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹ubhŒ, respectively).”…”�”}”(hj¹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÂhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´KÅhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjhh²hh³Nh´NubjÄ)�”}”(hŒk*hw*/peer\_spad This file is used to read and write peer scratchpads. See *spad* for details. ”h]”jŸ)�”}”(hhh]”j¤)�”}”(hŒ_*hw*/peer\_spad This file is used to read and write peer scratchpads. See *spad* for details. ”h]”(jª)�”}”(hŒ*hw*/peer\_spad”h]”(j{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjDubhŒ /peer_spad”…”�”}”(hjDh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´KÉhj@ubjº)�”}”(hhh]”hÌ)�”}”(hŒNThis file is used to read and write peer scratchpads. See *spad* for details.”h]”(hŒ;This file is used to read and write peer scratchpads. See ”…”�”}”(hjch²hh³Nh´Nubj{)�”}”(hŒ*spad*”h]”hŒspad”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjcubhŒ for details.”…”�”}”(hjch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÈhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´KÉhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjhh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j#j$uh1jh³hÊh´K®hj-h²hubeh}”(h]”Œntb-tool-test-client-ntb-tool”ah ]”h"]”Œntb tool test client (ntb_tool)”ah$]”h&]”uh1hµhjh²hh³hÊh´K¤ubh¶)�”}”(hhh]”(h»)�”}”(hŒ$NTB MSI Test Client (ntb\_msi\_test)”h]”hŒ$NTB MSI Test Client (ntb_msi_test)”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj©h²hh³hÊh´KÌubhÌ)�”}”(hŒÂThe MSI test client serves to test and debug the MSI library which allows for passing MSI interrupts across NTB memory windows. The test client is interacted with through the debugfs filesystem:”h]”hŒÂThe MSI test client serves to test and debug the MSI library which allows for passing MSI interrupts across NTB memory windows. The test client is interacted with through the debugfs filesystem:”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÎhj©h²hubj)�”}”(hhh]”(jÄ)�”}”(hŒ¯*debugfs*/ntb\_msi\_test/*hw*/ A directory in debugfs will be created for each NTB device probed by the msi test. This directory is shortened to *hw* below.”h]”jŸ)�”}”(hhh]”j¤)�”}”(hŒ�*debugfs*/ntb\_msi\_test/*hw*/ A directory in debugfs will be created for each NTB device probed by the msi test. This directory is shortened to *hw* below.”h]”(jª)�”}”(hŒ*debugfs*/ntb\_msi\_test/*hw*/”h]”(j{)�”}”(hŒ *debugfs*”h]”hŒdebugfs”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjÖubhŒ/ntb_msi_test/”…”�”}”(hjÖh²hh³Nh´Nubj{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjÖubhŒ/”…”�”}”(hjÖh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´KÔhjÒubjº)�”}”(hhh]”hÌ)�”}”(hŒ~A directory in debugfs will be created for each NTB device probed by the msi test. This directory is shortened to *hw* below.”h]”(hŒsA directory in debugfs will be created for each NTB device probed by the msi test. This directory is shortened to ”…”�”}”(hj h²hh³Nh´Nubj{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj ubhŒ below.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÓhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´KÔhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÈh²hh³Nh´NubjÄ)�”}”(hŒ9*hw*/port This file describes the local port number”h]”jŸ)�”}”(hhh]”j¤)�”}”(hŒ3*hw*/port This file describes the local port number”h]”(jª)�”}”(hŒ *hw*/port”h]”(j{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjJ ubhŒ/port”…”�”}”(hjJ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´KÖhjF ubjº)�”}”(hhh]”hÌ)�”}”(hŒ)This file describes the local port number”h]”hŒ)This file describes the local port number”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K×hjf ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hjF ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´KÖhjC ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhj? ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÈh²hh³Nh´NubjÄ)�”}”(hŒž*hw*/irq*_occurrences One occurrences file exists for each interrupt and, when read, returns the number of times the interrupt has been triggered.”h]”jŸ)�”}”(hhh]”j¤)�”}”(hŒ’*hw*/irq*_occurrences One occurrences file exists for each interrupt and, when read, returns the number of times the interrupt has been triggered.”h]”(jª)�”}”(hŒ*hw*/irq*_occurrences”h]”(j{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjš ubhŒ/irq*_occurrences”…”�”}”(hjš h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´KÙhj– ubjº)�”}”(hhh]”hÌ)�”}”(hŒ|One occurrences file exists for each interrupt and, when read, returns the number of times the interrupt has been triggered.”h]”hŒ|One occurrences file exists for each interrupt and, when read, returns the number of times the interrupt has been triggered.”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÙhj¶ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj– ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´KÙhj“ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÈh²hh³Nh´NubjÄ)�”}”(hŒG*hw*/peer*/port This file describes the port number for each peer”h]”jŸ)�”}”(hhh]”j¤)�”}”(hŒA*hw*/peer*/port This file describes the port number for each peer”h]”(jª)�”}”(hŒ*hw*/peer*/port”h]”(j{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjê ubhŒ /peer*/port”…”�”}”(hjê h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´KÛhjæ ubjº)�”}”(hhh]”hÌ)�”}”(hŒ1This file describes the port number for each peer”h]”hŒ1This file describes the port number for each peer”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÜhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hjæ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´KÛhjã ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhjß ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÈh²hh³Nh´NubjÄ)�”}”(hŒl*hw*/peer*/count This file describes the number of interrupts that can be triggered on each peer”h]”jŸ)�”}”(hhh]”j¤)�”}”(hŒ`*hw*/peer*/count This file describes the number of interrupts that can be triggered on each peer”h]”(jª)�”}”(hŒ*hw*/peer*/count”h]”(j{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj: ubhŒ /peer*/count”…”�”}”(hj: h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´KÞhj6 ubjº)�”}”(hhh]”hÌ)�”}”(hŒOThis file describes the number of interrupts that can be triggered on each peer”h]”hŒOThis file describes the number of interrupts that can be triggered on each peer”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÞhjV ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj6 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´KÞhj3 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhj/ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÈh²hh³Nh´NubjÄ)�”}”(hŒì*hw*/peer*/trigger Writing an interrupt number (any number less than the value specified in count) will trigger the interrupt on the specified peer. That peer's interrupt's occurrence file should be incremented. ”h]”jŸ)�”}”(hhh]”j¤)�”}”(hŒÔ*hw*/peer*/trigger Writing an interrupt number (any number less than the value specified in count) will trigger the interrupt on the specified peer. That peer's interrupt's occurrence file should be incremented. ”h]”(jª)�”}”(hŒ*hw*/peer*/trigger”h]”(j{)�”}”(hŒ*hw*”h]”hŒhw”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjŠ ubhŒ/peer*/trigger”…”�”}”(hjŠ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´Kähj† ubjº)�”}”(hhh]”hÌ)�”}”(hŒÀWriting an interrupt number (any number less than the value specified in count) will trigger the interrupt on the specified peer. That peer's interrupt's occurrence file should be incremented.”h]”hŒÄWriting an interrupt number (any number less than the value specified in count) will trigger the interrupt on the specified peer. That peer’s interrupt’s occurrence file should be incremented.”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Káhj¦ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj† ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´Kähjƒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjÈh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j#j$uh1jh³hÊh´KÒhj©h²hubeh}”(h]”Œ ntb-msi-test-client-ntb-msi-test”ah ]”h"]”Œ"ntb msi test client (ntb_msi_test)”ah$]”h&]”uh1hµhjh²hh³hÊh´KÌubeh}”(h]”Œntb-client-drivers”ah ]”h"]”Œntb client drivers”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒNTB Hardware Drivers”h]”hŒNTB Hardware Drivers”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjå h²hh³hÊh´KçubhÌ)�”}”(hŒ�NTB hardware drivers should register devices with the NTB core driver. After registering, clients probe and remove functions will be called.”h]”hŒ�NTB hardware drivers should register devices with the NTB core driver. After registering, clients probe and remove functions will be called.”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kéhjå h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ*NTB Intel Hardware Driver (ntb\_hw\_intel)”h]”hŒ*NTB Intel Hardware Driver (ntb_hw_intel)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´KíubhÌ)�”}”(hŒ=The Intel hardware driver supports NTB on Xeon and Atom CPUs.”h]”hŒ=The Intel hardware driver supports NTB on Xeon and Atom CPUs.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kïhj h²hubhÌ)�”}”(hŒModule Parameters:”h]”hŒModule Parameters:”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kñhj h²hubj)�”}”(hhh]”(jÄ)�”}”(hXHb2b\_mw\_idx If the peer ntb is to be accessed via a memory window, then use this memory window to access the peer ntb. A value of zero or positive starts from the first mw idx, and a negative value starts from the last mw idx. Both sides MUST set the same value here! The default value is `-1`.”h]”jŸ)�”}”(hhh]”j¤)�”}”(hX*b2b\_mw\_idx If the peer ntb is to be accessed via a memory window, then use this memory window to access the peer ntb. A value of zero or positive starts from the first mw idx, and a negative value starts from the last mw idx. Both sides MUST set the same value here! The default value is `-1`.”h]”(jª)�”}”(hŒ b2b\_mw\_idx”h]”hŒ b2b_mw_idx”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´K÷hj; ubjº)�”}”(hhh]”hÌ)�”}”(hXIf the peer ntb is to be accessed via a memory window, then use this memory window to access the peer ntb. A value of zero or positive starts from the first mw idx, and a negative value starts from the last mw idx. Both sides MUST set the same value here! The default value is `-1`.”h]”(hXIf the peer ntb is to be accessed via a memory window, then use this memory window to access the peer ntb. A value of zero or positive starts from the first mw idx, and a negative value starts from the last mw idx. Both sides MUST set the same value here! The default value is ”…”�”}”(hjP h²hh³Nh´Nubj)�”}”(hŒ`-1`”h]”hŒ-1”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjP ubhŒ.”…”�”}”(hjP h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KôhjM ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj; ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´K÷hj8 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhj4 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj1 h²hh³Nh´NubjÄ)�”}”(hŒéb2b\_mw\_share If the peer ntb is to be accessed via a memory window, and if the memory window is large enough, still allow the client to use the second half of the memory window for address translation to the peer.”h]”jŸ)�”}”(hhh]”j¤)�”}”(hŒ×b2b\_mw\_share If the peer ntb is to be accessed via a memory window, and if the memory window is large enough, still allow the client to use the second half of the memory window for address translation to the peer.”h]”(jª)�”}”(hŒb2b\_mw\_share”h]”hŒb2b_mw_share”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´Kûhj� ubjº)�”}”(hhh]”hÌ)�”}”(hŒÈIf the peer ntb is to be accessed via a memory window, and if the memory window is large enough, still allow the client to use the second half of the memory window for address translation to the peer.”h]”hŒÈIf the peer ntb is to be accessed via a memory window, and if the memory window is large enough, still allow the client to use the second half of the memory window for address translation to the peer.”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kúhj¡ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´KûhjŒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhjˆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj1 h²hh³Nh´NubjÄ)�”}”(hŒËxeon\_b2b\_usd\_bar2\_addr64 If using B2B topology on Xeon hardware, use this 64 bit address on the bus between the NTB devices for the window at BAR2, on the upstream side of the link.”h]”jŸ)�”}”(hhh]”j¤)�”}”(hŒ¹xeon\_b2b\_usd\_bar2\_addr64 If using B2B topology on Xeon hardware, use this 64 bit address on the bus between the NTB devices for the window at BAR2, on the upstream side of the link.”h]”(jª)�”}”(hŒxeon\_b2b\_usd\_bar2\_addr64”h]”hŒxeon_b2b_usd_bar2_addr64”…”�”}”(hjÕ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j©h³hÊh´KÿhjÑ ubjº)�”}”(hhh]”hÌ)�”}”(hŒœIf using B2B topology on Xeon hardware, use this 64 bit address on the bus between the NTB devices for the window at BAR2, on the upstream side of the link.”h]”hŒœIf using B2B topology on Xeon hardware, use this 64 bit address on the bus between the NTB devices for the window at BAR2, on the upstream side of the link.”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kþhjã ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hjÑ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£h³hÊh´KÿhjÎ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jžhjÊ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj1 h²hh³Nh´NubjÄ)�”}”(hŒ=xeon\_b2b\_usd\_bar4\_addr64 - See *xeon\_b2b\_bar2\_addr64*.”h]”hÌ)�”}”(hj h]”(hŒ#xeon_b2b_usd_bar4_addr64 - See ”…”�”}”(hj h²hh³Nh´Nubj{)�”}”(hŒ*xeon\_b2b\_bar2\_addr64*”h]”hŒxeon_b2b_bar2_addr64”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj ubhŒ.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj1 h²hh³hÊh´NubjÄ)�”}”(hŒ=xeon\_b2b\_usd\_bar4\_addr32 - See *xeon\_b2b\_bar2\_addr64*.”h]”hÌ)�”}”(hj7 h]”(hŒ#xeon_b2b_usd_bar4_addr32 - See ”…”�”}”(hj9 h²hh³Nh´Nubj{)�”}”(hŒ*xeon\_b2b\_bar2\_addr64*”h]”hŒxeon_b2b_bar2_addr64”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj9 ubhŒ.”…”�”}”(hj9 h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj1 h²hh³hÊh´NubjÄ)�”}”(hŒ=xeon\_b2b\_usd\_bar5\_addr32 - See *xeon\_b2b\_bar2\_addr64*.”h]”hÌ)�”}”(hj` h]”(hŒ#xeon_b2b_usd_bar5_addr32 - See ”…”�”}”(hjb h²hh³Nh´Nubj{)�”}”(hŒ*xeon\_b2b\_bar2\_addr64*”h]”hŒxeon_b2b_bar2_addr64”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjb ubhŒ.”…”�”}”(hjb h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj^ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj1 h²hh³hÊh´NubjÄ)�”}”(hŒ=xeon\_b2b\_dsd\_bar2\_addr64 - See *xeon\_b2b\_bar2\_addr64*.”h]”hÌ)�”}”(hj‰ h]”(hŒ#xeon_b2b_dsd_bar2_addr64 - See ”…”�”}”(hj‹ h²hh³Nh´Nubj{)�”}”(hŒ*xeon\_b2b\_bar2\_addr64*”h]”hŒxeon_b2b_bar2_addr64”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj‹ ubhŒ.”…”�”}”(hj‹ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj‡ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj1 h²hh³hÊh´NubjÄ)�”}”(hŒ=xeon\_b2b\_dsd\_bar4\_addr64 - See *xeon\_b2b\_bar2\_addr64*.”h]”hÌ)�”}”(hj² h]”(hŒ#xeon_b2b_dsd_bar4_addr64 - See ”…”�”}”(hj´ h²hh³Nh´Nubj{)�”}”(hŒ*xeon\_b2b\_bar2\_addr64*”h]”hŒxeon_b2b_bar2_addr64”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj´ ubhŒ.”…”�”}”(hj´ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj1 h²hh³hÊh´NubjÄ)�”}”(hŒ=xeon\_b2b\_dsd\_bar4\_addr32 - See *xeon\_b2b\_bar2\_addr64*.”h]”hÌ)�”}”(hjÛ h]”(hŒ#xeon_b2b_dsd_bar4_addr32 - See ”…”�”}”(hjÝ h²hh³Nh´Nubj{)�”}”(hŒ*xeon\_b2b\_bar2\_addr64*”h]”hŒxeon_b2b_bar2_addr64”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhjÝ ubhŒ.”…”�”}”(hjÝ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjÙ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj1 h²hh³hÊh´NubjÄ)�”}”(hŒ=xeon\_b2b\_dsd\_bar5\_addr32 - See *xeon\_b2b\_bar2\_addr64*.”h]”hÌ)�”}”(hj h]”(hŒ#xeon_b2b_dsd_bar5_addr32 - See ”…”�”}”(hj h²hh³Nh´Nubj{)�”}”(hŒ*xeon\_b2b\_bar2\_addr64*”h]”hŒxeon_b2b_bar2_addr64”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jzhj ubhŒ.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÃhj1 h²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j#j$uh1jh³hÊh´Kóhj h²hubeh}”(h]”Œ&ntb-intel-hardware-driver-ntb-hw-intel”ah ]”h"]”Œ(ntb intel hardware driver (ntb_hw_intel)”ah$]”h&]”uh1hµhjå h²hh³hÊh´Kíubeh}”(h]”Œntb-hardware-drivers”ah ]”h"]”Œntb hardware drivers”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kçubeh}”(h]”Œ ntb-drivers”ah ]”h"]”Œ ntb drivers”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jl Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jF jC hÿhüjâ jß j¹j¶jàjÝj*j'j¦j£jÚ j× j> j; j6 j3 uŒ nametypes”}”(jF ‰hÿ‰jâ ‰j¹‰jà‰j*‰j¦‰jÚ ‰j> ‰j6 ‰uh}”(jC h·hühÛjß jj¶j!jÝj¼j'jãj£j-j× j©j; jå j3 j uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.