sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget+/translations/zh_CN/driver-api/interconnectmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/zh_TW/driver-api/interconnectmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/it_IT/driver-api/interconnectmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ja_JP/driver-api/interconnectmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ko_KR/driver-api/interconnectmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/pt_BR/driver-api/interconnectmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/sp_SP/driver-api/interconnectmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhE/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect.rsthKubhsection)}(hhh](htitle)}(h%Generic System Interconnect Subsystemh]h%Generic System Interconnect Subsystem}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Introductionh]h Introduction}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hXHThis framework is designed to provide a standard kernel interface to control the settings of the interconnects on an SoC. These settings can be throughput, latency and priority between multiple interconnected devices or functional blocks. This can be controlled dynamically in order to save power or provide maximum performance.h]hXHThis framework is designed to provide a standard kernel interface to control the settings of the interconnects on an SoC. These settings can be throughput, latency and priority between multiple interconnected devices or functional blocks. This can be controlled dynamically in order to save power or provide maximum performance.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hXSThe interconnect bus is hardware with configurable parameters, which can be set on a data path according to the requests received from various drivers. An example of interconnect buses are the interconnects between various components or functional blocks in chipsets. There can be multiple interconnects on an SoC that can be multi-tiered.h]hXSThe interconnect bus is hardware with configurable parameters, which can be set on a data path according to the requests received from various drivers. An example of interconnect buses are the interconnects between various components or functional blocks in chipsets. There can be multiple interconnects on an SoC that can be multi-tiered.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hLBelow is a simplified diagram of a real-world SoC interconnect bus topology.h]hLBelow is a simplified diagram of a real-world SoC interconnect bus topology.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh literal_block)}(hX+----------------+ +----------------+ | HW Accelerator |--->| M NoC |<---------------+ +----------------+ +----------------+ | | | +------------+ +-----+ +-------------+ V +------+ | | | DDR | | +--------+ | PCIe | | | +-----+ | | Slaves | +------+ | | ^ ^ | +--------+ | | C NoC | | | V V | | +------------------+ +------------------------+ | | +-----+ | |-->| |-->| |-->| CPU | | |-->| |<--| | +-----+ | Mem NoC | | S NoC | +------------+ | |<--| |---------+ | | |<--| |<------+ | | +--------+ +------------------+ +------------------------+ | | +-->| Slaves | ^ ^ ^ ^ ^ | | +--------+ | | | | | | V +------+ | +-----+ +-----+ +---------+ +----------------+ +--------+ | CPUs | | | GPU | | DSP | | Masters |-->| P NoC |-->| Slaves | +------+ | +-----+ +-----+ +---------+ +----------------+ +--------+ | +-------+ | Modem | +-------+h]hX+----------------+ +----------------+ | HW Accelerator |--->| M NoC |<---------------+ +----------------+ +----------------+ | | | +------------+ +-----+ +-------------+ V +------+ | | | DDR | | +--------+ | PCIe | | | +-----+ | | Slaves | +------+ | | ^ ^ | +--------+ | | C NoC | | | V V | | +------------------+ +------------------------+ | | +-----+ | |-->| |-->| |-->| CPU | | |-->| |<--| | +-----+ | Mem NoC | | S NoC | +------------+ | |<--| |---------+ | | |<--| |<------+ | | +--------+ +------------------+ +------------------------+ | | +-->| Slaves | ^ ^ ^ ^ ^ | | +--------+ | | | | | | V +------+ | +-----+ +-----+ +---------+ +----------------+ +--------+ | CPUs | | | GPU | | DSP | | Masters |-->| P NoC |-->| Slaves | +------+ | +-----+ +-----+ +---------+ +----------------+ +--------+ | +-------+ | Modem | +-------+}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhKhhhhubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Terminologyh]h Terminology}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hhhhhK5ubh)}(hInterconnect provider is the software definition of the interconnect hardware. The interconnect providers on the above diagram are M NoC, S NoC, C NoC, P NoC and Mem NoC.h]hInterconnect provider is the software definition of the interconnect hardware. The interconnect providers on the above diagram are M NoC, S NoC, C NoC, P NoC and Mem NoC.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hj2hhubh)}(hXyInterconnect node is the software definition of the interconnect hardware port. Each interconnect provider consists of multiple interconnect nodes, which are connected to other SoC components including other interconnect providers. The point on the diagram where the CPUs connect to the memory is called an interconnect node, which belongs to the Mem NoC interconnect provider.h]hXyInterconnect node is the software definition of the interconnect hardware port. Each interconnect provider consists of multiple interconnect nodes, which are connected to other SoC components including other interconnect providers. The point on the diagram where the CPUs connect to the memory is called an interconnect node, which belongs to the Mem NoC interconnect provider.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hj2hhubh)}(hInterconnect endpoints are the first or the last element of the path. Every endpoint is a node, but not every node is an endpoint.h]hInterconnect endpoints are the first or the last element of the path. Every endpoint is a node, but not every node is an endpoint.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhj2hhubh)}(hInterconnect path is everything between two endpoints including all the nodes that have to be traversed to reach from a source to destination node. It may include multiple master-slave pairs across several interconnect providers.h]hInterconnect path is everything between two endpoints including all the nodes that have to be traversed to reach from a source to destination node. It may include multiple master-slave pairs across several interconnect providers.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhj2hhubh)}(hXnInterconnect consumers are the entities which make use of the data paths exposed by the providers. The consumers send requests to providers requesting various throughput, latency and priority. Usually the consumers are device drivers, that send request based on their needs. An example for a consumer is a video decoder that supports various formats and image sizes.h]hXnInterconnect consumers are the entities which make use of the data paths exposed by the providers. The consumers send requests to providers requesting various throughput, latency and priority. Usually the consumers are device drivers, that send request based on their needs. An example for a consumer is a video decoder that supports various formats and image sizes.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhj2hhubeh}(h] terminologyah ]h"] terminologyah$]h&]uh1hhhhhhhhK5ubh)}(hhh](h)}(hInterconnect providersh]hInterconnect providers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKOubh)}(hInterconnect provider is an entity that implements methods to initialize and configure interconnect bus hardware. The interconnect provider drivers should be registered with the interconnect provider core.h]hInterconnect provider is an entity that implements methods to initialize and configure interconnect bus hardware. The interconnect provider drivers should be registered with the interconnect provider core.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhjhhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleicc_node_data (C struct)c.icc_node_datahNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(h icc_node_datah]hdesc_signature_line)}(hstruct icc_node_datah](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(h icc_node_datah]h desc_sig_name)}(hjh]h icc_node_data}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h)}(h icc node datah]h icc node data}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKhj)hhubah}(h]h ]h"]h$]h&]uh1j'hjhhhjhKubeh}(h]h ](cstructeh"]h$]h&]domainjDobjtypejEdesctypejEnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(h**Definition**:: struct icc_node_data { struct icc_node *node; u32 tag; }; **Members** ``node`` icc node ``tag`` tagh](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjUubh:}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKhjQubj)}(hAstruct icc_node_data { struct icc_node *node; u32 tag; };h]hAstruct icc_node_data { struct icc_node *node; u32 tag; };}hjtsbah}(h]h ]h"]h$]h&]hhuh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKhjQubh)}(h **Members**h]jZ)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKhjQubhdefinition_list)}(hhh](hdefinition_list_item)}(h``node`` icc node h](hterm)}(h``node``h]hliteral)}(hjh]hnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKhjubh definition)}(hhh]h)}(hicc nodeh]hicc node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h ``tag`` tagh](j)}(h``tag``h]j)}(hjh]htag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKhjubj)}(hhh]h)}(htagh]htag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_onecell_data (C struct)c.icc_onecell_datahNtauh1jhjhhhNhNubj)}(hhh](j)}(hicc_onecell_datah]j)}(hstruct icc_onecell_datah](j)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhjNhKubj)}(hicc_onecell_datah]j)}(hj;h]hicc_onecell_data}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj=hhhjNhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj9hhhjNhKubah}(h]j4ah ](jj eh"]h$]h&]j$j%)j&huh1jhjNhKhj6hhubj()}(hhh]h)}(h.driver data for onecell interconnect providersh]h.driver data for onecell interconnect providers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j'hj6hhhjNhKubeh}(h]h ](jDstructeh"]h$]h&]jIjDjJjjKjjLjMjNuh1jhhhjhNhNubjP)}(h**Definition**:: struct icc_onecell_data { unsigned int num_nodes; struct icc_node *nodes[]; }; **Members** ``num_nodes`` number of nodes in this device ``nodes`` array of pointers to the nodes in this deviceh](h)}(h**Definition**::h](jZ)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK!hjubj)}(hVstruct icc_onecell_data { unsigned int num_nodes; struct icc_node *nodes[]; };h]hVstruct icc_onecell_data { unsigned int num_nodes; struct icc_node *nodes[]; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK#hjubh)}(h **Members**h]jZ)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK(hjubj)}(hhh](j)}(h-``num_nodes`` number of nodes in this device h](j)}(h ``num_nodes``h]j)}(hjh]h num_nodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK hjubj)}(hhh]h)}(hnumber of nodes in this deviceh]hnumber of nodes in this device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubj)}(h7``nodes`` array of pointers to the nodes in this deviceh](j)}(h ``nodes``h]j)}(hj)h]hnodes}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK hj#ubj)}(hhh]h)}(h-array of pointers to the nodes in this deviceh]h-array of pointers to the nodes in this device}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK!hj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hK hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_provider (C struct)c.icc_providerhNtauh1jhjhhhNhNubj)}(hhh](j)}(h icc_providerh]j)}(hstruct icc_providerh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK'ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK'ubj)}(h icc_providerh]j)}(hj}h]h icc_provider}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhK'ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj{hhhjhK'ubah}(h]jvah ](jj eh"]h$]h&]j$j%)j&huh1jhjhK'hjxhhubj()}(hhh]h)}(h[interconnect provider (controller) entity that might provide multiple interconnect controlsh]h[interconnect provider (controller) entity that might provide multiple interconnect controls}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK+hjhhubah}(h]h ]h"]h$]h&]uh1j'hjxhhhjhK'ubeh}(h]h ](jDstructeh"]h$]h&]jIjDjJjjKjjLjMjNuh1jhhhjhNhNubjP)}(hX**Definition**:: struct icc_provider { struct list_head provider_list; struct list_head nodes; int (*set)(struct icc_node *src, struct icc_node *dst); int (*aggregate)(struct icc_node *node, u32 tag, u32 avg_bw, u32 peak_bw, u32 *agg_avg, u32 *agg_peak); void (*pre_aggregate)(struct icc_node *node); int (*get_bw)(struct icc_node *node, u32 *avg, u32 *peak); struct icc_node* (*xlate)(const struct of_phandle_args *spec, void *data); struct icc_node_data* (*xlate_extended)(const struct of_phandle_args *spec, void *data); struct device *dev; int users; bool inter_set; void *data; }; **Members** ``provider_list`` list of the registered interconnect providers ``nodes`` internal list of the interconnect provider nodes ``set`` pointer to device specific set operation function ``aggregate`` pointer to device specific aggregate operation function ``pre_aggregate`` pointer to device specific function that is called before the aggregation begins (optional) ``get_bw`` pointer to device specific function to get current bandwidth ``xlate`` provider-specific callback for mapping nodes from phandle arguments ``xlate_extended`` vendor-specific callback for mapping node data from phandle arguments ``dev`` the device this interconnect provider belongs to ``users`` count of active users ``inter_set`` whether inter-provider pairs will be configured with **set** ``data`` pointer to private datah](h)}(h**Definition**::h](jZ)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK/hjubj)}(hXstruct icc_provider { struct list_head provider_list; struct list_head nodes; int (*set)(struct icc_node *src, struct icc_node *dst); int (*aggregate)(struct icc_node *node, u32 tag, u32 avg_bw, u32 peak_bw, u32 *agg_avg, u32 *agg_peak); void (*pre_aggregate)(struct icc_node *node); int (*get_bw)(struct icc_node *node, u32 *avg, u32 *peak); struct icc_node* (*xlate)(const struct of_phandle_args *spec, void *data); struct icc_node_data* (*xlate_extended)(const struct of_phandle_args *spec, void *data); struct device *dev; int users; bool inter_set; void *data; };h]hXstruct icc_provider { struct list_head provider_list; struct list_head nodes; int (*set)(struct icc_node *src, struct icc_node *dst); int (*aggregate)(struct icc_node *node, u32 tag, u32 avg_bw, u32 peak_bw, u32 *agg_avg, u32 *agg_peak); void (*pre_aggregate)(struct icc_node *node); int (*get_bw)(struct icc_node *node, u32 *avg, u32 *peak); struct icc_node* (*xlate)(const struct of_phandle_args *spec, void *data); struct icc_node_data* (*xlate_extended)(const struct of_phandle_args *spec, void *data); struct device *dev; int users; bool inter_set; void *data; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK1hjubh)}(h **Members**h]jZ)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK@hjubj)}(hhh](j)}(h@``provider_list`` list of the registered interconnect providers h](j)}(h``provider_list``h]j)}(hj2h]h provider_list}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK/hj,ubj)}(hhh]h)}(h-list of the registered interconnect providersh]h-list of the registered interconnect providers}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhK/hjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhK/hj)ubj)}(h;``nodes`` internal list of the interconnect provider nodes h](j)}(h ``nodes``h]j)}(hjkh]hnodes}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK0hjeubj)}(hhh]h)}(h0internal list of the interconnect provider nodesh]h0internal list of the interconnect provider nodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK0hjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhK0hj)ubj)}(h:``set`` pointer to device specific set operation function h](j)}(h``set``h]j)}(hjh]hset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK1hjubj)}(hhh]h)}(h1pointer to device specific set operation functionh]h1pointer to device specific set operation function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK1hj)ubj)}(hF``aggregate`` pointer to device specific aggregate operation function h](j)}(h ``aggregate``h]j)}(hjh]h aggregate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK2hjubj)}(hhh]h)}(h7pointer to device specific aggregate operation functionh]h7pointer to device specific aggregate operation function}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK2hj)ubj)}(hn``pre_aggregate`` pointer to device specific function that is called before the aggregation begins (optional) h](j)}(h``pre_aggregate``h]j)}(hjh]h pre_aggregate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK4hjubj)}(hhh]h)}(h[pointer to device specific function that is called before the aggregation begins (optional)h]h[pointer to device specific function that is called before the aggregation begins (optional)}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK3hj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj+hK4hj)ubj)}(hH``get_bw`` pointer to device specific function to get current bandwidth h](j)}(h ``get_bw``h]j)}(hjPh]hget_bw}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK5hjJubj)}(hhh]h)}(h``provider`` points to the interconnect provider of this node h](j)}(h ``provider``h]j)}(hj h]hprovider}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKUhj ubj)}(hhh]h)}(h0points to the interconnect provider of this nodeh]h0points to the interconnect provider of this node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKUhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKUhjubj)}(hC``node_list`` the list entry in the parent provider's "nodes" list h](j)}(h ``node_list``h]j)}(hj h]h node_list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKVhj ubj)}(hhh]h)}(h4the list entry in the parent provider's "nodes" listh]h:the list entry in the parent provider’s “nodes” list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKVhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKVhjubj)}(h7``search_list`` list used when walking the nodes graph h](j)}(h``search_list``h]j)}(hj h]h search_list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKWhj ubj)}(hhh]h)}(h&list used when walking the nodes graphh]h&list used when walking the nodes graph}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj( hKWhj) ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj( hKWhjubj)}(hB``reverse`` pointer to previous node when walking the nodes graph h](j)}(h ``reverse``h]j)}(hjL h]hreverse}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKXhjF ubj)}(hhh]h)}(h5pointer to previous node when walking the nodes graphh]h5pointer to previous node when walking the nodes graph}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja hKXhjb ubah}(h]h ]h"]h$]h&]uh1jhjF ubeh}(h]h ]h"]h$]h&]uh1jhja hKXhjubj)}(h@``is_traversed`` flag that is used when walking the nodes graph h](j)}(h``is_traversed``h]j)}(hj h]h is_traversed}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKYhj ubj)}(hhh]h)}(h.flag that is used when walking the nodes graphh]h.flag that is used when walking the nodes graph}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKYhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKYhjubj)}(hI``req_list`` a list of QoS constraint requests associated with this node h](j)}(h ``req_list``h]j)}(hj h]hreq_list}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhKZhj ubj)}(hhh]h)}(h;a list of QoS constraint requests associated with this nodeh]h;a list of QoS constraint requests associated with this node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKZhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKZhjubj)}(hM``avg_bw`` aggregated value of average bandwidth requests from all consumers h](j)}(h ``avg_bw``h]j)}(hj h]havg_bw}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK[hj ubj)}(hhh]h)}(hAaggregated value of average bandwidth requests from all consumersh]hAaggregated value of average bandwidth requests from all consumers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK[hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK[hjubj)}(hK``peak_bw`` aggregated value of peak bandwidth requests from all consumers h](j)}(h ``peak_bw``h]j)}(hj0 h]hpeak_bw}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj. ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK\hj* ubj)}(hhh]h)}(h>aggregated value of peak bandwidth requests from all consumersh]h>aggregated value of peak bandwidth requests from all consumers}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE hK\hjF ubah}(h]h ]h"]h$]h&]uh1jhj* ubeh}(h]h ]h"]h$]h&]uh1jhjE hK\hjubj)}(hP``init_avg`` average bandwidth value that is read from the hardware during init h](j)}(h ``init_avg``h]j)}(hji h]hinit_avg}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK]hjc ubj)}(hhh]h)}(hBaverage bandwidth value that is read from the hardware during inith]hBaverage bandwidth value that is read from the hardware during init}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~ hK]hj ubah}(h]h ]h"]h$]h&]uh1jhjc ubeh}(h]h ]h"]h$]h&]uh1jhj~ hK]hjubj)}(hN``init_peak`` peak bandwidth value that is read from the hardware during init h](j)}(h ``init_peak``h]j)}(hj h]h init_peak}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK^hj ubj)}(hhh]h)}(h?peak bandwidth value that is read from the hardware during inith]h?peak bandwidth value that is read from the hardware during init}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK^hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK^hjubj)}(h ``data`` pointer to private datah](j)}(h``data``h]j)}(hj h]hdata}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK^hj ubj)}(hhh]h)}(hpointer to private datah]hpointer to private data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhm/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:85: ./include/linux/interconnect-provider.hhK_hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hK^hjubeh}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j icc_node_create_dyn (C function)c.icc_node_create_dynhNtauh1jhjhhhNhNubj)}(hhh](j)}(h,struct icc_node * icc_node_create_dyn (void)h]j)}(h*struct icc_node *icc_node_create_dyn(void)h](j)}(hjh]hstruct}(hj5 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1 hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMTubj)}(h h]h }(hjC hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1 hhhjB hMTubh)}(hhh]j)}(hicc_nodeh]hicc_node}(hjT hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ ubah}(h]h ]h"]h$]h&] refdomainjDreftype identifier reftargetjV modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jo ASTIdentifier)}jj icc_node_create_dynsbc.icc_node_create_dynasbuh1hhj1 hhhjB hMTubj)}(h h]h }(hj} hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1 hhhjB hMTubhdesc_sig_punctuation)}(h*h]h*}(hj hhhNhNubah}(h]h ]pah"]h$]h&]uh1j hj1 hhhjB hMTubj)}(hicc_node_create_dynh]j)}(hjz h]hicc_node_create_dyn}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj1 hhhjB hMTubhdesc_parameterlist)}(h(void)h]hdesc_parameter)}(hvoidh]hdesc_sig_keyword_type)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hj1 hhhjB hMTubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj- hhhjB hMTubah}(h]j( ah ](jj eh"]h$]h&]j$j%)j&huh1jhjB hMThj* hhubj()}(hhh]h)}(hcreate a node with dynamic idh]hcreate a node with dynamic id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMThj hhubah}(h]h ]h"]h$]h&]uh1j'hj* hhhjB hMTubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJj jKj jLjMjNuh1jhhhjhNhNubjP)}(hg**Parameters** ``void`` no arguments **Return** icc_node pointer on success, or ERR_PTR() on errorh](h)}(h**Parameters**h]jZ)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMXhj ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hj- h]hvoid}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chKhj' ubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB hKhjC ubah}(h]h ]h"]h$]h&]uh1jhj' ubeh}(h]h ]h"]h$]h&]uh1jhjB hKhj$ ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h **Return**h]jZ)}(hjh h]hReturn}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjf ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chKhj ubh)}(h2icc_node pointer on success, or ERR_PTR() on errorh]h2icc_node pointer on success, or ERR_PTR() on error}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMVhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_node_create (C function)c.icc_node_createhNtauh1jhjhhhNhNubj)}(hhh](j)}(h*struct icc_node * icc_node_create (int id)h]j)}(h(struct icc_node *icc_node_create(int id)h](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMgubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMgubh)}(hhh]j)}(hicc_nodeh]hicc_node}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetj modnameN classnameNjn jq )}jt ]jw )}jj icc_node_createsbc.icc_node_createasbuh1hhj hhhj hMgubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMgubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj hhhj hMgubj)}(hicc_node_createh]j)}(hj h]hicc_node_create}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hMgubj )}(h(int id)h]j )}(hint idh](j )}(hinth]hint}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj#ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hidh]hid}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hj hhhj hMgubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hMgubah}(h]j ah ](jj eh"]h$]h&]j$j%)j&huh1jhj hMghj hhubj()}(hhh]h)}(h create a nodeh]h create a node}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMghjjhhubah}(h]h ]h"]h$]h&]uh1j'hj hhhj hMgubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJjjKjjLjMjNuh1jhhhjhNhNubjP)}(hd**Parameters** ``int id`` node id **Return** icc_node pointer on success, or ERR_PTR() on errorh](h)}(h**Parameters**h]jZ)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMkhjubj)}(hhh]j)}(h``int id`` node id h](j)}(h ``int id``h]j)}(hjh]hint id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhhjubj)}(hhh]h)}(hnode idh]hnode id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]jZ)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMjhjubh)}(h2icc_node pointer on success, or ERR_PTR() on errorh]h2icc_node pointer on success, or ERR_PTR() on error}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMjhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_node_destroy (C function)c.icc_node_destroyhNtauh1jhjhhhNhNubj)}(hhh](j)}(hvoid icc_node_destroy (int id)h]j)}(hvoid icc_node_destroy(int id)h](j )}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chM{ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj<hM{ubj)}(hicc_node_destroyh]j)}(hicc_node_destroyh]hicc_node_destroy}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]hhuh1jhj*hhhj<hM{ubj )}(h(int id)h]j )}(hint idh](j )}(hinth]hint}(hjkhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjgubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hidh]hid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjcubah}(h]h ]h"]h$]h&]hhuh1j hj*hhhj<hM{ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj&hhhj<hM{ubah}(h]j!ah ](jj eh"]h$]h&]j$j%)j&huh1jhj<hM{hj#hhubj()}(hhh]h)}(hdestroy a nodeh]hdestroy a node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chM{hjhhubah}(h]h ]h"]h$]h&]uh1j'hj#hhhj<hM{ubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJjjKjjLjMjNuh1jhhhjhNhNubjP)}(h$**Parameters** ``int id`` node idh](h)}(h**Parameters**h]jZ)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjubj)}(hhh]j)}(h``int id`` node idh](j)}(h ``int id``h]j)}(hjh]hint id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjubj)}(hhh]h)}(hnode idh]hnode id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chM|hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_node_set_name (C function)c.icc_node_set_namehNtauh1jhjhhhNhNubj)}(hhh](j)}(hdint icc_node_set_name (struct icc_node *node, const struct icc_provider *provider, const char *name)h]j)}(hcint icc_node_set_name(struct icc_node *node, const struct icc_provider *provider, const char *name)h](j )}(hinth]hint}(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjHhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjZhMubj)}(hicc_node_set_nameh]j)}(hicc_node_set_nameh]hicc_node_set_name}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]hhuh1jhjHhhhjZhMubj )}(hN(struct icc_node *node, const struct icc_provider *provider, const char *name)h](j )}(hstruct icc_node *nodeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hicc_nodeh]hicc_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetjmodnameN classnameNjn jq )}jt ]jw )}jj josbc.icc_node_set_nameasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h#const struct icc_provider *providerh](j)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h icc_providerh]h icc_provider}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetj7modnameN classnameNjn jq )}jt ]jc.icc_node_set_nameasbuh1hhjubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjahhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hproviderh]hprovider}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hconst char *nameh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hcharh]hchar}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hnameh]hname}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1j hjHhhhjZhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjDhhhjZhMubah}(h]j?ah ](jj eh"]h$]h&]j$j%)j&huh1jhjZhMhjAhhubj()}(hhh]h)}(h set node nameh]h set node name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjhhubah}(h]h ]h"]h$]h&]uh1j'hjAhhhjZhMubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJj jKj jLjMjNuh1jhhhjhNhNubjP)}(h**Parameters** ``struct icc_node *node`` node ``const struct icc_provider *provider`` node provider ``const char *name`` node name **Return** 0 on success, or -ENOMEM on allocation failureh](h)}(h**Parameters**h]jZ)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjubj)}(hhh](j)}(h``struct icc_node *node`` node h](j)}(h``struct icc_node *node``h]j)}(hj6h]hstruct icc_node *node}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhj0ubj)}(hhh]h)}(hnodeh]hnode}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhMhj-ubj)}(h6``const struct icc_provider *provider`` node provider h](j)}(h'``const struct icc_provider *provider``h]j)}(hjoh]h#const struct icc_provider *provider}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjiubj)}(hhh]h)}(h node providerh]h node provider}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhMhj-ubj)}(h``const char *name`` node name h](j)}(h``const char *name``h]j)}(hjh]hconst char *name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjubj)}(hhh]h)}(h node nameh]h node name}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj-ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]jZ)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjubh)}(h.0 on success, or -ENOMEM on allocation failureh]h.0 on success, or -ENOMEM on allocation failure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_link_nodes (C function)c.icc_link_nodeshNtauh1jhjhhhNhNubj)}(hhh](j)}(hJint icc_link_nodes (struct icc_node *src_node, struct icc_node **dst_node)h]j)}(hIint icc_link_nodes(struct icc_node *src_node, struct icc_node **dst_node)h](j )}(hinth]hint}(hj(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj6hMubj)}(hicc_link_nodesh]j)}(hicc_link_nodesh]hicc_link_nodes}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]hhuh1jhj$hhhj6hMubj )}(h7(struct icc_node *src_node, struct icc_node **dst_node)h](j )}(hstruct icc_node *src_nodeh](j)}(hjh]hstruct}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubh)}(hhh]j)}(hicc_nodeh]hicc_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetjmodnameN classnameNjn jq )}jt ]jw )}jj jKsbc.icc_link_nodesasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjaubj)}(hsrc_nodeh]hsrc_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]ubj )}(hstruct icc_node **dst_nodeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hicc_nodeh]hicc_node}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetjmodnameN classnameNjn jq )}jt ]jc.icc_link_nodesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj )}(hj h]h*}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdst_nodeh]hdst_node}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]ubeh}(h]h ]h"]h$]h&]hhuh1j hj$hhhj6hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj6hMubah}(h]jah ](jj eh"]h$]h&]j$j%)j&huh1jhj6hMhjhhubj()}(hhh]h)}(hcreate link between two nodesh]hcreate link between two nodes}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjbhhubah}(h]h ]h"]h$]h&]uh1j'hjhhhj6hMubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJj}jKj}jLjMjNuh1jhhhjhNhNubjP)}(hX**Parameters** ``struct icc_node *src_node`` source node ``struct icc_node **dst_node`` destination node **Description** Create a link between two nodes. The nodes might belong to different interconnect providers and the **dst_node** might not exist (if the provider driver has not probed yet). So just create the **dst_node** and when the actual provider driver is probed, the rest of the node data is filled. **Return** 0 on success, or an error code otherwiseh](h)}(h**Parameters**h]jZ)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjubj)}(hhh](j)}(h*``struct icc_node *src_node`` source node h](j)}(h``struct icc_node *src_node``h]j)}(hjh]hstruct icc_node *src_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjubj)}(hhh]h)}(h source nodeh]h source node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h0``struct icc_node **dst_node`` destination node h](j)}(h``struct icc_node **dst_node``h]j)}(hjh]hstruct icc_node **dst_node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjubj)}(hhh]h)}(hdestination nodeh]hdestination node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jZ)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjubh)}(hX!Create a link between two nodes. The nodes might belong to different interconnect providers and the **dst_node** might not exist (if the provider driver has not probed yet). So just create the **dst_node** and when the actual provider driver is probed, the rest of the node data is filled.h](hdCreate a link between two nodes. The nodes might belong to different interconnect providers and the }(hj0hhhNhNubjZ)}(h **dst_node**h]hdst_node}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj0ubhQ might not exist (if the provider driver has not probed yet). So just create the }(hj0hhhNhNubjZ)}(h **dst_node**h]hdst_node}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj0ubhT and when the actual provider driver is probed, the rest of the node data is filled.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjubh)}(h **Return**h]jZ)}(hjeh]hReturn}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjcubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjubh)}(h(0 on success, or an error code otherwiseh]h(0 on success, or an error code otherwise}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_link_create (C function)c.icc_link_createhNtauh1jhjhhhNhNubj)}(hhh](j)}(h=int icc_link_create (struct icc_node *node, const int dst_id)h]j)}(hubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMShj:ubj)}(hhh]j)}(hW``struct icc_provider *provider`` the interconnect provider we are removing nodes from h](j)}(h!``struct icc_provider *provider``h]j)}(hj_h]hstruct icc_provider *provider}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMPhjYubj)}(hhh]h)}(h4the interconnect provider we are removing nodes fromh]h4the interconnect provider we are removing nodes from}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMPhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMPhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h **Return**h]jZ)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMRhj:ubh)}(h(0 on success, or an error code otherwiseh]h(0 on success, or an error code otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMRhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_provider_init (C function)c.icc_provider_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(h6void icc_provider_init (struct icc_provider *provider)h]j)}(h5void icc_provider_init(struct icc_provider *provider)h](j )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMeubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMeubj)}(hicc_provider_inith]j)}(hicc_provider_inith]hicc_provider_init}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhMeubj )}(h(struct icc_provider *provider)h]j )}(hstruct icc_provider *providerh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h icc_providerh]h icc_provider}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetj<modnameN classnameNjn jq )}jt ]jw )}jj jsbc.icc_provider_initasbuh1hhjubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hproviderh]hprovider}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMeubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMeubah}(h]jah ](jj eh"]h$]h&]j$j%)j&huh1jhjhMehjhhubj()}(hhh]h)}(h&initialize a new interconnect providerh]h&initialize a new interconnect provider}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMehjhhubah}(h]h ]h"]h$]h&]uh1j'hjhhhjhMeubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJjjKjjLjMjNuh1jhhhjhNhNubjP)}(h**Parameters** ``struct icc_provider *provider`` the interconnect provider to initialize **Description** Must be called before adding nodes to the provider.h](h)}(h**Parameters**h]jZ)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMihjubj)}(hhh]j)}(hJ``struct icc_provider *provider`` the interconnect provider to initialize h](j)}(h!``struct icc_provider *provider``h]j)}(hjh]hstruct icc_provider *provider}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMfhjubj)}(hhh]h)}(h'the interconnect provider to initializeh]h'the interconnect provider to initialize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMfhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]jZ)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhhjubh)}(h3Must be called before adding nodes to the provider.h]h3Must be called before adding nodes to the provider.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMghjubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"icc_provider_register (C function)c.icc_provider_registerhNtauh1jhjhhhNhNubj)}(hhh](j)}(h9int icc_provider_register (struct icc_provider *provider)h]j)}(h8int icc_provider_register(struct icc_provider *provider)h](j )}(hinth]hint}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj\hhhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMsubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhjnhMsubj)}(hicc_provider_registerh]j)}(hicc_provider_registerh]hicc_provider_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj\hhhjnhMsubj )}(h(struct icc_provider *provider)h]j )}(hstruct icc_provider *providerh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h icc_providerh]h icc_provider}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetjmodnameN classnameNjn jq )}jt ]jw )}jj jsbc.icc_provider_registerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hproviderh]hprovider}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hj\hhhjnhMsubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjXhhhjnhMsubah}(h]jSah ](jj eh"]h$]h&]j$j%)j&huh1jhjnhMshjUhhubj()}(hhh]h)}(h$register a new interconnect providerh]h$register a new interconnect provider}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMshjhhubah}(h]h ]h"]h$]h&]uh1j'hjUhhhjnhMsubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJj8jKj8jLjMjNuh1jhhhjhNhNubjP)}(h**Parameters** ``struct icc_provider *provider`` the interconnect provider to register **Return** 0 on success, or an error code otherwiseh](h)}(h**Parameters**h]jZ)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj@ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMwhj<ubj)}(hhh]j)}(hH``struct icc_provider *provider`` the interconnect provider to register h](j)}(h!``struct icc_provider *provider``h]j)}(hjah]hstruct icc_provider *provider}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMthj[ubj)}(hhh]h)}(h%the interconnect provider to registerh]h%the interconnect provider to register}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMthjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhMthjXubah}(h]h ]h"]h$]h&]uh1jhj<ubh)}(h **Return**h]jZ)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMvhj<ubh)}(h(0 on success, or an error code otherwiseh]h(0 on success, or an error code otherwise}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMvhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$icc_provider_deregister (C function)c.icc_provider_deregisterhNtauh1jhjhhhNhNubj)}(hhh](j)}(h modnameN classnameNjn jq )}jt ]jw )}jj j sbc.icc_provider_deregisterasbuh1hhj ubj)}(h h]h }(hj\ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj )}(hj h]h*}(hjj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hproviderh]hprovider}(hjw hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jj eh"]h$]h&]j$j%)j&huh1jhjhMhjhhubj()}(hhh]h)}(h#deregister an interconnect providerh]h#deregister an interconnect provider}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhj hhubah}(h]h ]h"]h$]h&]uh1j'hjhhhjhMubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJj jKj jLjMjNuh1jhhhjhNhNubjP)}(h[**Parameters** ``struct icc_provider *provider`` the interconnect provider to deregisterh](h)}(h**Parameters**h]jZ)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj ubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhj ubj)}(hhh]j)}(hI``struct icc_provider *provider`` the interconnect provider to deregisterh](j)}(h!``struct icc_provider *provider``h]j)}(hj h]hstruct icc_provider *provider}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhj ubj)}(hhh]h)}(h'the interconnect provider to deregisterh]h'the interconnect provider to deregister}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhc/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:87: ./drivers/interconnect/core.chMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhjhhhNhNubeh}(h]interconnect-providersah ]h"]interconnect providersah$]h&]uh1hhhhhhhhKOubh)}(hhh](h)}(hInterconnect consumersh]hInterconnect consumers}(hj.!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+!hhhhhK^ubh)}(hInterconnect consumers are the clients which use the interconnect APIs to get paths between endpoints and set their bandwidth/latency/QoS requirements for these interconnect paths.h]hInterconnect consumers are the clients which use the interconnect APIs to get paths between endpoints and set their bandwidth/latency/QoS requirements for these interconnect paths.}(hj``struct device *dev`` device pointer for the consumer device h](j)}(h``struct device *dev``h]j)}(hj"h]hstruct device *dev}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj"ubj)}(hhh]h)}(h&device pointer for the consumer deviceh]h&device pointer for the consumer device}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hMhj"ubj)}(h$``int idx`` interconnect path index h](j)}(h ``int idx``h]j)}(hj #h]hint idx}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj #ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj#ubj)}(hhh]h)}(hinterconnect path indexh]hinterconnect path index}(hj&#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"#hMhj##ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj"#hMhj"ubeh}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]jZ)}(hjH#h]h Description}(hjJ#hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjF#ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj"ubh)}(hXRThis function will search for a path between two endpoints and return an icc_path handle on success. Use icc_put() to release constraints when they are not needed anymore. If the interconnect API is disabled, NULL is returned and the consumer drivers will still build. Drivers are free to handle this specifically, but they don't have to.h]hXTThis function will search for a path between two endpoints and return an icc_path handle on success. Use icc_put() to release constraints when they are not needed anymore. If the interconnect API is disabled, NULL is returned and the consumer drivers will still build. Drivers are free to handle this specifically, but they don’t have to.}(hj^#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj"ubh)}(h **Return**h]jZ)}(hjo#h]hReturn}(hjq#hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjm#ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj"ubh)}(hicc_path pointer on success or ERR_PTR() on error. NULL is returned when the API is disabled or the "interconnects" DT property is missing.h]hicc_path pointer on success or ERR_PTR() on error. NULL is returned when the API is disabled or the “interconnects” DT property is missing.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhj+!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jof_icc_get (C function) c.of_icc_gethNtauh1jhj+!hhhNhNubj)}(hhh](j)}(hCstruct icc_path * of_icc_get (struct device *dev, const char *name)h]j)}(hAstruct icc_path *of_icc_get(struct device *dev, const char *name)h](j)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hMubh)}(hhh]j)}(hicc_pathh]hicc_path}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetj#modnameN classnameNjn jq )}jt ]jw )}jj of_icc_getsb c.of_icc_getasbuh1hhj#hhhj#hMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hMubj )}(hj h]h*}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj#hhhj#hMubj)}(h of_icc_geth]j)}(hj#h]h of_icc_get}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj#hhhj#hMubj )}(h&(struct device *dev, const char *name)h](j )}(hstruct device *devh](j)}(hjh]hstruct}(hj.$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*$ubj)}(h h]h }(hj;$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*$ubh)}(hhh]j)}(hdeviceh]hdevice}(hjL$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI$ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetjN$modnameN classnameNjn jq )}jt ]j# c.of_icc_getasbuh1hhj*$ubj)}(h h]h }(hjj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*$ubj )}(hj h]h*}(hjx$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*$ubj)}(hdevh]hdev}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj&$ubj )}(hconst char *nameh](j)}(hjh]hconst}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj )}(hcharh]hchar}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj )}(hj h]h*}(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj$ubj)}(hnameh]hname}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj&$ubeh}(h]h ]h"]h$]h&]hhuh1j hj#hhhj#hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj#hhhj#hMubah}(h]j#ah ](jj eh"]h$]h&]j$j%)j&huh1jhj#hMhj#hhubj()}(hhh]h)}(h.get a path handle from a DT node based on nameh]h.get a path handle from a DT node based on name}(hj %hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj %hhubah}(h]h ]h"]h$]h&]uh1j'hj#hhhj#hMubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJj$%jKj$%jLjMjNuh1jhhhj+!hNhNubjP)}(hX|**Parameters** ``struct device *dev`` device pointer for the consumer device ``const char *name`` interconnect path name **Description** This function will search for a path between two endpoints and return an icc_path handle on success. Use icc_put() to release constraints when they are not needed anymore. If the interconnect API is disabled, NULL is returned and the consumer drivers will still build. Drivers are free to handle this specifically, but they don't have to. **Return** icc_path pointer on success or ERR_PTR() on error. NULL is returned when the API is disabled or the "interconnects" DT property is missing.h](h)}(h**Parameters**h]jZ)}(hj.%h]h Parameters}(hj0%hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj,%ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chM#hj(%ubj)}(hhh](j)}(h>``struct device *dev`` device pointer for the consumer device h](j)}(h``struct device *dev``h]j)}(hjM%h]hstruct device *dev}(hjO%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK%ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chM hjG%ubj)}(hhh]h)}(h&device pointer for the consumer deviceh]h&device pointer for the consumer device}(hjf%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb%hM hjc%ubah}(h]h ]h"]h$]h&]uh1jhjG%ubeh}(h]h ]h"]h$]h&]uh1jhjb%hM hjD%ubj)}(h,``const char *name`` interconnect path name h](j)}(h``const char *name``h]j)}(hj%h]hconst char *name}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chM!hj%ubj)}(hhh]h)}(hinterconnect path nameh]hinterconnect path name}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hM!hj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hM!hjD%ubeh}(h]h ]h"]h$]h&]uh1jhj(%ubh)}(h**Description**h]jZ)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj%ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chM#hj(%ubh)}(hXRThis function will search for a path between two endpoints and return an icc_path handle on success. Use icc_put() to release constraints when they are not needed anymore. If the interconnect API is disabled, NULL is returned and the consumer drivers will still build. Drivers are free to handle this specifically, but they don't have to.h]hXTThis function will search for a path between two endpoints and return an icc_path handle on success. Use icc_put() to release constraints when they are not needed anymore. If the interconnect API is disabled, NULL is returned and the consumer drivers will still build. Drivers are free to handle this specifically, but they don’t have to.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chM"hj(%ubh)}(h **Return**h]jZ)}(hj%h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj%ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chM)hj(%ubh)}(hicc_path pointer on success or ERR_PTR() on error. NULL is returned when the API is disabled or the "interconnects" DT property is missing.h]hicc_path pointer on success or ERR_PTR() on error. NULL is returned when the API is disabled or the “interconnects” DT property is missing.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chM*hj(%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhj+!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_get (C function) c.icc_gethNtauh1jhj+!hhhNhNubj)}(hhh](j)}(hPstruct icc_path * icc_get (struct device *dev, const char *src, const char *dst)h]j)}(hNstruct icc_path *icc_get(struct device *dev, const char *src, const char *dst)h](j)}(hjh]hstruct}(hj-&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)&hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMNubj)}(h h]h }(hj;&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)&hhhj:&hMNubh)}(hhh]j)}(hicc_pathh]hicc_path}(hjL&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI&ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetjN&modnameN classnameNjn jq )}jt ]jw )}jj icc_getsb c.icc_getasbuh1hhj)&hhhj:&hMNubj)}(h h]h }(hjm&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)&hhhj:&hMNubj )}(hj h]h*}(hj{&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj)&hhhj:&hMNubj)}(hicc_geth]j)}(hjj&h]hicc_get}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj)&hhhj:&hMNubj )}(h6(struct device *dev, const char *src, const char *dst)h](j )}(hstruct device *devh](j)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubh)}(hhh]j)}(hdeviceh]hdevice}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetj&modnameN classnameNjn jq )}jt ]jh& c.icc_getasbuh1hhj&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj )}(hj h]h*}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubj)}(hdevh]hdev}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj&ubj )}(hconst char *srch](j)}(hjh]hconst}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj$'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj )}(hcharh]hchar}(hj2'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'ubj)}(h h]h }(hj@'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj )}(hj h]h*}(hjN'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj'ubj)}(hsrch]hsrc}(hj['hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj&ubj )}(hconst char *dsth](j)}(hjh]hconst}(hjt'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp'ubj )}(hcharh]hchar}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjp'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp'ubj )}(hj h]h*}(hj'hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjp'ubj)}(hdsth]hdst}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp'ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj&ubeh}(h]h ]h"]h$]h&]hhuh1j hj)&hhhj:&hMNubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj%&hhhj:&hMNubah}(h]j &ah ](jj eh"]h$]h&]j$j%)j&huh1jhj:&hMNhj"&hhubj()}(hhh]h)}(h'get a path handle between two endpointsh]h'get a path handle between two endpoints}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMNhj'hhubah}(h]h ]h"]h$]h&]uh1j'hj"&hhhj:&hMNubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJj'jKj'jLjMjNuh1jhhhj+!hNhNubjP)}(hX**Parameters** ``struct device *dev`` device pointer for the consumer device ``const char *src`` source node name ``const char *dst`` destination node name **Description** This function will search for a path between two endpoints and return an icc_path handle on success. Use icc_put() to release constraints when they are not needed anymore. **Return** icc_path pointer on success or ERR_PTR() on error. NULL is returned when the API is disabled.h](h)}(h**Parameters**h]jZ)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj(ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMRhj'ubj)}(hhh](j)}(h>``struct device *dev`` device pointer for the consumer device h](j)}(h``struct device *dev``h]j)}(hj#(h]hstruct device *dev}(hj%(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!(ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMOhj(ubj)}(hhh]h)}(h&device pointer for the consumer deviceh]h&device pointer for the consumer device}(hj<(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8(hMOhj9(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj8(hMOhj(ubj)}(h%``const char *src`` source node name h](j)}(h``const char *src``h]j)}(hj\(h]hconst char *src}(hj^(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ(ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMPhjV(ubj)}(hhh]h)}(hsource node nameh]hsource node name}(hju(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq(hMPhjr(ubah}(h]h ]h"]h$]h&]uh1jhjV(ubeh}(h]h ]h"]h$]h&]uh1jhjq(hMPhj(ubj)}(h*``const char *dst`` destination node name h](j)}(h``const char *dst``h]j)}(hj(h]hconst char *dst}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMQhj(ubj)}(hhh]h)}(hdestination node nameh]hdestination node name}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMQhj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMQhj(ubeh}(h]h ]h"]h$]h&]uh1jhj'ubh)}(h**Description**h]jZ)}(hj(h]h Description}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj(ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMShj'ubh)}(hThis function will search for a path between two endpoints and return an icc_path handle on success. Use icc_put() to release constraints when they are not needed anymore.h]hThis function will search for a path between two endpoints and return an icc_path handle on success. Use icc_put() to release constraints when they are not needed anymore.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMRhj'ubh)}(h **Return**h]jZ)}(hj(h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj(ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMVhj'ubh)}(h]icc_path pointer on success or ERR_PTR() on error. NULL is returned when the API is disabled.h]h]icc_path pointer on success or ERR_PTR() on error. NULL is returned when the API is disabled.}(hj )hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMWhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhj+!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_set_tag (C function) c.icc_set_taghNtauh1jhj+!hhhNhNubj)}(hhh](j)}(h1void icc_set_tag (struct icc_path *path, u32 tag)h]j)}(h0void icc_set_tag(struct icc_path *path, u32 tag)h](j )}(hvoidh]hvoid}(hj<)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj8)hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chM~ubj)}(h h]h }(hjK)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8)hhhjJ)hM~ubj)}(h icc_set_tagh]j)}(h icc_set_tagh]h icc_set_tag}(hj])hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY)ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj8)hhhjJ)hM~ubj )}(h (struct icc_path *path, u32 tag)h](j )}(hstruct icc_path *pathh](j)}(hjh]hstruct}(hjy)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju)ubh)}(hhh]j)}(hicc_pathh]hicc_path}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetj)modnameN classnameNjn jq )}jt ]jw )}jj j_)sb c.icc_set_tagasbuh1hhju)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju)ubj )}(hj h]h*}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hju)ubj)}(hpathh]hpath}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhju)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjq)ubj )}(hu32 tagh](h)}(hhh]j)}(hu32h]hu32}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetj)modnameN classnameNjn jq )}jt ]j) c.icc_set_tagasbuh1hhj)ubj)}(h h]h }(hj *hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(htagh]htag}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjq)ubeh}(h]h ]h"]h$]h&]hhuh1j hj8)hhhjJ)hM~ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj4)hhhjJ)hM~ubah}(h]j/)ah ](jj eh"]h$]h&]j$j%)j&huh1jhjJ)hM~hj1)hhubj()}(hhh]h)}(hset an optional tag on a pathh]hset an optional tag on a path}(hjD*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chM~hjA*hhubah}(h]h ]h"]h$]h&]uh1j'hj1)hhhjJ)hM~ubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJj\*jKj\*jLjMjNuh1jhhhj+!hNhNubjP)}(hX **Parameters** ``struct icc_path *path`` the path we want to tag ``u32 tag`` the tag value **Description** This function allows consumers to append a tag to the requests associated with a path, so that a different aggregation could be done based on this tag.h](h)}(h**Parameters**h]jZ)}(hjf*h]h Parameters}(hjh*hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjd*ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj`*ubj)}(hhh](j)}(h2``struct icc_path *path`` the path we want to tag h](j)}(h``struct icc_path *path``h]j)}(hj*h]hstruct icc_path *path}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj*ubj)}(hhh]h)}(hthe path we want to tagh]hthe path we want to tag}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj|*ubj)}(h``u32 tag`` the tag value h](j)}(h ``u32 tag``h]j)}(hj*h]hu32 tag}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj*ubj)}(hhh]h)}(h the tag valueh]h the tag value}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj|*ubeh}(h]h ]h"]h$]h&]uh1jhj`*ubh)}(h**Description**h]jZ)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj*ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj`*ubh)}(hThis function allows consumers to append a tag to the requests associated with a path, so that a different aggregation could be done based on this tag.h]hThis function allows consumers to append a tag to the requests associated with a path, so that a different aggregation could be done based on this tag.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj`*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhj+!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_get_name (C function)c.icc_get_namehNtauh1jhj+!hhhNhNubj)}(hhh](j)}(h1const char * icc_get_name (struct icc_path *path)h]j)}(h/const char *icc_get_name(struct icc_path *path)h](j)}(hjh]hconst}(hj>+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:+hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMubj)}(h h]h }(hjL+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:+hhhjK+hMubj )}(hcharh]hchar}(hjZ+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:+hhhjK+hMubj)}(h h]h }(hjh+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:+hhhjK+hMubj )}(hj h]h*}(hjv+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj:+hhhjK+hMubj)}(h icc_get_nameh]j)}(h icc_get_nameh]h icc_get_name}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj:+hhhjK+hMubj )}(h(struct icc_path *path)h]j )}(hstruct icc_path *pathh](j)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(hicc_pathh]hicc_path}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetj+modnameN classnameNjn jq )}jt ]jw )}jj j+sbc.icc_get_nameasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj )}(hj h]h*}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj+ubj)}(hpathh]hpath}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+ubah}(h]h ]h"]h$]h&]hhuh1j hj:+hhhjK+hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj6+hhhjK+hMubah}(h]j1+ah ](jj eh"]h$]h&]j$j%)j&huh1jhjK+hMhj3+hhubj()}(hhh]h)}(hGet name of the icc pathh]hGet name of the icc path}(hj&,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj#,hhubah}(h]h ]h"]h$]h&]uh1j'hj3+hhhjK+hMubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJj>,jKj>,jLjMjNuh1jhhhj+!hNhNubjP)}(h**Parameters** ``struct icc_path *path`` interconnect path **Description** This function is used by an interconnect consumer to get the name of the icc path. Returns a valid pointer on success, or NULL otherwise.h](h)}(h**Parameters**h]jZ)}(hjH,h]h Parameters}(hjJ,hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjF,ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhjB,ubj)}(hhh]j)}(h,``struct icc_path *path`` interconnect path h](j)}(h``struct icc_path *path``h]j)}(hjg,h]hstruct icc_path *path}(hji,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje,ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhja,ubj)}(hhh]h)}(hinterconnect pathh]hinterconnect path}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|,hMhj},ubah}(h]h ]h"]h$]h&]uh1jhja,ubeh}(h]h ]h"]h$]h&]uh1jhj|,hMhj^,ubah}(h]h ]h"]h$]h&]uh1jhjB,ubh)}(h**Description**h]jZ)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj,ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhjB,ubh)}(hRThis function is used by an interconnect consumer to get the name of the icc path.h]hRThis function is used by an interconnect consumer to get the name of the icc path.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhjB,ubh)}(h6Returns a valid pointer on success, or NULL otherwise.h]h6Returns a valid pointer on success, or NULL otherwise.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhjB,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhj+!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_set_bw (C function) c.icc_set_bwhNtauh1jhj+!hhhNhNubj)}(hhh](j)}(h?int icc_set_bw (struct icc_path *path, u32 avg_bw, u32 peak_bw)h]j)}(h>int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)h](j )}(hinth]hint}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj-hMubj)}(h icc_set_bwh]j)}(h icc_set_bwh]h icc_set_bw}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj,hhhj-hMubj )}(h0(struct icc_path *path, u32 avg_bw, u32 peak_bw)h](j )}(hstruct icc_path *pathh](j)}(hjh]hstruct}(hj3-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/-ubj)}(h h]h }(hj@-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/-ubh)}(hhh]j)}(hicc_pathh]hicc_path}(hjQ-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN-ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetjS-modnameN classnameNjn jq )}jt ]jw )}jj j-sb c.icc_set_bwasbuh1hhj/-ubj)}(h h]h }(hjq-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/-ubj )}(hj h]h*}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/-ubj)}(hpathh]hpath}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+-ubj )}(h u32 avg_bwh](h)}(hhh]j)}(hu32h]hu32}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetj-modnameN classnameNjn jq )}jt ]jm- c.icc_set_bwasbuh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(havg_bwh]havg_bw}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+-ubj )}(h u32 peak_bwh](h)}(hhh]j)}(hu32h]hu32}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetj-modnameN classnameNjn jq )}jt ]jm- c.icc_set_bwasbuh1hhj-ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hpeak_bwh]hpeak_bw}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+-ubeh}(h]h ]h"]h$]h&]hhuh1j hj,hhhj-hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj,hhhj-hMubah}(h]j,ah ](jj eh"]h$]h&]j$j%)j&huh1jhj-hMhj,hhubj()}(hhh]h)}(h1set bandwidth constraints on an interconnect pathh]h1set bandwidth constraints on an interconnect path}(hjF.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhjC.hhubah}(h]h ]h"]h$]h&]uh1j'hj,hhhj-hMubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJj^.jKj^.jLjMjNuh1jhhhj+!hNhNubjP)}(hX**Parameters** ``struct icc_path *path`` interconnect path ``u32 avg_bw`` average bandwidth in kilobytes per second ``u32 peak_bw`` peak bandwidth in kilobytes per second **Description** This function is used by an interconnect consumer to express its own needs in terms of bandwidth for a previously requested path between two endpoints. The requests are aggregated and each node is updated accordingly. The entire path is locked by a mutex to ensure that the set() is completed. The **path** can be NULL when the "interconnects" DT properties is missing, which will mean that no constraints will be set. Returns 0 on success, or an appropriate error code otherwise.h](h)}(h**Parameters**h]jZ)}(hjh.h]h Parameters}(hjj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjf.ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhjb.ubj)}(hhh](j)}(h,``struct icc_path *path`` interconnect path h](j)}(h``struct icc_path *path``h]j)}(hj.h]hstruct icc_path *path}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj.ubj)}(hhh]h)}(hinterconnect pathh]hinterconnect path}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj~.ubj)}(h9``u32 avg_bw`` average bandwidth in kilobytes per second h](j)}(h``u32 avg_bw``h]j)}(hj.h]h u32 avg_bw}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj.ubj)}(hhh]h)}(h)average bandwidth in kilobytes per secondh]h)average bandwidth in kilobytes per second}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMhj~.ubj)}(h7``u32 peak_bw`` peak bandwidth in kilobytes per second h](j)}(h``u32 peak_bw``h]j)}(hj.h]h u32 peak_bw}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj.ubj)}(hhh]h)}(h&peak bandwidth in kilobytes per secondh]h&peak bandwidth in kilobytes per second}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj/hMhj~.ubeh}(h]h ]h"]h$]h&]uh1jhjb.ubh)}(h**Description**h]jZ)}(hj4/h]h Description}(hj6/hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj2/ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhjb.ubh)}(hXThis function is used by an interconnect consumer to express its own needs in terms of bandwidth for a previously requested path between two endpoints. The requests are aggregated and each node is updated accordingly. The entire path is locked by a mutex to ensure that the set() is completed. The **path** can be NULL when the "interconnects" DT properties is missing, which will mean that no constraints will be set.h](hX*This function is used by an interconnect consumer to express its own needs in terms of bandwidth for a previously requested path between two endpoints. The requests are aggregated and each node is updated accordingly. The entire path is locked by a mutex to ensure that the set() is completed. The }(hjJ/hhhNhNubjZ)}(h**path**h]hpath}(hjR/hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjJ/ubht can be NULL when the “interconnects” DT properties is missing, which will mean that no constraints will be set.}(hjJ/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhjb.ubh)}(h=Returns 0 on success, or an appropriate error code otherwise.h]h=Returns 0 on success, or an appropriate error code otherwise.}(hjk/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhjb.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhj+!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_put (C function) c.icc_puthNtauh1jhj+!hhhNhNubj)}(hhh](j)}(h$void icc_put (struct icc_path *path)h]j)}(h#void icc_put(struct icc_path *path)h](j )}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chM ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj/hM ubj)}(hicc_puth]j)}(hicc_puth]hicc_put}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj/hhhj/hM ubj )}(h(struct icc_path *path)h]j )}(hstruct icc_path *pathh](j)}(hjh]hstruct}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubh)}(hhh]j)}(hicc_pathh]hicc_path}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetj/modnameN classnameNjn jq )}jt ]jw )}jj j/sb c.icc_putasbuh1hhj/ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj )}(hj h]h*}(hj#0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubj)}(hpathh]hpath}(hj00hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj/ubah}(h]h ]h"]h$]h&]hhuh1j hj/hhhj/hM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj/hhhj/hM ubah}(h]j/ah ](jj eh"]h$]h&]j$j%)j&huh1jhj/hM hj/hhubj()}(hhh]h)}(h%release the reference to the icc_pathh]h%release the reference to the icc_path}(hjZ0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chM hjW0hhubah}(h]h ]h"]h$]h&]uh1j'hj/hhhj/hM ubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJjr0jKjr0jLjMjNuh1jhhhj+!hNhNubjP)}(h**Parameters** ``struct icc_path *path`` interconnect path **Description** Use this function to release the constraints on a path when the path is no longer needed. The constraints will be re-aggregated.h](h)}(h**Parameters**h]jZ)}(hj|0h]h Parameters}(hj~0hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjz0ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhjv0ubj)}(hhh]j)}(h,``struct icc_path *path`` interconnect path h](j)}(h``struct icc_path *path``h]j)}(hj0h]hstruct icc_path *path}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhj0ubj)}(hhh]h)}(hinterconnect pathh]hinterconnect path}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hMhj0ubah}(h]h ]h"]h$]h&]uh1jhjv0ubh)}(h**Description**h]jZ)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj0ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhjv0ubh)}(hUse this function to release the constraints on a path when the path is no longer needed. The constraints will be re-aggregated.h]hUse this function to release the constraints on a path when the path is no longer needed. The constraints will be re-aggregated.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:100: ./drivers/interconnect/core.chMhjv0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhj+!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jof_icc_bulk_get (C function)c.of_icc_bulk_gethNtauh1jhj+!hhhNhNubj)}(hhh](j)}(hTint of_icc_bulk_get (struct device *dev, int num_paths, struct icc_bulk_data *paths)h]j)}(hSint of_icc_bulk_get(struct device *dev, int num_paths, struct icc_bulk_data *paths)h](j )}(hinth]hint}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chKubj)}(h h]h }(hj*1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhj)1hKubj)}(hof_icc_bulk_geth]j)}(hof_icc_bulk_geth]hof_icc_bulk_get}(hj<1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj81ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj1hhhj)1hKubj )}(h@(struct device *dev, int num_paths, struct icc_bulk_data *paths)h](j )}(hstruct device *devh](j)}(hjh]hstruct}(hjX1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT1ubj)}(h h]h }(hje1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT1ubh)}(hhh]j)}(hdeviceh]hdevice}(hjv1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs1ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetjx1modnameN classnameNjn jq )}jt ]jw )}jj j>1sbc.of_icc_bulk_getasbuh1hhjT1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT1ubj )}(hj h]h*}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjT1ubj)}(hdevh]hdev}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT1ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjP1ubj )}(h int num_pathsh](j )}(hinth]hint}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h num_pathsh]h num_paths}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjP1ubj )}(hstruct icc_bulk_data *pathsh](j)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hj 2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j)}(h icc_bulk_datah]h icc_bulk_data}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetj2modnameN classnameNjn jq )}jt ]j1c.of_icc_bulk_getasbuh1hhj1ubj)}(h h]h }(hj;2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj )}(hj h]h*}(hjI2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1ubj)}(hpathsh]hpaths}(hjV2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjP1ubeh}(h]h ]h"]h$]h&]hhuh1j hj1hhhj)1hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj1hhhj)1hKubah}(h]j1ah ](jj eh"]h$]h&]j$j%)j&huh1jhj)1hKhj1hhubj()}(hhh]h)}(hget interconnect pathsh]hget interconnect paths}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chKhj}2hhubah}(h]h ]h"]h$]h&]uh1j'hj1hhhj)1hKubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJj2jKj2jLjMjNuh1jhhhj+!hNhNubjP)}(hX**Parameters** ``struct device *dev`` the device requesting the path ``int num_paths`` the number of icc_bulk_data ``struct icc_bulk_data *paths`` the table with the paths we want to get **Description** Returns 0 on success or negative errno otherwise.h](h)}(h**Parameters**h]jZ)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj2ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK hj2ubj)}(hhh](j)}(h6``struct device *dev`` the device requesting the path h](j)}(h``struct device *dev``h]j)}(hj2h]hstruct device *dev}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK hj2ubj)}(hhh]h)}(hthe device requesting the pathh]hthe device requesting the path}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hK hj2ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj2hK hj2ubj)}(h.``int num_paths`` the number of icc_bulk_data h](j)}(h``int num_paths``h]j)}(hj2h]h int num_paths}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK hj2ubj)}(hhh]h)}(hthe number of icc_bulk_datah]hthe number of icc_bulk_data}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hK hj3ubah}(h]h ]h"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]uh1jhj3hK hj2ubj)}(hH``struct icc_bulk_data *paths`` the table with the paths we want to get h](j)}(h``struct icc_bulk_data *paths``h]j)}(hj33h]hstruct icc_bulk_data *paths}(hj53hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj13ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK hj-3ubj)}(hhh]h)}(h'the table with the paths we want to geth]h'the table with the paths we want to get}(hjL3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH3hK hjI3ubah}(h]h ]h"]h$]h&]uh1jhj-3ubeh}(h]h ]h"]h$]h&]uh1jhjH3hK hj2ubeh}(h]h ]h"]h$]h&]uh1jhj2ubh)}(h**Description**h]jZ)}(hjn3h]h Description}(hjp3hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhjl3ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK hj2ubh)}(h1Returns 0 on success or negative errno otherwise.h]h1Returns 0 on success or negative errno otherwise.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK hj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhj+!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_bulk_put (C function)c.icc_bulk_puthNtauh1jhj+!hhhNhNubj)}(hhh](j)}(h>void icc_bulk_put (int num_paths, struct icc_bulk_data *paths)h]j)}(h=void icc_bulk_put(int num_paths, struct icc_bulk_data *paths)h](j )}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK*ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3hhhj3hK*ubj)}(h icc_bulk_puth]j)}(h icc_bulk_puth]h icc_bulk_put}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj3hhhj3hK*ubj )}(h,(int num_paths, struct icc_bulk_data *paths)h](j )}(h int num_pathsh](j )}(hinth]hint}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h num_pathsh]h num_paths}(hj 4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj3ubj )}(hstruct icc_bulk_data *pathsh](j)}(hjh]hstruct}(hj%4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!4ubj)}(h h]h }(hj24hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!4ubh)}(hhh]j)}(h icc_bulk_datah]h icc_bulk_data}(hjC4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@4ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetjE4modnameN classnameNjn jq )}jt ]jw )}jj j3sbc.icc_bulk_putasbuh1hhj!4ubj)}(h h]h }(hjc4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!4ubj )}(hj h]h*}(hjq4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj!4ubj)}(hpathsh]hpaths}(hj~4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj3ubeh}(h]h ]h"]h$]h&]hhuh1j hj3hhhj3hK*ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj3hhhj3hK*ubah}(h]j3ah ](jj eh"]h$]h&]j$j%)j&huh1jhj3hK*hj3hhubj()}(hhh]h)}(h put a list of interconnect pathsh]h put a list of interconnect paths}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK*hj4hhubah}(h]h ]h"]h$]h&]uh1j'hj3hhhj3hK*ubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJj4jKj4jLjMjNuh1jhhhj+!hNhNubjP)}(h**Parameters** ``int num_paths`` the number of icc_bulk_data ``struct icc_bulk_data *paths`` the icc_bulk_data table with the paths being puth](h)}(h**Parameters**h]jZ)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj4ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK.hj4ubj)}(hhh](j)}(h.``int num_paths`` the number of icc_bulk_data h](j)}(h``int num_paths``h]j)}(hj4h]h int num_paths}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK+hj4ubj)}(hhh]h)}(hthe number of icc_bulk_datah]hthe number of icc_bulk_data}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hK+hj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj4hK+hj4ubj)}(hP``struct icc_bulk_data *paths`` the icc_bulk_data table with the paths being puth](j)}(h``struct icc_bulk_data *paths``h]j)}(hj"5h]hstruct icc_bulk_data *paths}(hj$5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 5ubah}(h]h ]h"]h$]h&]uh1jhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK-hj5ubj)}(hhh]h)}(h0the icc_bulk_data table with the paths being puth]h0the icc_bulk_data table with the paths being put}(hj;5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK,hj85ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhj75hK-hj4ubeh}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jOhj+!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jicc_bulk_set_bw (C function)c.icc_bulk_set_bwhNtauh1jhj+!hhhNhNubj)}(hhh](j)}(hFint icc_bulk_set_bw (int num_paths, const struct icc_bulk_data *paths)h]j)}(hEint icc_bulk_set_bw(int num_paths, const struct icc_bulk_data *paths)h](j )}(hinth]hint}(hj|5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjx5hhhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK8ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjx5hhhj5hK8ubj)}(hicc_bulk_set_bwh]j)}(hicc_bulk_set_bwh]hicc_bulk_set_bw}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjx5hhhj5hK8ubj )}(h2(int num_paths, const struct icc_bulk_data *paths)h](j )}(h int num_pathsh](j )}(hinth]hint}(hj5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h num_pathsh]h num_paths}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj5ubj )}(h!const struct icc_bulk_data *pathsh](j)}(hjh]hconst}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hjh]hstruct}(hj 6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(h icc_bulk_datah]h icc_bulk_data}(hj'6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$6ubah}(h]h ]h"]h$]h&] refdomainjDreftypejj reftargetj)6modnameN classnameNjn jq )}jt ]jw )}jj j5sbc.icc_bulk_set_bwasbuh1hhj5ubj)}(h h]h }(hjG6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj )}(hj h]h*}(hjU6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj5ubj)}(hpathsh]hpaths}(hjb6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj5ubeh}(h]h ]h"]h$]h&]hhuh1j hjx5hhhj5hK8ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjt5hhhj5hK8ubah}(h]jo5ah ](jj eh"]h$]h&]j$j%)j&huh1jhj5hK8hjq5hhubj()}(hhh]h)}(hset bandwidth to a set of pathsh]hset bandwidth to a set of paths}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chK8hj6hhubah}(h]h ]h"]h$]h&]uh1j'hjq5hhhj5hK8ubeh}(h]h ](jDfunctioneh"]h$]h&]jIjDjJj6jKj6jLjMjNuh1jhhhj+!hNhNubjP)}(h**Parameters** ``int num_paths`` the number of icc_bulk_data ``const struct icc_bulk_data *paths`` the icc_bulk_data table containing the paths and bandwidth **Description** Returns 0 on success or negative errno otherwise.h](h)}(h**Parameters**h]jZ)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jYhj6ubah}(h]h ]h"]h$]h&]uh1hhd/var/lib/git/docbuild/linux/Documentation/driver-api/interconnect:105: ./drivers/interconnect/bulk.chKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKnhj=hhubh)}(h8``/sys/kernel/debug/interconnect/interconnect_summary``:h](j)}(h7``/sys/kernel/debug/interconnect/interconnect_summary``h]h3/sys/kernel/debug/interconnect/interconnect_summary}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh:}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKrhj=hhubh)}(hShow all interconnect nodes in the system with their aggregated bandwidth request. Indented under each node show bandwidth requests from each device.h]hShow all interconnect nodes in the system with their aggregated bandwidth request. Indented under each node show bandwidth requests from each device.}(hj6>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKthj=hhubh)}(h6``/sys/kernel/debug/interconnect/interconnect_graph``:h](j)}(h5``/sys/kernel/debug/interconnect/interconnect_graph``h]h1/sys/kernel/debug/interconnect/interconnect_graph}(hjH>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD>ubh:}(hjD>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKwhj=hhubh)}(hXShow the interconnect graph in the graphviz dot format. It shows all interconnect nodes and links in the system and groups together nodes from the same provider as subgraphs. The format is human-readable and can also be piped through dot to generate diagrams in many graphical formats::h]hXShow the interconnect graph in the graphviz dot format. It shows all interconnect nodes and links in the system and groups together nodes from the same provider as subgraphs. The format is human-readable and can also be piped through dot to generate diagrams in many graphical formats:}(hj`>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKyhj=hhubj)}(hf$ cat /sys/kernel/debug/interconnect/interconnect_graph | \ dot -Tsvg > interconnect_graph.svgh]hf$ cat /sys/kernel/debug/interconnect/interconnect_graph | \ dot -Tsvg > interconnect_graph.svg}hjn>sbah}(h]h ]h"]h$]h&]hhuh1jhhhK~hj=hhubh)}(hX%The ``test-client`` directory provides interfaces for issuing BW requests to any arbitrary path. Note that for safety reasons, this feature is disabled by default without a Kconfig to enable it. Enabling it requires code changes to ``#define INTERCONNECT_ALLOW_WRITE_DEBUGFS``. Example usage::h](hThe }(hj|>hhhNhNubj)}(h``test-client``h]h test-client}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|>ubh directory provides interfaces for issuing BW requests to any arbitrary path. Note that for safety reasons, this feature is disabled by default without a Kconfig to enable it. Enabling it requires code changes to }(hj|>hhhNhNubj)}(h,``#define INTERCONNECT_ALLOW_WRITE_DEBUGFS``h]h(#define INTERCONNECT_ALLOW_WRITE_DEBUGFS}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|>ubh. Example usage:}(hj|>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj=hhubj)}(hX'cd /sys/kernel/debug/interconnect/test-client/ # Configure node endpoints for the path from CPU to DDR on # qcom/sm8550. echo chm_apps > src_node echo ebi > dst_node # Get path between src_node and dst_node. This is only # necessary after updating the node endpoints. echo 1 > get # Set desired BW to 1GBps avg and 2GBps peak. echo 1000000 > avg_bw echo 2000000 > peak_bw # Vote for avg_bw and peak_bw on the latest path from "get". # Voting for multiple paths is possible by repeating this # process for different nodes endpoints. echo 1 > commith]hX'cd /sys/kernel/debug/interconnect/test-client/ # Configure node endpoints for the path from CPU to DDR on # qcom/sm8550. echo chm_apps > src_node echo ebi > dst_node # Get path between src_node and dst_node. This is only # necessary after updating the node endpoints. echo 1 > get # Set desired BW to 1GBps avg and 2GBps peak. echo 1000000 > avg_bw echo 2000000 > peak_bw # Vote for avg_bw and peak_bw on the latest path from "get". # Voting for multiple paths is possible by repeating this # process for different nodes endpoints. echo 1 > commit}hj>sbah}(h]h ]h"]h$]h&]hhuh1jhhhKhj=hhubeh}(h]interconnect-debugfs-interfacesah ]h"]interconnect debugfs interfacesah$]h&]uh1hhhhhhhhKlubeh}(h]%generic-system-interconnect-subsystemah ]h"]%generic system interconnect subsystemah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj>error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j>j>j/j,jjj(!j%!j=j=j>j>u nametypes}(j>j/jj(!j=j>uh}(j>hj,hjj2j%!jjjj4j9jvj{jjj( j- j j j!j&j?jDjj jjjjjjjQjVjjjSjXjjj=j+!jV!j[!j#j#j &j%&j/)j4)j1+j6+j,j,j/j/j1j1j3j3jo5jt5jy7j~7j9j9jg;jl;j>j=u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.