€•¡-Œ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/mhi/topology”Œ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/mhi/topology”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/it_IT/mhi/topology”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/ja_JP/mhi/topology”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/ko_KR/mhi/topology”Œ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/mhi/topology”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh£sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1h¡hhhžhhŸŒ:/var/lib/git/docbuild/linux/Documentation/mhi/topology.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ MHI Topology”h]”hŒ MHI Topology”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h KubhŒ paragraph”“”)”}”(hŒdThis document provides information about the MHI topology modeling and representation in the kernel.”h]”hŒdThis document provides information about the MHI topology modeling and representation in the kernel.”…””}”(hhËhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khh¶hžhubhµ)”}”(hhh]”(hº)”}”(hŒMHI Controller”h]”hŒMHI Controller”…””}”(hhÜhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hhÙhžhhŸh³h K ubhÊ)”}”(hX´MHI controller driver manages the interaction with the MHI client devices such as the external modems and WiFi chipsets. It is also the MHI bus master which is in charge of managing the physical link between the host and device. It is however not involved in the actual data transfer as the data transfer is taken care by the physical bus such as PCIe. Each controller driver exposes channels and events based on the client device type.”h]”hX´MHI controller driver manages the interaction with the MHI client devices such as the external modems and WiFi chipsets. It is also the MHI bus master which is in charge of managing the physical link between the host and device. It is however not involved in the actual data transfer as the data transfer is taken care by the physical bus such as PCIe. Each controller driver exposes channels and events based on the client device type.”…””}”(hhêhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hhÙhžhubhÊ)”}”(hŒ1Below are the roles of the MHI controller driver:”h]”hŒ1Below are the roles of the MHI controller driver:”…””}”(hhøhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhhÙhžhubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ@Turns on the physical bus and establishes the link to the device”h]”hÊ)”}”(hjh]”hŒ@Turns on the physical bus and establishes the link to the device”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjhžhhŸh³h Nubj )”}”(hŒ!Configures IRQs, IOMMU, and IOMEM”h]”hÊ)”}”(hj&h]”hŒ!Configures IRQs, IOMMU, and IOMEM”…””}”(hj(hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjhžhhŸh³h Nubj )”}”(hŒAllocates struct mhi_controller and registers with the MHI bus framework with channel and event configurations using mhi_register_controller.”h]”hÊ)”}”(hŒAllocates struct mhi_controller and registers with the MHI bus framework with channel and event configurations using mhi_register_controller.”h]”hŒAllocates struct mhi_controller and registers with the MHI bus framework with channel and event configurations using mhi_register_controller.”…””}”(hj?hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjhžhhŸh³h Nubj )”}”(hŒ(Initiates power on and shutdown sequence”h]”hÊ)”}”(hjUh]”hŒ(Initiates power on and shutdown sequence”…””}”(hjWhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjhžhhŸh³h Nubj )”}”(hŒHInitiates suspend and resume power management operations of the device. ”h]”hÊ)”}”(hŒGInitiates suspend and resume power management operations of the device.”h]”hŒGInitiates suspend and resume power management operations of the device.”…””}”(hjnhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khjjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjhžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1jhŸh³h KhhÙhžhubeh}”(h]”Œmhi-controller”ah ]”h"]”Œmhi controller”ah$]”h&]”uh1h´hh¶hžhhŸh³h K ubhµ)”}”(hhh]”(hº)”}”(hŒ MHI Device”h]”hŒ MHI Device”…””}”(hj•hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj’hžhhŸh³h KubhÊ)”}”(hXBMHI device is the logical device which binds to a maximum of two MHI channels for bi-directional communication. Once MHI is in powered on state, the MHI core will create MHI devices based on the channel configuration exposed by the controller. There can be a single MHI device for each channel or for a couple of channels.”h]”hXBMHI device is the logical device which binds to a maximum of two MHI channels for bi-directional communication. Once MHI is in powered on state, the MHI core will create MHI devices based on the channel configuration exposed by the controller. There can be a single MHI device for each channel or for a couple of channels.”…””}”(hj£hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K hj’hžhubhÊ)”}”(hŒ(Each supported device is enumerated in::”h]”hŒ'Each supported device is enumerated in:”…””}”(hj±hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K&hj’hžhubhŒ literal_block”“”)”}”(hŒ/sys/bus/mhi/devices/”h]”hŒ/sys/bus/mhi/devices/”…””}”hjÁsbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1j¿hŸh³h K(hj’hžhubeh}”(h]”Œ mhi-device”ah ]”h"]”Œ mhi device”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒ MHI Driver”h]”hŒ MHI Driver”…””}”(hjÚhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hj×hžhhŸh³h K+ubhÊ)”}”(hXMHI driver is the client driver which binds to one or more MHI devices. The MHI driver sends and receives the upper-layer protocol packets like IP packets, modem control messages, and diagnostics messages over MHI. The MHI core will bind the MHI devices to the MHI driver.”h]”hXMHI driver is the client driver which binds to one or more MHI devices. The MHI driver sends and receives the upper-layer protocol packets like IP packets, modem control messages, and diagnostics messages over MHI. The MHI core will bind the MHI devices to the MHI driver.”…””}”(hjèhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K-hj×hžhubhÊ)”}”(hŒ(Each supported driver is enumerated in::”h]”hŒ'Each supported driver is enumerated in:”…””}”(hjöhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K2hj×hžhubjÀ)”}”(hŒ/sys/bus/mhi/drivers/”h]”hŒ/sys/bus/mhi/drivers/”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1j¿hŸh³h K4hj×hžhubhÊ)”}”(hŒ&Below are the roles of the MHI driver:”h]”hŒ&Below are the roles of the MHI driver:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K6hj×hžhubj)”}”(hhh]”(j )”}”(hŒJRegisters the driver with the MHI bus framework using mhi_driver_register.”h]”hÊ)”}”(hj%h]”hŒJRegisters the driver with the MHI bus framework using mhi_driver_register.”…””}”(hj'hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K8hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj hžhhŸh³h Nubj )”}”(hŒEPrepares the device for transfer by calling mhi_prepare_for_transfer.”h]”hÊ)”}”(hj<h]”hŒEPrepares the device for transfer by calling mhi_prepare_for_transfer.”…””}”(hj>hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K9hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj hžhhŸh³h Nubj )”}”(hŒ6Initiates data transfer by calling mhi_queue_transfer.”h]”hÊ)”}”(hjSh]”hŒ6Initiates data transfer by calling mhi_queue_transfer.”…””}”(hjUhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K:hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj hžhhŸh³h Nubj )”}”(hŒ[Once the data transfer is finished, calls mhi_unprepare_from_transfer to end data transfer.”h]”hÊ)”}”(hŒ[Once the data transfer is finished, calls mhi_unprepare_from_transfer to end data transfer.”h]”hŒ[Once the data transfer is finished, calls mhi_unprepare_from_transfer to end data transfer.”…””}”(hjlhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K;hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj hžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”jˆj‰uh1jhŸh³h K8hj×hžhubeh}”(h]”Œ mhi-driver”ah ]”h"]”Œ mhi driver”ah$]”h&]”uh1h´hh¶hžhhŸh³h K+ubeh}”(h]”Œ mhi-topology”ah ]”h"]”Œ mhi topology”ah$]”h&]”uh1h´hhhžhhŸh³h Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h³uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(h¹NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j¹Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h³Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j“jjjŒjÔjÑj‹jˆuŒ nametypes”}”(j“‰j‰jÔ‰j‹‰uh}”(jh¶jŒhÙjÑj’jˆ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.