€•¹ÓŒ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/rapidio/rapidio”Œ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/rapidio/rapidio”Œ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/rapidio/rapidio”Œ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/rapidio/rapidio”Œ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/rapidio/rapidio”Œ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/rapidio/rapidio”Œ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/rapidio/rapidio”Œ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Œ Introduction”h]”hŒ Introduction”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒH/var/lib/git/docbuild/linux/Documentation/driver-api/rapidio/rapidio.rst”h´KubhŒ paragraph”“”)”}”(hX0The RapidIO standard is a packet-based fabric interconnect standard designed for use in embedded systems. Development of the RapidIO standard is directed by the RapidIO Trade Association (RTA). The current version of the RapidIO specification is publicly available for download from the RTA web-site [1].”h]”hX0The RapidIO standard is a packet-based fabric interconnect standard designed for use in embedded systems. Development of the RapidIO standard is directed by the RapidIO Trade Association (RTA). The current version of the RapidIO specification is publicly available for download from the RTA web-site [1].”…””}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)”}”(hŒsThis document describes the basics of the Linux RapidIO subsystem and provides information on its major components.”h]”hŒsThis document describes the basics of the Linux RapidIO subsystem and provides information on its major components.”…””}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubh¶)”}”(hhh]”(h»)”}”(hŒ 1 Overview”h]”hŒ 1 Overview”…””}”(hhìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhéh²hh³hÊh´KubhÌ)”}”(hŒÖBecause the RapidIO subsystem follows the Linux device model it is integrated into the kernel similarly to other buses by defining RapidIO-specific device and bus types and registering them within the device model.”h]”hŒÖBecause the RapidIO subsystem follows the Linux device model it is integrated into the kernel similarly to other buses by defining RapidIO-specific device and bus types and registering them within the device model.”…””}”(hhúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhéh²hubhÌ)”}”(hŒ¬The Linux RapidIO subsystem is architecture independent and therefore defines architecture-specific interfaces that provide support for common RapidIO subsystem operations.”h]”hŒ¬The Linux RapidIO subsystem is architecture independent and therefore defines architecture-specific interfaces that provide support for common RapidIO subsystem operations.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhéh²hubeh}”(h]”Œoverview”ah ]”h"]”Œ 1 overview”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒ2. Core Components”h]”hŒ2. Core Components”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KubhÌ)”}”(hŒýA typical RapidIO network is a combination of endpoints and switches. Each of these components is represented in the subsystem by an associated data structure. The core logical components of the RapidIO subsystem are defined in include/linux/rio.h file.”h]”hŒýA typical RapidIO network is a combination of endpoints and switches. Each of these components is represented in the subsystem by an associated data structure. The core logical components of the RapidIO subsystem are defined in include/linux/rio.h file.”…””}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khjh²hubh¶)”}”(hhh]”(h»)”}”(hŒ2.1 Master Port”h]”hŒ2.1 Master Port”…””}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj=h²hh³hÊh´K!ubhÌ)”}”(hXãA master port (or mport) is a RapidIO interface controller that is local to the processor executing the Linux code. A master port generates and receives RapidIO packets (transactions). In the RapidIO subsystem each master port is represented by a rio_mport data structure. This structure contains master port specific resources such as mailboxes and doorbells. The rio_mport also includes a unique host device ID that is valid when a master port is configured as an enumerating host.”h]”hXãA master port (or mport) is a RapidIO interface controller that is local to the processor executing the Linux code. A master port generates and receives RapidIO packets (transactions). In the RapidIO subsystem each master port is represented by a rio_mport data structure. This structure contains master port specific resources such as mailboxes and doorbells. The rio_mport also includes a unique host device ID that is valid when a master port is configured as an enumerating host.”…””}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K#hj=h²hubhÌ)”}”(hXXRapidIO master ports are serviced by subsystem specific mport device drivers that provide functionality defined for this subsystem. To provide a hardware independent interface for RapidIO subsystem operations, rio_mport structure includes rio_ops data structure which contains pointers to hardware specific implementations of RapidIO functions.”h]”hXXRapidIO master ports are serviced by subsystem specific mport device drivers that provide functionality defined for this subsystem. To provide a hardware independent interface for RapidIO subsystem operations, rio_mport structure includes rio_ops data structure which contains pointers to hardware specific implementations of RapidIO functions.”…””}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K+hj=h²hubeh}”(h]”Œ master-port”ah ]”h"]”Œ2.1 master port”ah$]”h&]”uh1hµhjh²hh³hÊh´K!ubh¶)”}”(hhh]”(h»)”}”(hŒ 2.2 Device”h]”hŒ 2.2 Device”…””}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjrh²hh³hÊh´K2ubhÌ)”}”(hX"A RapidIO device is any endpoint (other than mport) or switch in the network. All devices are presented in the RapidIO subsystem by corresponding rio_dev data structure. Devices form one global device list and per-network device lists (depending on number of available mports and networks).”h]”hX"A RapidIO device is any endpoint (other than mport) or switch in the network. All devices are presented in the RapidIO subsystem by corresponding rio_dev data structure. Devices form one global device list and per-network device lists (depending on number of available mports and networks).”…””}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K4hjrh²hubeh}”(h]”Œdevice”ah ]”h"]”Œ 2.2 device”ah$]”h&]”uh1hµhjh²hh³hÊh´K2ubh¶)”}”(hhh]”(h»)”}”(hŒ 2.3 Switch”h]”hŒ 2.3 Switch”…””}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj™h²hh³hÊh´K:ubhÌ)”}”(hX¼A RapidIO switch is a special class of device that routes packets between its ports towards their final destination. The packet destination port within a switch is defined by an internal routing table. A switch is presented in the RapidIO subsystem by rio_dev data structure expanded by additional rio_switch data structure, which contains switch specific information such as copy of the routing table and pointers to switch specific functions.”h]”hX¼A RapidIO switch is a special class of device that routes packets between its ports towards their final destination. The packet destination port within a switch is defined by an internal routing table. A switch is presented in the RapidIO subsystem by rio_dev data structure expanded by additional rio_switch data structure, which contains switch specific information such as copy of the routing table and pointers to switch specific functions.”…””}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K(a) Statically linked enumeration and discovery process can be started automatically during kernel initialization time using corresponding module parameters. This was the original method used since introduction of RapidIO subsystem. Now this method relies on enumerator module parameter which is 'rio-scan.scan' for existing basic enumeration/discovery method. When automatic start of enumeration/discovery is used a user has to ensure that all discovering endpoints are started before the enumerating endpoint and are waiting for enumeration to be completed. Configuration option CONFIG_RAPIDIO_DISC_TIMEOUT defines time that discovering endpoint waits for enumeration to be completed. If the specified timeout expires the discovery process is terminated without obtaining RapidIO network information. NOTE: a timed out discovery process may be restarted later using a user-space command as it is described below (if the given endpoint was enumerated successfully). (b) Statically linked enumeration and discovery process can be started by a command from user space. This initiation method provides more flexibility for a system startup compared to the option (a) above. After all participating endpoints have been successfully booted, an enumeration process shall be started first by issuing a user-space command, after an enumeration is completed a discovery process can be started on all remaining endpoints. (c) Modular enumeration and discovery process can be started by a command from user space. After an enumeration/discovery module is loaded, a network scan process can be started by issuing a user-space command. Similar to the option (b) above, an enumerator has to be started first. (d) Modular enumeration and discovery process can be started by a module initialization routine. In this case an enumerating module shall be loaded first. ”h]”(hÌ)”}”(hXÆ(a) Statically linked enumeration and discovery process can be started automatically during kernel initialization time using corresponding module parameters. This was the original method used since introduction of RapidIO subsystem. Now this method relies on enumerator module parameter which is 'rio-scan.scan' for existing basic enumeration/discovery method. When automatic start of enumeration/discovery is used a user has to ensure that all discovering endpoints are started before the enumerating endpoint and are waiting for enumeration to be completed. Configuration option CONFIG_RAPIDIO_DISC_TIMEOUT defines time that discovering endpoint waits for enumeration to be completed. If the specified timeout expires the discovery process is terminated without obtaining RapidIO network information. NOTE: a timed out discovery process may be restarted later using a user-space command as it is described below (if the given endpoint was enumerated successfully).”h]”hXÊ(a) Statically linked enumeration and discovery process can be started automatically during kernel initialization time using corresponding module parameters. This was the original method used since introduction of RapidIO subsystem. Now this method relies on enumerator module parameter which is ‘rio-scan.scan’ for existing basic enumeration/discovery method. When automatic start of enumeration/discovery is used a user has to ensure that all discovering endpoints are started before the enumerating endpoint and are waiting for enumeration to be completed. Configuration option CONFIG_RAPIDIO_DISC_TIMEOUT defines time that discovering endpoint waits for enumeration to be completed. If the specified timeout expires the discovery process is terminated without obtaining RapidIO network information. NOTE: a timed out discovery process may be restarted later using a user-space command as it is described below (if the given endpoint was enumerated successfully).”…””}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K€hjÎubhÌ)”}”(hX½(b) Statically linked enumeration and discovery process can be started by a command from user space. This initiation method provides more flexibility for a system startup compared to the option (a) above. After all participating endpoints have been successfully booted, an enumeration process shall be started first by issuing a user-space command, after an enumeration is completed a discovery process can be started on all remaining endpoints.”h]”hX½(b) Statically linked enumeration and discovery process can be started by a command from user space. This initiation method provides more flexibility for a system startup compared to the option (a) above. After all participating endpoints have been successfully booted, an enumeration process shall be started first by issuing a user-space command, after an enumeration is completed a discovery process can be started on all remaining endpoints.”…””}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjÎubhÌ)”}”(hX(c) Modular enumeration and discovery process can be started by a command from user space. After an enumeration/discovery module is loaded, a network scan process can be started by issuing a user-space command. Similar to the option (b) above, an enumerator has to be started first.”h]”hX(c) Modular enumeration and discovery process can be started by a command from user space. After an enumeration/discovery module is loaded, a network scan process can be started by issuing a user-space command. Similar to the option (b) above, an enumerator has to be started first.”…””}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K–hjÎubhÌ)”}”(hŒš(d) Modular enumeration and discovery process can be started by a module initialization routine. In this case an enumerating module shall be loaded first.”h]”hŒš(d) Modular enumeration and discovery process can be started by a module initialization routine. In this case an enumerating module shall be loaded first.”…””}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K›hjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌh³hÊh´K€hjŸh²hubhÌ)”}”(hŒ•When a network scan process is started it calls an enumeration or discovery routine depending on the configured role of a master port: host or agent.”h]”hŒ•When a network scan process is started it calls an enumeration or discovery routine depending on the configured role of a master port: host or agent.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KŸhjŸh²hubhÌ)”}”(hXEnumeration is performed by a master port if it is configured as a host port by assigning a host destination ID greater than or equal to zero. The host destination ID can be assigned to a master port using various methods depending on RapidIO subsystem build configuration:”h]”hXEnumeration is performed by a master port if it is configured as a host port by assigning a host destination ID greater than or equal to zero. The host destination ID can be assigned to a master port using various methods depending on RapidIO subsystem build configuration:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¢hjŸh²hubjÍ)”}”(hX(a) For a statically linked RapidIO subsystem core use command line parameter "rapidio.hdid=" with a list of destination ID assignments in order of mport device registration. For example, in a system with two RapidIO controllers the command line parameter "rapidio.hdid=-1,7" will result in assignment of the host destination ID=7 to the second RapidIO controller, while the first one will be assigned destination ID=-1. (b) If the RapidIO subsystem core is built as a loadable module, in addition to the method shown above, the host destination ID(s) can be specified using traditional methods of passing module parameter "hdid=" during its loading: - from command line: "modprobe rapidio hdid=-1,7", or - from modprobe configuration file using configuration command "options", like in this example: "options rapidio hdid=-1,7". An example of modprobe configuration file is provided in the section below. ”h]”(hÌ)”}”(hX¤(a) For a statically linked RapidIO subsystem core use command line parameter "rapidio.hdid=" with a list of destination ID assignments in order of mport device registration. For example, in a system with two RapidIO controllers the command line parameter "rapidio.hdid=-1,7" will result in assignment of the host destination ID=7 to the second RapidIO controller, while the first one will be assigned destination ID=-1.”h]”hX¬(a) For a statically linked RapidIO subsystem core use command line parameter “rapidio.hdid=†with a list of destination ID assignments in order of mport device registration. For example, in a system with two RapidIO controllers the command line parameter “rapidio.hdid=-1,7†will result in assignment of the host destination ID=7 to the second RapidIO controller, while the first one will be assigned destination ID=-1.”…””}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K§hj,ubhÌ)”}”(hŒå(b) If the RapidIO subsystem core is built as a loadable module, in addition to the method shown above, the host destination ID(s) can be specified using traditional methods of passing module parameter "hdid=" during its loading:”h]”hŒé(b) If the RapidIO subsystem core is built as a loadable module, in addition to the method shown above, the host destination ID(s) can be specified using traditional methods of passing module parameter “hdid=†during its loading:”…””}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K®hj,ubhŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ3from command line: "modprobe rapidio hdid=-1,7", or”h]”hÌ)”}”(hjUh]”hŒ7from command line: “modprobe rapidio hdid=-1,7â€, or”…””}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K²hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjNubjR)”}”(hŒÇfrom modprobe configuration file using configuration command "options", like in this example: "options rapidio hdid=-1,7". An example of modprobe configuration file is provided in the section below. ”h]”hÌ)”}”(hŒÆfrom modprobe configuration file using configuration command "options", like in this example: "options rapidio hdid=-1,7". An example of modprobe configuration file is provided in the section below.”h]”hŒÎfrom modprobe configuration file using configuration command “optionsâ€, like in this example: “options rapidio hdid=-1,7â€. An example of modprobe configuration file is provided in the section below.”…””}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K³hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jQhjNubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jLh³hÊh´K²hj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÌh³hÊh´K§hjŸh²hubhŒdefinition_list”“”)”}”(hhh]”hŒdefinition_list_item”“”)”}”(hŒòNOTES: (i) if "hdid=" parameter is omitted all available mport will be assigned destination ID = -1; (ii) the "hdid=" parameter in systems with multiple mports can have destination ID assignments omitted from the end of list (default = -1). ”h]”(hŒterm”“”)”}”(hŒNOTES:”h]”hŒNOTES:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j›h³hÊh´K¼hj—ubhŒ definition”“”)”}”(hhh]”(hÌ)”}”(hŒ](i) if "hdid=" parameter is omitted all available mport will be assigned destination ID = -1;”h]”hŒa(i) if “hdid=†parameter is omitted all available mport will be assigned destination ID = -1;”…””}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¸hj­ubhÌ)”}”(hŒ‹(ii) the "hdid=" parameter in systems with multiple mports can have destination ID assignments omitted from the end of list (default = -1).”h]”hŒ(ii) the “hdid=†parameter in systems with multiple mports can have destination ID assignments omitted from the end of list (default = -1).”…””}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K»hj­ubeh}”(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&]”uh1jhjŸh²hh³hÊh´NubhÌ)”}”(hŒnIf the host device ID for a specific master port is set to -1, the discovery process will be performed for it.”h]”hŒnIf the host device ID for a specific master port is set to -1, the discovery process will be performed for it.”…””}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¾hjŸh²hubhÌ)”}”(hŒyThe enumeration and discovery routines use RapidIO maintenance transactions to access the configuration space of devices.”h]”hŒyThe enumeration and discovery routines use RapidIO maintenance transactions to access the configuration space of devices.”…””}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÁhjŸh²hubhÌ)”}”(hX NOTE: If RapidIO switch-specific device drivers are built as loadable modules they must be loaded before enumeration/discovery process starts. This requirement is cased by the fact that enumeration/discovery methods invoke vendor-specific callbacks on early stages.”h]”hX NOTE: If RapidIO switch-specific device drivers are built as loadable modules they must be loaded before enumeration/discovery process starts. This requirement is cased by the fact that enumeration/discovery methods invoke vendor-specific callbacks on early stages.”…””}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÄhjŸh²hubeh}”(h]”Œid1”ah ]”h"]”Œ 4.1 overview”ah$]”h&]”uh1hµhjŽh²hh³hÊh´Kuubh¶)”}”(hhh]”(h»)”}”(hŒ04.2 Automatic Start of Enumeration and Discovery”h]”hŒ04.2 Automatic Start of Enumeration and Discovery”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´KÊubhÌ)”}”(hX Automatic enumeration/discovery start method is applicable only to built-in enumeration/discovery RapidIO configuration selection. To enable automatic enumeration/discovery start by existing basic enumerator method set use boot command line parameter "rio-scan.scan=1".”h]”hXAutomatic enumeration/discovery start method is applicable only to built-in enumeration/discovery RapidIO configuration selection. To enable automatic enumeration/discovery start by existing basic enumerator method set use boot command line parameter “rio-scan.scan=1â€.”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÌhjh²hubhÌ)”}”(hX¹This configuration requires synchronized start of all RapidIO endpoints that form a network which will be enumerated/discovered. Discovering endpoints have to be started before an enumeration starts to ensure that all RapidIO controllers have been initialized and are ready to be discovered. Configuration parameter CONFIG_RAPIDIO_DISC_TIMEOUT defines time (in seconds) which a discovering endpoint will wait for enumeration to be completed.”h]”hX¹This configuration requires synchronized start of all RapidIO endpoints that form a network which will be enumerated/discovered. Discovering endpoints have to be started before an enumeration starts to ensure that all RapidIO controllers have been initialized and are ready to be discovered. Configuration parameter CONFIG_RAPIDIO_DISC_TIMEOUT defines time (in seconds) which a discovering endpoint will wait for enumeration to be completed.”…””}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÑhjh²hubhÌ)”}”(hŒ¶When automatic enumeration/discovery start is selected, basic method's initialization routine calls rio_init_mports() to perform enumeration or discovery for all known mport devices.”h]”hŒ¸When automatic enumeration/discovery start is selected, basic method’s initialization routine calls rio_init_mports() to perform enumeration or discovery for all known mport devices.”…””}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KØhjh²hubhÌ)”}”(hŒ½Depending on RapidIO network size and configuration this automatic enumeration/discovery start method may be difficult to use due to the requirement for synchronized start of all endpoints.”h]”hŒ½Depending on RapidIO network size and configuration this automatic enumeration/discovery start method may be difficult to use due to the requirement for synchronized start of all endpoints.”…””}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÜhjh²hubeh}”(h]”Œ,automatic-start-of-enumeration-and-discovery”ah ]”h"]”Œ04.2 automatic start of enumeration and discovery”ah$]”h&]”uh1hµhjŽh²hh³hÊh´KÊubh¶)”}”(hhh]”(h»)”}”(hŒ14.3 User-space Start of Enumeration and Discovery”h]”hŒ14.3 User-space Start of Enumeration and Discovery”…””}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjah²hh³hÊh´KáubhÌ)”}”(hXCUser-space start of enumeration and discovery can be used with built-in and modular build configurations. For user-space controlled start RapidIO subsystem creates the sysfs write-only attribute file '/sys/bus/rapidio/scan'. To initiate an enumeration or discovery process on specific mport device, a user needs to write mport_ID (not RapidIO destination ID) into that file. The mport_ID is a sequential number (0 ... RIO_MAX_MPORTS) assigned during mport device registration. For example for machine with single RapidIO controller, mport_ID for that controller always will be 0.”h]”hXGUser-space start of enumeration and discovery can be used with built-in and modular build configurations. For user-space controlled start RapidIO subsystem creates the sysfs write-only attribute file ‘/sys/bus/rapidio/scan’. To initiate an enumeration or discovery process on specific mport device, a user needs to write mport_ID (not RapidIO destination ID) into that file. The mport_ID is a sequential number (0 ... RIO_MAX_MPORTS) assigned during mport device registration. For example for machine with single RapidIO controller, mport_ID for that controller always will be 0.”…””}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kãhjah²hubhÌ)”}”(hŒˆTo initiate RapidIO enumeration/discovery on all available mports a user may write '-1' (or RIO_MPORT_ANY) into the scan attribute file.”h]”hŒŒTo initiate RapidIO enumeration/discovery on all available mports a user may write ‘-1’ (or RIO_MPORT_ANY) into the scan attribute file.”…””}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kìhjah²hubeh}”(h]”Œ-user-space-start-of-enumeration-and-discovery”ah ]”h"]”Œ14.3 user-space start of enumeration and discovery”ah$]”h&]”uh1hµhjŽh²hh³hÊh´Káubh¶)”}”(hhh]”(h»)”}”(hŒ4.4 Basic Enumeration Method”h]”hŒ4.4 Basic Enumeration Method”…””}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj–h²hh³hÊh´KðubhÌ)”}”(hXThis is an original enumeration/discovery method which is available since first release of RapidIO subsystem code. The enumeration process is implemented according to the enumeration algorithm outlined in the RapidIO Interconnect Specification: Annex I [1].”h]”hXThis is an original enumeration/discovery method which is available since first release of RapidIO subsystem code. The enumeration process is implemented according to the enumeration algorithm outlined in the RapidIO Interconnect Specification: Annex I [1].”…””}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kòhj–h²hubhÌ)”}”(hŒÃThis method can be configured as statically linked or loadable module. The method's single parameter "scan" allows to trigger the enumeration/discovery process from module initialization routine.”h]”hŒÉThis method can be configured as statically linked or loadable module. The method’s single parameter “scan†allows to trigger the enumeration/discovery process from module initialization routine.”…””}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K÷hj–h²hubhÌ)”}”(hŒuThis enumeration/discovery method can be started only once and does not support unloading if it is built as a module.”h]”hŒuThis enumeration/discovery method can be started only once and does not support unloading if it is built as a module.”…””}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kûhj–h²hubhÌ)”}”(hX¹The enumeration process traverses the network using a recursive depth-first algorithm. When a new device is found, the enumerator takes ownership of that device by writing into the Host Device ID Lock CSR. It does this to ensure that the enumerator has exclusive right to enumerate the device. If device ownership is successfully acquired, the enumerator allocates a new rio_dev structure and initializes it according to device capabilities.”h]”hX¹The enumeration process traverses the network using a recursive depth-first algorithm. When a new device is found, the enumerator takes ownership of that device by writing into the Host Device ID Lock CSR. It does this to ensure that the enumerator has exclusive right to enumerate the device. If device ownership is successfully acquired, the enumerator allocates a new rio_dev structure and initializes it according to device capabilities.”…””}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kþhj–h²hubhÌ)”}”(hŒIf the device is an endpoint, a unique device ID is assigned to it and its value is written into the device's Base Device ID CSR.”h]”hŒƒIf the device is an endpoint, a unique device ID is assigned to it and its value is written into the device’s Base Device ID CSR.”…””}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj–h²hubhÌ)”}”(hX½If the device is a switch, the enumerator allocates an additional rio_switch structure to store switch specific information. Then the switch's vendor ID and device ID are queried against a table of known RapidIO switches. Each switch table entry contains a pointer to a switch-specific initialization routine that initializes pointers to the rest of switch specific operations, and performs hardware initialization if necessary. A RapidIO switch does not have a unique device ID; it relies on hopcount and routing for device ID of an attached endpoint if access to its configuration registers is required. If a switch (or chain of switches) does not have any endpoint (except enumerator) attached to it, a fake device ID will be assigned to configure a route to that switch. In the case of a chain of switches without endpoint, one fake device ID is used to configure a route through the entire chain and switches are differentiated by their hopcount value.”h]”hX¿If the device is a switch, the enumerator allocates an additional rio_switch structure to store switch specific information. Then the switch’s vendor ID and device ID are queried against a table of known RapidIO switches. Each switch table entry contains a pointer to a switch-specific initialization routine that initializes pointers to the rest of switch specific operations, and performs hardware initialization if necessary. A RapidIO switch does not have a unique device ID; it relies on hopcount and routing for device ID of an attached endpoint if access to its configuration registers is required. If a switch (or chain of switches) does not have any endpoint (except enumerator) attached to it, a fake device ID will be assigned to configure a route to that switch. In the case of a chain of switches without endpoint, one fake device ID is used to configure a route through the entire chain and switches are differentiated by their hopcount value.”…””}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj–h²hubhÌ)”}”(hŒøFor both endpoints and switches the enumerator writes a unique component tag into device's Component Tag CSR. That unique value is used by the error management notification mechanism to identify a device that is reporting an error management event.”h]”hŒúFor both endpoints and switches the enumerator writes a unique component tag into device’s Component Tag CSR. That unique value is used by the error management notification mechanism to identify a device that is reporting an error management event.”…””}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj–h²hubhÌ)”}”(hX‚Enumeration beyond a switch is completed by iterating over each active egress port of that switch. For each active link, a route to a default device ID (0xFF for 8-bit systems and 0xFFFF for 16-bit systems) is temporarily written into the routing table. The algorithm recurs by calling itself with hopcount + 1 and the default device ID in order to access the device on the active port.”h]”hX‚Enumeration beyond a switch is completed by iterating over each active egress port of that switch. For each active link, a route to a default device ID (0xFF for 8-bit systems and 0xFFFF for 16-bit systems) is temporarily written into the routing table. The algorithm recurs by calling itself with hopcount + 1 and the default device ID in order to access the device on the active port.”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj–h²hubhÌ)”}”(hXSAfter the host has completed enumeration of the entire network it releases devices by clearing device ID locks (calls rio_clear_locks()). For each endpoint in the system, it sets the Discovered bit in the Port General Control CSR to indicate that enumeration is completed and agents are allowed to execute passive discovery of the network.”h]”hXSAfter the host has completed enumeration of the entire network it releases devices by clearing device ID locks (calls rio_clear_locks()). For each endpoint in the system, it sets the Discovered bit in the Port General Control CSR to indicate that enumeration is completed and agents are allowed to execute passive discovery of the network.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M!hj–h²hubhÌ)”}”(hX The discovery process is performed by agents and is similar to the enumeration process that is described above. However, the discovery process is performed without changes to the existing routing because agents only gather information about RapidIO network structure and are building an internal map of discovered devices. This way each Linux-based component of the RapidIO subsystem has a complete view of the network. The discovery process can be performed simultaneously by several agents. After initializing its RapidIO master port each agent waits for enumeration completion by the host for the configured wait time period. If this wait time period expires before enumeration is completed, an agent skips RapidIO discovery and continues with remaining kernel initialization.”h]”hX The discovery process is performed by agents and is similar to the enumeration process that is described above. However, the discovery process is performed without changes to the existing routing because agents only gather information about RapidIO network structure and are building an internal map of discovered devices. This way each Linux-based component of the RapidIO subsystem has a complete view of the network. The discovery process can be performed simultaneously by several agents. After initializing its RapidIO master port each agent waits for enumeration completion by the host for the configured wait time period. If this wait time period expires before enumeration is completed, an agent skips RapidIO discovery and continues with remaining kernel initialization.”…””}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M'hj–h²hubeh}”(h]”Œbasic-enumeration-method”ah ]”h"]”Œ4.4 basic enumeration method”ah$]”h&]”uh1hµhjŽh²hh³hÊh´Kðubh¶)”}”(hhh]”(h»)”}”(hŒ+4.5 Adding New Enumeration/Discovery Method”h]”hŒ+4.5 Adding New Enumeration/Discovery Method”…””}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj;h²hh³hÊh´M4ubhÌ)”}”(hŒªRapidIO subsystem code organization allows addition of new enumeration/discovery methods as new configuration options without significant impact to the core RapidIO code.”h]”hŒªRapidIO subsystem code organization allows addition of new enumeration/discovery methods as new configuration options without significant impact to the core RapidIO code.”…””}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M6hj;h²hubhÌ)”}”(hXVA new enumeration/discovery method has to be attached to one or more mport devices before an enumeration/discovery process can be started. Normally, method's module initialization routine calls rio_register_scan() to attach an enumerator to a specified mport device (or devices). The basic enumerator implementation demonstrates this process.”h]”hXXA new enumeration/discovery method has to be attached to one or more mport devices before an enumeration/discovery process can be started. Normally, method’s module initialization routine calls rio_register_scan() to attach an enumerator to a specified mport device (or devices). The basic enumerator implementation demonstrates this process.”…””}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M:hj;h²hubeh}”(h]”Œ'adding-new-enumeration-discovery-method”ah ]”h"]”Œ+4.5 adding new enumeration/discovery method”ah$]”h&]”uh1hµhjŽh²hh³hÊh´M4ubh¶)”}”(hhh]”(h»)”}”(hŒ)4.6 Using Loadable RapidIO Switch Drivers”h]”hŒ)4.6 Using Loadable RapidIO Switch Drivers”…””}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjph²hh³hÊh´MAubhÌ)”}”(hX0In the case when RapidIO switch drivers are built as loadable modules a user must ensure that they are loaded before the enumeration/discovery starts. This process can be automated by specifying pre- or post- dependencies in the RapidIO-specific modprobe configuration file as shown in the example below.”h]”hX0In the case when RapidIO switch drivers are built as loadable modules a user must ensure that they are loaded before the enumeration/discovery starts. This process can be automated by specifying pre- or post- dependencies in the RapidIO-specific modprobe configuration file as shown in the example below.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MChjph²hubhÌ)”}”(hŒ#File /etc/modprobe.d/rapidio.conf::”h]”hŒ"File /etc/modprobe.d/rapidio.conf:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MHhjph²hubhŒ literal_block”“”)”}”(hXª# Configure RapidIO subsystem modules # Set enumerator host destination ID (overrides kernel command line option) options rapidio hdid=-1,2 # Load RapidIO switch drivers immediately after rapidio core module was loaded softdep rapidio post: idt_gen2 idtcps tsi57x # OR : # Load RapidIO switch drivers just before rio-scan enumerator module is loaded softdep rio-scan pre: idt_gen2 idtcps tsi57x --------------------------”h]”hXª# Configure RapidIO subsystem modules # Set enumerator host destination ID (overrides kernel command line option) options rapidio hdid=-1,2 # Load RapidIO switch drivers immediately after rapidio core module was loaded softdep rapidio post: idt_gen2 idtcps tsi57x # OR : # Load RapidIO switch drivers just before rio-scan enumerator module is loaded softdep rio-scan pre: idt_gen2 idtcps tsi57x --------------------------”…””}”hjŸsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jh³hÊh´MJhjph²hubj‘)”}”(hhh]”j–)”}”(hŒNOTE: In the example above, one of "softdep" commands must be removed or commented out to keep required module loading sequence. ”h]”(jœ)”}”(hŒNOTE:”h]”hŒNOTE:”…””}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j›h³hÊh´M[hj²ubj¬)”}”(hhh]”hÌ)”}”(hŒzIn the example above, one of "softdep" commands must be removed or commented out to keep required module loading sequence.”h]”hŒ~In the example above, one of “softdep†commands must be removed or commented out to keep required module loading sequence.”…””}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MZhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j«hj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•h³hÊh´M[hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjph²hh³hÊh´Nubeh}”(h]”Œ%using-loadable-rapidio-switch-drivers”ah ]”h"]”Œ)4.6 using loadable rapidio switch drivers”ah$]”h&]”uh1hµhjŽh²hh³hÊh´MAubeh}”(h]”Œenumeration-and-discovery”ah ]”h"]”Œ4. enumeration and discovery”ah$]”h&]”uh1hµhh·h²hh³hÊh´Krubh¶)”}”(hhh]”(h»)”}”(hŒ 5. References”h]”hŒ 5. References”…””}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj÷h²hh³hÊh´M^ubj‘)”}”(hhh]”(j–)”}”(hŒ\[1] RapidIO Trade Association. RapidIO Interconnect Specifications. http://www.rapidio.org. ”h]”(jœ)”}”(hŒC[1] RapidIO Trade Association. RapidIO Interconnect Specifications.”h]”hŒC[1] RapidIO Trade Association. RapidIO Interconnect Specifications.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j›h³hÊh´Mahj ubj¬)”}”(hhh]”hÌ)”}”(hŒhttp://www.rapidio.org.”h]”(hŒ reference”“”)”}”(hŒhttp://www.rapidio.org”h]”hŒhttp://www.rapidio.org”…””}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j(uh1j$hj ubhŒ.”…””}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mahjubah}”(h]”h ]”h"]”h$]”h&]”uh1j«hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•h³hÊh´Mahjubj–)”}”(hŒa[2] Rapidio TA. Technology Comparisons. http://www.rapidio.org/education/technology_comparisons/ ”h]”(jœ)”}”(hŒ'[2] Rapidio TA. Technology Comparisons.”h]”hŒ'[2] Rapidio TA. Technology Comparisons.”…””}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j›h³hÊh´MdhjKubj¬)”}”(hhh]”hÌ)”}”(hŒ8http://www.rapidio.org/education/technology_comparisons/”h]”j%)”}”(hjbh]”hŒ8http://www.rapidio.org/education/technology_comparisons/”…””}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jbuh1j$hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mdhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j«hjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•h³hÊh´Mdhjh²hubj–)”}”(hŒ@[3] RapidIO support for Linux. https://lwn.net/Articles/139118/ ”h]”(jœ)”}”(hŒ[3] RapidIO support for Linux.”h]”hŒ[3] RapidIO support for Linux.”…””}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j›h³hÊh´Mghj„ubj¬)”}”(hhh]”hÌ)”}”(hŒ https://lwn.net/Articles/139118/”h]”j%)”}”(hj›h]”hŒ https://lwn.net/Articles/139118/”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j›uh1j$hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mghj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j«hj„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•h³hÊh´Mghjh²hubj–)”}”(hŒ~[4] Matt Porter. RapidIO for Linux. Ottawa Linux Symposium, 2005 https://www.kernel.org/doc/ols/2005/ols2005v2-pages-43-56.pdf”h]”(jœ)”}”(hŒ@[4] Matt Porter. RapidIO for Linux. Ottawa Linux Symposium, 2005”h]”hŒ@[4] Matt Porter. RapidIO for Linux. Ottawa Linux Symposium, 2005”…””}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j›h³hÊh´Mihj½ubj¬)”}”(hhh]”hÌ)”}”(hŒ=https://www.kernel.org/doc/ols/2005/ols2005v2-pages-43-56.pdf”h]”j%)”}”(hjÔh]”hŒ=https://www.kernel.org/doc/ols/2005/ols2005v2-pages-43-56.pdf”…””}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jÔuh1j$hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MjhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j«hj½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j•h³hÊh´Mihjh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷h²hh³hÊh´Nubeh}”(h]”Œ references”ah ]”h"]”Œ 5. references”ah$]”h&]”uh1hµhh·h²hh³hÊh´M^ubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”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 jjjjHjEjojlj–j“jËjÈjòjïjjj@j=j‹jˆjôjñj j j^j[j“jj8j5jmjjjìjéjjþuŒ nametypes”}”(j ‰j‰jH‰jo‰j–‰jˉjò‰j‰j@‰j‹‰jô‰j ‰j^‰j“‰j8‰jm‰jì‰j‰uh}”(jh·jhéjEjjlj=j“jrjÈj™jïjÎjjõj=jjˆjKjñjŽj jŸj[jjjaj5j–jjj;jéjpjþ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”“”}”j=Ks…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.