€•p.Œ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ŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ /translations/pt_BR/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:”…””}”(hj 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Þ)”}”(hj#h]”hŒ@Turns on the physical bus and establishes the link to the device”…””}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²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´Khj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²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.”…””}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²hh³hÇh´Nubj )”}”(hŒ(Initiates power on and shutdown sequence”h]”hÞ)”}”(hjih]”hŒ(Initiates power on and shutdown sequence”…””}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²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.”…””}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh²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:”…””}”(hj&h²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Þ)”}”(hj9h]”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´K8hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4h²hh³hÇh´Nubj )”}”(hŒEPrepares the device for transfer by calling mhi_prepare_for_transfer.”h]”hÞ)”}”(hjPh]”hŒEPrepares the device for transfer by calling mhi_prepare_for_transfer.”…””}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K9hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4h²hh³hÇh´Nubj )”}”(hŒ6Initiates data transfer by calling mhi_queue_transfer.”h]”hÞ)”}”(hjgh]”hŒ6Initiates data transfer by calling mhi_queue_transfer.”…””}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K:hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4h²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.”…””}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K;hj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jœjuh1jh³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§j¤j£j jèjåjŸjœuŒ nametypes”}”(j§‰j£‰jè‰jŸ‰uh}”(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.