€•¬.Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”(hhŒparent”hubaŒ 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)”…””}”(hhhh2ubah}”(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”…””}”(hhhhFubah}”(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”…””}”(hhhhZubah}”(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”…””}”(hhhhnubah}”(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”…””}”(hhhh‚ubah}”(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”…””}”(hhhh£ubah}”(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½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Í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Þ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ì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ú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”…””}”(hjhjhž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&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.”…””}”(hjAhj?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”…””}”(hjUhjWhž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.”…””}”(hjphjnhž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—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¥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:”…””}”(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/”…””}”(hhhjÂubah}”(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Ý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ë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:”…””}”(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/”…””}”(hhhjubah}”(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:”…””}”(hjhjhž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'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>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Ê)”}”(hjUh]”hŒ6Initiates data transfer by calling mhi_queue_transfer.”…””}”(hjUhjWhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K:hjSubah}”(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.”…””}”(hjphjnhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K;hjjubah}”(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Œ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”‰Œfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œ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”‰Œ embed_images”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j•j’jjŒjÕjÒjjŠuŒ nametypes”}”(j•NjNjÕNjNuh}”(j’h¶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.