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/core-api/irq/irq-domainmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/zh_TW/core-api/irq/irq-domainmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/it_IT/core-api/irq/irq-domainmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ja_JP/core-api/irq/irq-domainmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ko_KR/core-api/irq/irq-domainmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/pt_BR/core-api/irq/irq-domainmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/sp_SP/core-api/irq/irq-domainmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h/The irq_domain Interrupt Number Mapping Libraryh]h/The irq_domain Interrupt Number Mapping Library}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhE/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain.rsthKubh paragraph)}(hXXThe current design of the Linux kernel uses a single large number space where each separate IRQ source is assigned a unique number. This is simple when there is only one interrupt controller. But in systems with multiple interrupt controllers, the kernel must ensure that each one gets assigned non-overlapping allocations of Linux IRQ numbers.h]hXXThe current design of the Linux kernel uses a single large number space where each separate IRQ source is assigned a unique number. This is simple when there is only one interrupt controller. But in systems with multiple interrupt controllers, the kernel must ensure that each one gets assigned non-overlapping allocations of Linux IRQ numbers.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hXKThe number of interrupt controllers registered as unique irqchips shows a rising tendency. For example, subdrivers of different kinds such as GPIO controllers avoid reimplementing identical callback mechanisms as the IRQ core system by modelling their interrupt handlers as irqchips. I.e. in effect cascading interrupt controllers.h]hXKThe number of interrupt controllers registered as unique irqchips shows a rising tendency. For example, subdrivers of different kinds such as GPIO controllers avoid reimplementing identical callback mechanisms as the IRQ core system by modelling their interrupt handlers as irqchips. I.e. in effect cascading interrupt controllers.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hX$So in the past, IRQ numbers could be chosen so that they match the hardware IRQ line into the root interrupt controller (i.e. the component actually firing the interrupt line to the CPU). Nowadays, this number is just a number and the number has no relationship to hardware interrupt numbers.h]hX$So in the past, IRQ numbers could be chosen so that they match the hardware IRQ line into the root interrupt controller (i.e. the component actually firing the interrupt line to the CPU). Nowadays, this number is just a number and the number has no relationship to hardware interrupt numbers.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hFor this reason, we need a mechanism to separate controller-local interrupt numbers, called hardware IRQs, from Linux IRQ numbers.h]hFor this reason, we need a mechanism to separate controller-local interrupt numbers, called hardware IRQs, from Linux IRQ numbers.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hThe irq_alloc_desc*() and irq_free_desc*() APIs provide allocation of IRQ numbers, but they don't provide any support for reverse mapping of the controller-local IRQ (hwirq) number into the Linux IRQ number space.h]hThe irq_alloc_desc*() and irq_free_desc*() APIs provide allocation of IRQ numbers, but they don’t provide any support for reverse mapping of the controller-local IRQ (hwirq) number into the Linux IRQ number space.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hThe irq_domain library adds a mapping between hwirq and IRQ numbers on top of the irq_alloc_desc*() API. An irq_domain to manage the mapping is preferred over interrupt controller drivers open coding their own reverse mapping scheme.h]hThe irq_domain library adds a mapping between hwirq and IRQ numbers on top of the irq_alloc_desc*() API. An irq_domain to manage the mapping is preferred over interrupt controller drivers open coding their own reverse mapping scheme.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hX5irq_domain also implements a translation from an abstract struct irq_fwspec to hwirq numbers (Device Tree, non-DT firmware node, ACPI GSI, and software node so far), and can be easily extended to support other IRQ topology data sources. The implementation is performed without any extra platform support code.h]hX5irq_domain also implements a translation from an abstract struct irq_fwspec to hwirq numbers (Device Tree, non-DT firmware node, ACPI GSI, and software node so far), and can be easily extended to support other IRQ topology data sources. The implementation is performed without any extra platform support code.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hhhhubh)}(hhh](h)}(hirq_domain Usageh]hirq_domain Usage}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hhhhhK,ubh)}(hXstruct irq_domain could be defined as an irq domain controller. That is, it handles the mapping between hardware and virtual interrupt numbers for a given interrupt domain. The domain structure is generally created by the PIC code for a given PIC instance (though a domain can cover more than one PIC if they have a flat number model). It is the domain callbacks that are responsible for setting the irq_chip on a given irq_desc after it has been mapped.h]hXstruct irq_domain could be defined as an irq domain controller. That is, it handles the mapping between hardware and virtual interrupt numbers for a given interrupt domain. The domain structure is generally created by the PIC code for a given PIC instance (though a domain can cover more than one PIC if they have a flat number model). It is the domain callbacks that are responsible for setting the irq_chip on a given irq_desc after it has been mapped.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj/hhubh)}(hXfThe host code and data structures use a fwnode_handle pointer to identify the domain. In some cases, and in order to preserve source code compatibility, this fwnode pointer is "upgraded" to a DT device_node. For those firmware infrastructures that do not provide a unique identifier for an interrupt controller, the irq_domain code offers a fwnode allocator.h]hXjThe host code and data structures use a fwnode_handle pointer to identify the domain. In some cases, and in order to preserve source code compatibility, this fwnode pointer is “upgraded” to a DT device_node. For those firmware infrastructures that do not provide a unique identifier for an interrupt controller, the irq_domain code offers a fwnode allocator.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hj/hhubh)}(hXiAn interrupt controller driver creates and registers a struct irq_domain by calling one of the irq_domain_create_*() functions (each mapping method has a different allocator function, more on that later). The function will return a pointer to the struct irq_domain on success. The caller must provide the allocator function with a struct irq_domain_ops pointer.h]hXiAn interrupt controller driver creates and registers a struct irq_domain by calling one of the irq_domain_create_*() functions (each mapping method has a different allocator function, more on that later). The function will return a pointer to the struct irq_domain on success. The caller must provide the allocator function with a struct irq_domain_ops pointer.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKubah}(h]h ]h"]h$]h&]refdocj refdomainjreftypemember refexplicitrefwarnjirq_data.hwirquh1hhhhK^hj6ubh.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK^hj/hhubeh}(h]irq-domain-usageah ]h"]irq_domain usageah$]h&]uh1hhhhhhhhK,ubh)}(hhh](h)}(hTypes of irq_domain Mappingsh]hTypes of irq_domain Mappings}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohhhhhKdubh)}(hThere are several mechanisms available for reverse mapping from hwirq to Linux IRQ, and each mechanism uses a different allocation function. Which reverse map type should be used depends on the use case. Each of the reverse map types are described below:h]hThere are several mechanisms available for reverse mapping from hwirq to Linux IRQ, and each mechanism uses a different allocation function. Which reverse map type should be used depends on the use case. Each of the reverse map types are described below:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKfhjohhubh)}(hhh](h)}(hLinearh]hLinear}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKlubh literal_block)}(hirq_domain_create_linear()h]hirq_domain_create_linear()}hjsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhKphjhhubh)}(hThe linear reverse map maintains a fixed-size table indexed by the hwirq number. When a hwirq is mapped, an irq_desc is allocated for the hwirq, and the IRQ number is stored in the table.h]hThe linear reverse map maintains a fixed-size table indexed by the hwirq number. When a hwirq is mapped, an irq_desc is allocated for the hwirq, and the IRQ number is stored in the table.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKrhjhhubh)}(hXCThe Linear map is a good choice when the maximum number of hwirqs is fixed and a relatively small number (~ < 256). The advantages of this map are fixed-time lookup for IRQ numbers, and irq_descs are only allocated for in-use IRQs. The disadvantage is that the table must be as large as the largest possible hwirq number.h]hXCThe Linear map is a good choice when the maximum number of hwirqs is fixed and a relatively small number (~ < 256). The advantages of this map are fixed-time lookup for IRQ numbers, and irq_descs are only allocated for in-use IRQs. The disadvantage is that the table must be as large as the largest possible hwirq number.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKvhjhhubh)}(h2The majority of drivers should use the Linear map.h]h2The majority of drivers should use the Linear map.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK|hjhhubeh}(h]linearah ]h"]linearah$]h&]uh1hhjohhhhhKlubh)}(hhh](h)}(hTreeh]hTree}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubj)}(hirq_domain_create_tree()h]hirq_domain_create_tree()}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubh)}(hThe irq_domain maintains a radix tree map from hwirq numbers to Linux IRQs. When an hwirq is mapped, an irq_desc is allocated and the hwirq is used as the lookup key for the radix tree.h]hThe irq_domain maintains a radix tree map from hwirq numbers to Linux IRQs. When an hwirq is mapped, an irq_desc is allocated and the hwirq is used as the lookup key for the radix tree.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hThe Tree map is a good choice if the hwirq number can be very large since it doesn't need to allocate a table as large as the largest hwirq number. The disadvantage is that hwirq to IRQ number lookup is dependent on how many entries are in the table.h]hThe Tree map is a good choice if the hwirq number can be very large since it doesn’t need to allocate a table as large as the largest hwirq number. The disadvantage is that hwirq to IRQ number lookup is dependent on how many entries are in the table.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h*Very few drivers should need this mapping.h]h*Very few drivers should need this mapping.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]treeah ]h"]treeah$]h&]uh1hhjohhhhhKubh)}(hhh](h)}(hNo Maph]hNo Map}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hhhhhKubj)}(hirq_domain_create_nomap()h]hirq_domain_create_nomap()}hjEsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhj4hhubh)}(hXoThe No Map mapping is to be used when the hwirq number is programmable in the hardware. In this case it is best to program the Linux IRQ number into the hardware itself so that no mapping is required. Calling irq_create_direct_mapping() will allocate a Linux IRQ number and call the .map() callback so that driver can program the Linux IRQ number into the hardware.h]hXoThe No Map mapping is to be used when the hwirq number is programmable in the hardware. In this case it is best to program the Linux IRQ number into the hardware itself so that no mapping is required. Calling irq_create_direct_mapping() will allocate a Linux IRQ number and call the .map() callback so that driver can program the Linux IRQ number into the hardware.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj4hhubh)}(hMost drivers cannot use this mapping, and it is now gated on the CONFIG_IRQ_DOMAIN_NOMAP option. Please refrain from introducing new users of this API.h]hMost drivers cannot use this mapping, and it is now gated on the CONFIG_IRQ_DOMAIN_NOMAP option. Please refrain from introducing new users of this API.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj4hhubeh}(h]no-mapah ]h"]no mapah$]h&]uh1hhjohhhhhKubh)}(hhh](h)}(hLegacyh]hLegacy}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhhhhhKubj)}(h5irq_domain_create_simple() irq_domain_create_legacy()h]h5irq_domain_create_simple() irq_domain_create_legacy()}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjwhhubh)}(hXThe Legacy mapping is a special case for drivers that already have a range of irq_descs allocated for the hwirqs. It is used when the driver cannot be immediately converted to use the Linear mapping. For example, many embedded system board support files use a set of #defines for IRQ numbers that are passed to struct device registrations. In that case the Linux IRQ numbers cannot be dynamically assigned and the Legacy mapping should be used.h]hXThe Legacy mapping is a special case for drivers that already have a range of irq_descs allocated for the hwirqs. It is used when the driver cannot be immediately converted to use the Linear mapping. For example, many embedded system board support files use a set of #defines for IRQ numbers that are passed to struct device registrations. In that case the Linux IRQ numbers cannot be dynamically assigned and the Legacy mapping should be used.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjwhhubh)}(hAs the name implies, the \*_legacy() functions are deprecated and only exist to ease the support of ancient platforms. No new users should be added. Same goes for the \*_simple() functions when their use results in the legacy behaviour.h]hAs the name implies, the *_legacy() functions are deprecated and only exist to ease the support of ancient platforms. No new users should be added. Same goes for the *_simple() functions when their use results in the legacy behaviour.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjwhhubh)}(hXzThe Legacy map assumes a contiguous range of IRQ numbers has already been allocated for the controller and that the IRQ number can be calculated by adding a fixed offset to the hwirq number, and visa-versa. The disadvantage is that it requires the interrupt controller to manage IRQ allocations and it requires an irq_desc to be allocated for every hwirq, even if it is unused.h]hXzThe Legacy map assumes a contiguous range of IRQ numbers has already been allocated for the controller and that the IRQ number can be calculated by adding a fixed offset to the hwirq number, and visa-versa. The disadvantage is that it requires the interrupt controller to manage IRQ allocations and it requires an irq_desc to be allocated for every hwirq, even if it is unused.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjwhhubh)}(hThe Legacy map should only be used if fixed IRQ mappings must be supported. For example, ISA controllers would use the Legacy map for mapping Linux IRQs 0-15 so that existing ISA drivers get the correct IRQ numbers.h]hThe Legacy map should only be used if fixed IRQ mappings must be supported. For example, ISA controllers would use the Legacy map for mapping Linux IRQs 0-15 so that existing ISA drivers get the correct IRQ numbers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjwhhubh)}(hXMost users of legacy mappings should use irq_domain_create_simple() which will use a legacy domain only if an IRQ range is supplied by the system and will otherwise use a linear domain mapping. The semantics of this call are such that if an IRQ range is specified then descriptors will be allocated on-the-fly for it, and if no range is specified it will fall through to irq_domain_create_linear() which means *no* IRQ descriptors will be allocated.h](hXMost users of legacy mappings should use irq_domain_create_simple() which will use a legacy domain only if an IRQ range is supplied by the system and will otherwise use a linear domain mapping. The semantics of this call are such that if an IRQ range is specified then descriptors will be allocated on-the-fly for it, and if no range is specified it will fall through to irq_domain_create_linear() which means }(hjhhhNhNubj)}(h*no*h]hno}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh# IRQ descriptors will be allocated.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjwhhubh)}(hyA typical use case for simple domains is where an irqchip provider is supporting both dynamic and static IRQ assignments.h]hyA typical use case for simple domains is where an irqchip provider is supporting both dynamic and static IRQ assignments.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjwhhubh)}(hX3In order to avoid ending up in a situation where a linear domain is used and no descriptor gets allocated it is very important to make sure that the driver using the simple domain call irq_create_mapping() before any irq_find_mapping() since the latter will actually work for the static IRQ assignment case.h]hX3In order to avoid ending up in a situation where a linear domain is used and no descriptor gets allocated it is very important to make sure that the driver using the simple domain call irq_create_mapping() before any irq_find_mapping() since the latter will actually work for the static IRQ assignment case.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjwhhubeh}(h]legacyah ]h"]legacyah$]h&]uh1hhjohhhhhKubh)}(hhh](h)}(hHierarchy IRQ Domainh]hHierarchy IRQ Domain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hOn some architectures, there may be multiple interrupt controllers involved in delivering an interrupt from the device to the target CPU. Let's look at a typical interrupt delivery path on x86 platforms::h]hOn some architectures, there may be multiple interrupt controllers involved in delivering an interrupt from the device to the target CPU. Let’s look at a typical interrupt delivery path on x86 platforms:}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hHDevice --> IOAPIC -> Interrupt remapping Controller -> Local APIC -> CPUh]hHDevice --> IOAPIC -> Interrupt remapping Controller -> Local APIC -> CPU}hj1sbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubh)}(h/There are three interrupt controllers involved:h]h/There are three interrupt controllers involved:}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubhenumerated_list)}(hhh](j)}(hIOAPIC controllerh]h)}(hjTh]hIOAPIC controller}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjRubah}(h]h ]h"]h$]h&]uh1jhjOhhhhhNubj)}(hInterrupt remapping controllerh]h)}(hjkh]hInterrupt remapping controller}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjiubah}(h]h ]h"]h$]h&]uh1jhjOhhhhhNubj)}(hLocal APIC controller h]h)}(hLocal APIC controllerh]hLocal APIC controller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjOhhhhhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix)uh1jMhjhhhhhKubh)}(hXTo support such a hardware topology and make software architecture match hardware architecture, an irq_domain data structure is built for each interrupt controller and those irq_domains are organized into hierarchy. When building irq_domain hierarchy, the irq_domain nearest the device is child and the irq_domain nearest the CPU is parent. So a hierarchy structure as below will be built for the example above::h]hXTo support such a hardware topology and make software architecture match hardware architecture, an irq_domain data structure is built for each interrupt controller and those irq_domains are organized into hierarchy. When building irq_domain hierarchy, the irq_domain nearest the device is child and the irq_domain nearest the CPU is parent. So a hierarchy structure as below will be built for the example above:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hCPU Vector irq_domain (root irq_domain to manage CPU vectors) ^ | Interrupt Remapping irq_domain (manage irq_remapping entries) ^ | IOAPIC irq_domain (manage IOAPIC delivery entries/pins)h]hCPU Vector irq_domain (root irq_domain to manage CPU vectors) ^ | Interrupt Remapping irq_domain (manage irq_remapping entries) ^ | IOAPIC irq_domain (manage IOAPIC delivery entries/pins)}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubh)}(hhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(h irq_fwspech]hdesc_signature_line)}(hstruct irq_fwspech](hdesc_sig_keyword)}(hstructh]hstruct}(hjbhhhNhNubah}(h]h ]kah"]h$]h&]uh1j`hj\hhhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKubhdesc_sig_space)}(h h]h }(hjthhhNhNubah}(h]h ]wah"]h$]h&]uh1jrhj\hhhjqhKubh desc_name)}(h irq_fwspech]h desc_sig_name)}(hjXh]h irq_fwspec}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]jjuh1jhj\hhhjqhKubeh}(h]h ]h"]h$]h&]jj add_permalinkuh1jZsphinx_line_type declaratorhjVhhhjqhKubah}(h]jMah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jThjqhKhjQhhubh desc_content)}(hhh]h)}(hgeneric IRQ specifier structureh]hgeneric IRQ specifier structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK hjhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjqhKubeh}(h]h ](jstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jOhhhjhNhNubh container)}(hX<**Definition**:: struct irq_fwspec { struct fwnode_handle *fwnode; int param_count; u32 param[IRQ_DOMAIN_IRQ_SPEC_PARAMS]; }; **Members** ``fwnode`` Pointer to a firmware-specific descriptor ``param_count`` Number of device-specific parameters ``param`` Device-specific parametersh](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK$hjubj)}(h{struct irq_fwspec { struct fwnode_handle *fwnode; int param_count; u32 param[IRQ_DOMAIN_IRQ_SPEC_PARAMS]; };h]h{struct irq_fwspec { struct fwnode_handle *fwnode; int param_count; u32 param[IRQ_DOMAIN_IRQ_SPEC_PARAMS]; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK&hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK,hjubhdefinition_list)}(hhh](hdefinition_list_item)}(h5``fwnode`` Pointer to a firmware-specific descriptor h](hterm)}(h ``fwnode``h]jw)}(hj7h]hfwnode}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj5ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK#hj/ubh definition)}(hhh]h)}(h)Pointer to a firmware-specific descriptorh]h)Pointer to a firmware-specific descriptor}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhK#hjOubah}(h]h ]h"]h$]h&]uh1jMhj/ubeh}(h]h ]h"]h$]h&]uh1j-hjLhK#hj*ubj.)}(h5``param_count`` Number of device-specific parameters h](j4)}(h``param_count``h]jw)}(hjrh]h param_count}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjpubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK$hjlubjN)}(hhh]h)}(h$Number of device-specific parametersh]h$Number of device-specific parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK$hjubah}(h]h ]h"]h$]h&]uh1jMhjlubeh}(h]h ]h"]h$]h&]uh1j-hjhK$hj*ubj.)}(h$``param`` Device-specific parametersh](j4)}(h ``param``h]jw)}(hjh]hparam}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK$hjubjN)}(hhh]h)}(hDevice-specific parametersh]hDevice-specific parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK%hjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhK$hj*ubeh}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK(hjhhubh)}(hvThis structure, directly modeled after of_phandle_args, is used to pass a device-specific description of an interrupt.h]hvThis structure, directly modeled after of_phandle_args, is used to pass a device-specific description of an interrupt.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK%hjhhubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jKirq_fwspec_info (C struct)c.irq_fwspec_infohNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hirq_fwspec_infoh]j[)}(hstruct irq_fwspec_infoh](ja)}(hjdh]hstruct}(hj, hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj( hhhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK+ubjs)}(h h]h }(hj: hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj( hhhj9 hK+ubj)}(hirq_fwspec_infoh]j)}(hj& h]hirq_fwspec_info}(hjL hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj( hhhj9 hK+ubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj$ hhhj9 hK+ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jThj9 hK+hj! hhubj)}(hhh]h)}(h+firmware provided IRQ information structureh]h+firmware provided IRQ information structure}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK0hjk hhubah}(h]h ]h"]h$]h&]uh1jhj! hhhj9 hK+ubeh}(h]h ](jstructeh"]h$]h&]jjjj jj jjjuh1jOhhhjhNhNubj)}(h**Definition**:: struct irq_fwspec_info { unsigned long flags; const struct cpumask *affinity; }; **Members** ``flags`` Information validity flags ``affinity`` Affinity mask for this interrupth](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK4hj ubj)}(hestruct irq_fwspec_info { unsigned long flags; const struct cpumask *affinity; };h]hestruct irq_fwspec_info { unsigned long flags; const struct cpumask *affinity; };}hj sbah}(h]h ]h"]h$]h&]jjuh1jhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK6hj ubh)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK;hj ubj))}(hhh](j.)}(h%``flags`` Information validity flags h](j4)}(h ``flags``h]jw)}(hj h]hflags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK3hj ubjN)}(hhh]h)}(hInformation validity flagsh]hInformation validity flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK3hj ubah}(h]h ]h"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]uh1j-hj hK3hj ubj.)}(h-``affinity`` Affinity mask for this interrupth](j4)}(h ``affinity``h]jw)}(hj h]haffinity}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK3hj ubjN)}(hhh]h)}(h Affinity mask for this interrupth]h Affinity mask for this interrupt}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK4hj* ubah}(h]h ]h"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]uh1j-hj) hK3hj ubeh}(h]h ]h"]h$]h&]uh1j(hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hjW h]h Description}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK7hjhhubh)}(hThis structure reports firmware-specific information about an interrupt. The only significant information is the affinity of a per-CPU interrupt, but this is designed to be extended as required.h]hThis structure reports firmware-specific information about an interrupt. The only significant information is the affinity of a per-CPU interrupt, but this is designed to be extended as required.}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK4hjhhubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jKirq_domain_ops (C struct)c.irq_domain_opshNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hirq_domain_opsh]j[)}(hstruct irq_domain_opsh](ja)}(hjdh]hstruct}(hj hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj hhhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK;ubjs)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj hhhj hK;ubj)}(hirq_domain_opsh]j)}(hj h]hirq_domain_ops}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhj hK;ubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj hhhj hK;ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jThj hK;hj hhubj)}(hhh]h)}(hMethods for irq_domain objectsh]hMethods for irq_domain objects}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKEhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hK;ubeh}(h]h ](jstructeh"]h$]h&]jjjj jj jjjuh1jOhhhjhNhNubj)}(hXs **Definition**:: struct irq_domain_ops { int (*match)(struct irq_domain *d, struct device_node *node, enum irq_domain_bus_token bus_token); int (*select)(struct irq_domain *d, struct irq_fwspec *fwspec, enum irq_domain_bus_token bus_token); int (*map)(struct irq_domain *d, unsigned int virq, irq_hw_number_t hw); void (*unmap)(struct irq_domain *d, unsigned int virq); int (*xlate)(struct irq_domain *d, struct device_node *node, const u32 *intspec, unsigned int intsize, unsigned long *out_hwirq, unsigned int *out_type); #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY; int (*alloc)(struct irq_domain *d, unsigned int virq, unsigned int nr_irqs, void *arg); void (*free)(struct irq_domain *d, unsigned int virq, unsigned int nr_irqs); int (*activate)(struct irq_domain *d, struct irq_data *irqd, bool reserve); void (*deactivate)(struct irq_domain *d, struct irq_data *irq_data); int (*translate)(struct irq_domain *d, struct irq_fwspec *fwspec, unsigned long *out_hwirq, unsigned int *out_type); int (*get_fwspec_info)(struct irq_fwspec *fwspec, struct irq_fwspec_info *info); #endif; #ifdef CONFIG_GENERIC_IRQ_DEBUGFS; void (*debug_show)(struct seq_file *m, struct irq_domain *d, struct irq_data *irqd, int ind); #endif; }; **Members** ``match`` Match an interrupt controller device node to a domain, returns 1 on a match ``select`` Match an interrupt controller fw specification. It is more generic than **match** as it receives a complete struct irq_fwspec. Therefore, **select** is preferred if provided. Returns 1 on a match. ``map`` Create or update a mapping between a virtual irq number and a hw irq number. This is called only once for a given mapping. ``unmap`` Dispose of such a mapping ``xlate`` Given a device tree node and interrupt specifier, decode the hardware irq number and linux irq type value. ``alloc`` Allocate **nr_irqs** interrupts starting from **virq**. ``free`` Free **nr_irqs** interrupts starting from **virq**. ``activate`` Activate one interrupt in HW (**irqd**). If **reserve** is set, only reserve the vector. If unset, assign the vector (called from request_irq()). ``deactivate`` Disarm one interrupt (**irqd**). ``translate`` Given **fwspec**, decode the hardware irq number (**out_hwirq**) and linux irq type value (**out_type**). This is a generalised **xlate** (over struct irq_fwspec) and is preferred if provided. ``get_fwspec_info`` Given **fwspec**, report additional firmware-provided information in **info**. Optional. ``debug_show`` For domains to show specific data for an interrupt in debugfs.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKIhj ubj)}(hXstruct irq_domain_ops { int (*match)(struct irq_domain *d, struct device_node *node, enum irq_domain_bus_token bus_token); int (*select)(struct irq_domain *d, struct irq_fwspec *fwspec, enum irq_domain_bus_token bus_token); int (*map)(struct irq_domain *d, unsigned int virq, irq_hw_number_t hw); void (*unmap)(struct irq_domain *d, unsigned int virq); int (*xlate)(struct irq_domain *d, struct device_node *node, const u32 *intspec, unsigned int intsize, unsigned long *out_hwirq, unsigned int *out_type); #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY; int (*alloc)(struct irq_domain *d, unsigned int virq, unsigned int nr_irqs, void *arg); void (*free)(struct irq_domain *d, unsigned int virq, unsigned int nr_irqs); int (*activate)(struct irq_domain *d, struct irq_data *irqd, bool reserve); void (*deactivate)(struct irq_domain *d, struct irq_data *irq_data); int (*translate)(struct irq_domain *d, struct irq_fwspec *fwspec, unsigned long *out_hwirq, unsigned int *out_type); int (*get_fwspec_info)(struct irq_fwspec *fwspec, struct irq_fwspec_info *info); #endif; #ifdef CONFIG_GENERIC_IRQ_DEBUGFS; void (*debug_show)(struct seq_file *m, struct irq_domain *d, struct irq_data *irqd, int ind); #endif; };h]hXstruct irq_domain_ops { int (*match)(struct irq_domain *d, struct device_node *node, enum irq_domain_bus_token bus_token); int (*select)(struct irq_domain *d, struct irq_fwspec *fwspec, enum irq_domain_bus_token bus_token); int (*map)(struct irq_domain *d, unsigned int virq, irq_hw_number_t hw); void (*unmap)(struct irq_domain *d, unsigned int virq); int (*xlate)(struct irq_domain *d, struct device_node *node, const u32 *intspec, unsigned int intsize, unsigned long *out_hwirq, unsigned int *out_type); #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY; int (*alloc)(struct irq_domain *d, unsigned int virq, unsigned int nr_irqs, void *arg); void (*free)(struct irq_domain *d, unsigned int virq, unsigned int nr_irqs); int (*activate)(struct irq_domain *d, struct irq_data *irqd, bool reserve); void (*deactivate)(struct irq_domain *d, struct irq_data *irq_data); int (*translate)(struct irq_domain *d, struct irq_fwspec *fwspec, unsigned long *out_hwirq, unsigned int *out_type); int (*get_fwspec_info)(struct irq_fwspec *fwspec, struct irq_fwspec_info *info); #endif; #ifdef CONFIG_GENERIC_IRQ_DEBUGFS; void (*debug_show)(struct seq_file *m, struct irq_domain *d, struct irq_data *irqd, int ind); #endif; };}hj sbah}(h]h ]h"]h$]h&]jjuh1jhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKKhj ubh)}(h **Members**h]j)}(hj% h]hMembers}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK^hj ubj))}(hhh](j.)}(hV``match`` Match an interrupt controller device node to a domain, returns 1 on a match h](j4)}(h ``match``h]jw)}(hjD h]hmatch}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjB ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKHhj> ubjN)}(hhh]h)}(hKMatch an interrupt controller device node to a domain, returns 1 on a matchh]hKMatch an interrupt controller device node to a domain, returns 1 on a match}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKGhjZ ubah}(h]h ]h"]h$]h&]uh1jMhj> ubeh}(h]h ]h"]h$]h&]uh1j-hjY hKHhj; ubj.)}(h``select`` Match an interrupt controller fw specification. It is more generic than **match** as it receives a complete struct irq_fwspec. Therefore, **select** is preferred if provided. Returns 1 on a match. h](j4)}(h ``select``h]jw)}(hj~ h]hselect}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj| ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKKhjx ubjN)}(hhh]h)}(hMatch an interrupt controller fw specification. It is more generic than **match** as it receives a complete struct irq_fwspec. Therefore, **select** is preferred if provided. Returns 1 on a match.h](hHMatch an interrupt controller fw specification. It is more generic than }(hj hhhNhNubj)}(h **match**h]hmatch}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh9 as it receives a complete struct irq_fwspec. Therefore, }(hj hhhNhNubj)}(h **select**h]hselect}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh0 is preferred if provided. Returns 1 on a match.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKIhj ubah}(h]h ]h"]h$]h&]uh1jMhjx ubeh}(h]h ]h"]h$]h&]uh1j-hj hKKhj; ubj.)}(h``map`` Create or update a mapping between a virtual irq number and a hw irq number. This is called only once for a given mapping. h](j4)}(h``map``h]jw)}(hj h]hmap}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKMhj ubjN)}(hhh]h)}(hzCreate or update a mapping between a virtual irq number and a hw irq number. This is called only once for a given mapping.h]hzCreate or update a mapping between a virtual irq number and a hw irq number. This is called only once for a given mapping.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKLhj ubah}(h]h ]h"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]uh1j-hj hKMhj; ubj.)}(h$``unmap`` Dispose of such a mapping h](j4)}(h ``unmap``h]jw)}(hj h]hunmap}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKNhj ubjN)}(hhh]h)}(hDispose of such a mappingh]hDispose of such a mapping}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ hKNhj, ubah}(h]h ]h"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]uh1j-hj+ hKNhj; ubj.)}(hu``xlate`` Given a device tree node and interrupt specifier, decode the hardware irq number and linux irq type value. h](j4)}(h ``xlate``h]jw)}(hjO h]hxlate}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjM ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKPhjI ubjN)}(hhh]h)}(hjGiven a device tree node and interrupt specifier, decode the hardware irq number and linux irq type value.h]hjGiven a device tree node and interrupt specifier, decode the hardware irq number and linux irq type value.}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKOhje ubah}(h]h ]h"]h$]h&]uh1jMhjI ubeh}(h]h ]h"]h$]h&]uh1j-hjd hKPhj; ubj.)}(hB``alloc`` Allocate **nr_irqs** interrupts starting from **virq**. h](j4)}(h ``alloc``h]jw)}(hj h]halloc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKQhj ubjN)}(hhh]h)}(h7Allocate **nr_irqs** interrupts starting from **virq**.h](h Allocate }(hj hhhNhNubj)}(h **nr_irqs**h]hnr_irqs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh interrupts starting from }(hj hhhNhNubj)}(h**virq**h]hvirq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKQhj ubah}(h]h ]h"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]uh1j-hj hKQhj; ubj.)}(h=``free`` Free **nr_irqs** interrupts starting from **virq**. h](j4)}(h``free``h]jw)}(hj h]hfree}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKRhj ubjN)}(hhh]h)}(h3Free **nr_irqs** interrupts starting from **virq**.h](hFree }(hj hhhNhNubj)}(h **nr_irqs**h]hnr_irqs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh interrupts starting from }(hj hhhNhNubj)}(h**virq**h]hvirq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKRhj ubah}(h]h ]h"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]uh1j-hj hKRhj; ubj.)}(h``activate`` Activate one interrupt in HW (**irqd**). If **reserve** is set, only reserve the vector. If unset, assign the vector (called from request_irq()). h](j4)}(h ``activate``h]jw)}(hjC h]hactivate}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjA ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKUhj= ubjN)}(hhh]h)}(hActivate one interrupt in HW (**irqd**). If **reserve** is set, only reserve the vector. If unset, assign the vector (called from request_irq()).h](hActivate one interrupt in HW (}(hj\ hhhNhNubj)}(h**irqd**h]hirqd}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubh). If }(hj\ hhhNhNubj)}(h **reserve**h]hreserve}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ ubhZ is set, only reserve the vector. If unset, assign the vector (called from request_irq()).}(hj\ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKShjY ubah}(h]h ]h"]h$]h&]uh1jMhj= ubeh}(h]h ]h"]h$]h&]uh1j-hjX hKUhj; ubj.)}(h0``deactivate`` Disarm one interrupt (**irqd**). h](j4)}(h``deactivate``h]jw)}(hj h]h deactivate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKVhj ubjN)}(hhh]h)}(h Disarm one interrupt (**irqd**).h](hDisarm one interrupt (}(hj hhhNhNubj)}(h**irqd**h]hirqd}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKVhj ubah}(h]h ]h"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]uh1j-hj hKVhj; ubj.)}(h``translate`` Given **fwspec**, decode the hardware irq number (**out_hwirq**) and linux irq type value (**out_type**). This is a generalised **xlate** (over struct irq_fwspec) and is preferred if provided. h](j4)}(h ``translate``h]jw)}(hj h]h translate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKYhj ubjN)}(hhh]h)}(hGiven **fwspec**, decode the hardware irq number (**out_hwirq**) and linux irq type value (**out_type**). This is a generalised **xlate** (over struct irq_fwspec) and is preferred if provided.h](hGiven }(hjhhhNhNubj)}(h **fwspec**h]hfwspec}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh", decode the hardware irq number (}(hjhhhNhNubj)}(h **out_hwirq**h]h out_hwirq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) and linux irq type value (}(hjhhhNhNubj)}(h **out_type**h]hout_type}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh). This is a generalised }(hjhhhNhNubj)}(h **xlate**h]hxlate}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh7 (over struct irq_fwspec) and is preferred if provided.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKWhjubah}(h]h ]h"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]uh1j-hjhKYhj; ubj.)}(hm``get_fwspec_info`` Given **fwspec**, report additional firmware-provided information in **info**. Optional. h](j4)}(h``get_fwspec_info``h]jw)}(hjnh]hget_fwspec_info}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjlubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK[hjhubjN)}(hhh]h)}(hXGiven **fwspec**, report additional firmware-provided information in **info**. Optional.h](hGiven }(hjhhhNhNubj)}(h **fwspec**h]hfwspec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5, report additional firmware-provided information in }(hjhhhNhNubj)}(h**info**h]hinfo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh . Optional.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKZhjubah}(h]h ]h"]h$]h&]uh1jMhjhubeh}(h]h ]h"]h$]h&]uh1j-hjhK[hj; ubj.)}(hM``debug_show`` For domains to show specific data for an interrupt in debugfs.h](j4)}(h``debug_show``h]jw)}(hjh]h debug_show}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK\hjubjN)}(hhh]h)}(h>For domains to show specific data for an interrupt in debugfs.h]h>For domains to show specific data for an interrupt in debugfs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK]hjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhK\hj; ubeh}(h]h ]h"]h$]h&]uh1j(hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK`hjhhubh)}(hXFunctions below are provided by the driver and called whenever a new mapping is created or an old mapping is disposed. The driver can then proceed to whatever internal data structures management is required. It also needs to setup the irq_desc when returning from map().h]hXFunctions below are provided by the driver and called whenever a new mapping is created or an old mapping is disposed. The driver can then proceed to whatever internal data structures management is required. It also needs to setup the irq_desc when returning from map().}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhK]hjhhubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jKirq_domain (C struct) c.irq_domainhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(h irq_domainh]j[)}(hstruct irq_domainh](ja)}(hjdh]hstruct}(hjMhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjIhhhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKeubjs)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjIhhhjZhKeubj)}(h irq_domainh]j)}(hjGh]h irq_domain}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjIhhhjZhKeubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjEhhhjZhKeubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1jThjZhKehjBhhubj)}(hhh]h)}(h,Hardware interrupt number translation objecth]h,Hardware interrupt number translation object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjBhhhjZhKeubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jOhhhjhNhNubj)}(hX **Definition**:: struct irq_domain { struct list_head link; const char *name; const struct irq_domain_ops *ops; void *host_data; unsigned int flags; unsigned int mapcount; struct mutex mutex; struct irq_domain *root; struct fwnode_handle *fwnode; enum irq_domain_bus_token bus_token; struct irq_domain_chip_generic *gc; struct device *dev; struct device *pm_dev; #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY; struct irq_domain *parent; #endif; #ifdef CONFIG_GENERIC_MSI_IRQ; const struct msi_parent_ops *msi_parent_ops; #endif; void (*exit)(struct irq_domain *d); irq_hw_number_t hwirq_max; unsigned int revmap_size; struct radix_tree_root revmap_tree; struct irq_data *revmap[]; }; **Members** ``link`` Element in global irq_domain list. ``name`` Name of interrupt domain ``ops`` Pointer to irq_domain methods ``host_data`` Private data pointer for use by owner. Not touched by irq_domain core code. ``flags`` Per irq_domain flags ``mapcount`` The number of mapped interrupts ``mutex`` Domain lock, hierarchical domains use root domain's lock ``root`` Pointer to root domain, or containing structure if non-hierarchical ``fwnode`` Pointer to firmware node associated with the irq_domain. Pretty easy to swap it for the of_node via the irq_domain_get_of_node accessor ``bus_token`` **fwnode**'s device_node might be used for several irq domains. But in connection with **bus_token**, the pair shall be unique in a system. ``gc`` Pointer to a list of generic chips. There is a helper function for setting up one or more generic chips for interrupt controllers drivers using the generic chip library which uses this pointer. ``dev`` Pointer to the device which instantiated the irqdomain With per device irq domains this is not necessarily the same as **pm_dev**. ``pm_dev`` Pointer to a device that can be utilized for power management purposes related to the irq domain. ``parent`` Pointer to parent irq_domain to support hierarchy irq_domains ``msi_parent_ops`` Pointer to MSI parent domain methods for per device domain init ``exit`` Function called when the domain is destroyed ``hwirq_max`` Top limit for the HW irq number. Especially to avoid conflicts/failures with reserved HW irqs. Can be ~0. ``revmap_size`` Size of the linear map table **revmap** ``revmap_tree`` Radix map tree for hwirqs that don't fit in the linear map ``revmap`` Linear table of irq_data pointersh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubj)}(hXstruct irq_domain { struct list_head link; const char *name; const struct irq_domain_ops *ops; void *host_data; unsigned int flags; unsigned int mapcount; struct mutex mutex; struct irq_domain *root; struct fwnode_handle *fwnode; enum irq_domain_bus_token bus_token; struct irq_domain_chip_generic *gc; struct device *dev; struct device *pm_dev; #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY; struct irq_domain *parent; #endif; #ifdef CONFIG_GENERIC_MSI_IRQ; const struct msi_parent_ops *msi_parent_ops; #endif; void (*exit)(struct irq_domain *d); irq_hw_number_t hwirq_max; unsigned int revmap_size; struct radix_tree_root revmap_tree; struct irq_data *revmap[]; };h]hXstruct irq_domain { struct list_head link; const char *name; const struct irq_domain_ops *ops; void *host_data; unsigned int flags; unsigned int mapcount; struct mutex mutex; struct irq_domain *root; struct fwnode_handle *fwnode; enum irq_domain_bus_token bus_token; struct irq_domain_chip_generic *gc; struct device *dev; struct device *pm_dev; #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY; struct irq_domain *parent; #endif; #ifdef CONFIG_GENERIC_MSI_IRQ; const struct msi_parent_ops *msi_parent_ops; #endif; void (*exit)(struct irq_domain *d); irq_hw_number_t hwirq_max; unsigned int revmap_size; struct radix_tree_root revmap_tree; struct irq_data *revmap[]; };}hjsbah}(h]h ]h"]h$]h&]jjuh1jhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubj))}(hhh](j.)}(h,``link`` Element in global irq_domain list. h](j4)}(h``link``h]jw)}(hjh]hlink}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubjN)}(hhh]h)}(h"Element in global irq_domain list.h]h"Element in global irq_domain list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhKhjubj.)}(h"``name`` Name of interrupt domain h](j4)}(h``name``h]jw)}(hj5h]hname}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj3ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhj/ubjN)}(hhh]h)}(hName of interrupt domainh]hName of interrupt domain}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhKhjKubah}(h]h ]h"]h$]h&]uh1jMhj/ubeh}(h]h ]h"]h$]h&]uh1j-hjJhKhjubj.)}(h&``ops`` Pointer to irq_domain methods h](j4)}(h``ops``h]jw)}(hjnh]hops}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjlubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjhubjN)}(hhh]h)}(hPointer to irq_domain methodsh]hPointer to irq_domain methods}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jMhjhubeh}(h]h ]h"]h$]h&]uh1j-hjhKhjubj.)}(h[``host_data`` Private data pointer for use by owner. Not touched by irq_domain core code. h](j4)}(h ``host_data``h]jw)}(hjh]h host_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubjN)}(hhh]h)}(hLPrivate data pointer for use by owner. Not touched by irq_domain core code.h]hLPrivate data pointer for use by owner. Not touched by irq_domain core code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhKhjubj.)}(h``flags`` Per irq_domain flags h](j4)}(h ``flags``h]jw)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubjN)}(hhh]h)}(hPer irq_domain flagsh]hPer irq_domain flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhKhjubj.)}(h-``mapcount`` The number of mapped interrupts h](j4)}(h ``mapcount``h]jw)}(hjh]hmapcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubjN)}(hhh]h)}(hThe number of mapped interruptsh]hThe number of mapped interrupts}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj0ubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hj/hKhjubj.)}(hC``mutex`` Domain lock, hierarchical domains use root domain's lock h](j4)}(h ``mutex``h]jw)}(hjSh]hmutex}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjQubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjMubjN)}(hhh]h)}(h8Domain lock, hierarchical domains use root domain's lockh]h:Domain lock, hierarchical domains use root domain’s lock}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhKhjiubah}(h]h ]h"]h$]h&]uh1jMhjMubeh}(h]h ]h"]h$]h&]uh1j-hjhhKhjubj.)}(hM``root`` Pointer to root domain, or containing structure if non-hierarchical h](j4)}(h``root``h]jw)}(hjh]hroot}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubjN)}(hhh]h)}(hCPointer to root domain, or containing structure if non-hierarchicalh]hCPointer to root domain, or containing structure if non-hierarchical}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhKhjubj.)}(h``fwnode`` Pointer to firmware node associated with the irq_domain. Pretty easy to swap it for the of_node via the irq_domain_get_of_node accessor h](j4)}(h ``fwnode``h]jw)}(hjh]hfwnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubjN)}(hhh]h)}(hPointer to firmware node associated with the irq_domain. Pretty easy to swap it for the of_node via the irq_domain_get_of_node accessorh]hPointer to firmware node associated with the irq_domain. Pretty easy to swap it for the of_node via the irq_domain_get_of_node accessor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhKhjubj.)}(h``bus_token`` **fwnode**'s device_node might be used for several irq domains. But in connection with **bus_token**, the pair shall be unique in a system. h](j4)}(h ``bus_token``h]jw)}(hjh]h bus_token}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubjN)}(hhh]h)}(h**fwnode**'s device_node might be used for several irq domains. But in connection with **bus_token**, the pair shall be unique in a system.h](j)}(h **fwnode**h]hfwnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhO’s device_node might be used for several irq domains. But in connection with }(hjhhhNhNubj)}(h **bus_token**h]h bus_token}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh', the pair shall be unique in a system.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhKhjubj.)}(h``gc`` Pointer to a list of generic chips. There is a helper function for setting up one or more generic chips for interrupt controllers drivers using the generic chip library which uses this pointer. h](j4)}(h``gc``h]jw)}(hjYh]hgc}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjWubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjSubjN)}(hhh]h)}(hPointer to a list of generic chips. There is a helper function for setting up one or more generic chips for interrupt controllers drivers using the generic chip library which uses this pointer.h]hPointer to a list of generic chips. There is a helper function for setting up one or more generic chips for interrupt controllers drivers using the generic chip library which uses this pointer.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjoubah}(h]h ]h"]h$]h&]uh1jMhjSubeh}(h]h ]h"]h$]h&]uh1j-hjnhKhjubj.)}(h``dev`` Pointer to the device which instantiated the irqdomain With per device irq domains this is not necessarily the same as **pm_dev**. h](j4)}(h``dev``h]jw)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubjN)}(hhh]h)}(hPointer to the device which instantiated the irqdomain With per device irq domains this is not necessarily the same as **pm_dev**.h](hwPointer to the device which instantiated the irqdomain With per device irq domains this is not necessarily the same as }(hjhhhNhNubj)}(h **pm_dev**h]hpm_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhKhjubj.)}(hm``pm_dev`` Pointer to a device that can be utilized for power management purposes related to the irq domain. h](j4)}(h ``pm_dev``h]jw)}(hjh]hpm_dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubjN)}(hhh]h)}(haPointer to a device that can be utilized for power management purposes related to the irq domain.h]haPointer to a device that can be utilized for power management purposes related to the irq domain.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhKhjubj.)}(hI``parent`` Pointer to parent irq_domain to support hierarchy irq_domains h](j4)}(h ``parent``h]jw)}(hjh]hparent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubjN)}(hhh]h)}(h=Pointer to parent irq_domain to support hierarchy irq_domainsh]h=Pointer to parent irq_domain to support hierarchy irq_domains}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKhj/ubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hj.hKhjubj.)}(hS``msi_parent_ops`` Pointer to MSI parent domain methods for per device domain init h](j4)}(h``msi_parent_ops``h]jw)}(hjRh]hmsi_parent_ops}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjPubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjLubjN)}(hhh]h)}(h?Pointer to MSI parent domain methods for per device domain inith]h?Pointer to MSI parent domain methods for per device domain init}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghKhjhubah}(h]h ]h"]h$]h&]uh1jMhjLubeh}(h]h ]h"]h$]h&]uh1j-hjghKhjubj.)}(h6``exit`` Function called when the domain is destroyed h](j4)}(h``exit``h]jw)}(hjh]hexit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubjN)}(hhh]h)}(h,Function called when the domain is destroyedh]h,Function called when the domain is destroyed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhKhjubj.)}(hx``hwirq_max`` Top limit for the HW irq number. Especially to avoid conflicts/failures with reserved HW irqs. Can be ~0. h](j4)}(h ``hwirq_max``h]jw)}(hjh]h hwirq_max}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubjN)}(hhh]h)}(hiTop limit for the HW irq number. Especially to avoid conflicts/failures with reserved HW irqs. Can be ~0.h]hiTop limit for the HW irq number. Especially to avoid conflicts/failures with reserved HW irqs. Can be ~0.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhKhjubj.)}(h8``revmap_size`` Size of the linear map table **revmap** h](j4)}(h``revmap_size``h]jw)}(hjh]h revmap_size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhjubjN)}(hhh]h)}(h'Size of the linear map table **revmap**h](hSize of the linear map table }(hjhhhNhNubj)}(h **revmap**h]hrevmap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhKhjubj.)}(hK``revmap_tree`` Radix map tree for hwirqs that don't fit in the linear map h](j4)}(h``revmap_tree``h]jw)}(hjEh]h revmap_tree}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjCubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKhj?ubjN)}(hhh]h)}(h:Radix map tree for hwirqs that don't fit in the linear maph]hhjhhhNhNubjP)}(hhh](jU)}(hirq_domain_infoh]j[)}(hstruct irq_domain_infoh](ja)}(hjdh]hstruct}(hjhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj hhhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhKubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj hhhjhKubj)}(hirq_domain_infoh]j)}(hjh]hirq_domain_info}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj hhhjhKubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jThjhKhjhhubj)}(hhh]h)}(hDomain information structureh]hDomain information structure}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM9hjMhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjhjjhjjjuh1jOhhhjhNhNubj)}(hXL**Definition**:: struct irq_domain_info { struct fwnode_handle *fwnode; unsigned int domain_flags; unsigned int size; irq_hw_number_t hwirq_max; int direct_max; unsigned int hwirq_base; unsigned int virq_base; enum irq_domain_bus_token bus_token; const char *name_suffix; const struct irq_domain_ops *ops; void *host_data; struct device *dev; #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY; struct irq_domain *parent; #endif; struct irq_domain_chip_generic_info *dgc_info; int (*init)(struct irq_domain *d); void (*exit)(struct irq_domain *d); }; **Members** ``fwnode`` firmware node for the interrupt controller ``domain_flags`` Additional flags to add to the domain flags ``size`` Size of linear map; 0 for radix mapping only ``hwirq_max`` Maximum number of interrupts supported by controller ``direct_max`` Maximum value of direct maps; Use ~0 for no limit; 0 for no direct mapping ``hwirq_base`` The first hardware interrupt number (legacy domains only) ``virq_base`` The first Linux interrupt number for legacy domains to immediately associate the interrupts after domain creation ``bus_token`` Domain bus token ``name_suffix`` Optional name suffix to avoid collisions when multiple domains are added using same fwnode ``ops`` Domain operation callbacks ``host_data`` Controller private data pointer ``dev`` Device which creates the domain ``parent`` Pointer to the parent irq domain used in a hierarchy domain ``dgc_info`` Geneneric chip information structure pointer used to create generic chips for the domain if not NULL. ``init`` Function called when the domain is created. Allow to do some additional domain initialisation. ``exit`` Function called when the domain is destroyed. Allow to do some additional cleanup operation.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubh:}(hjphhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM=hjlubj)}(hX/struct irq_domain_info { struct fwnode_handle *fwnode; unsigned int domain_flags; unsigned int size; irq_hw_number_t hwirq_max; int direct_max; unsigned int hwirq_base; unsigned int virq_base; enum irq_domain_bus_token bus_token; const char *name_suffix; const struct irq_domain_ops *ops; void *host_data; struct device *dev; #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY; struct irq_domain *parent; #endif; struct irq_domain_chip_generic_info *dgc_info; int (*init)(struct irq_domain *d); void (*exit)(struct irq_domain *d); };h]hX/struct irq_domain_info { struct fwnode_handle *fwnode; unsigned int domain_flags; unsigned int size; irq_hw_number_t hwirq_max; int direct_max; unsigned int hwirq_base; unsigned int virq_base; enum irq_domain_bus_token bus_token; const char *name_suffix; const struct irq_domain_ops *ops; void *host_data; struct device *dev; #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY; struct irq_domain *parent; #endif; struct irq_domain_chip_generic_info *dgc_info; int (*init)(struct irq_domain *d); void (*exit)(struct irq_domain *d); };}hjsbah}(h]h ]h"]h$]h&]jjuh1jhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM?hjlubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMThjlubj))}(hhh](j.)}(h6``fwnode`` firmware node for the interrupt controller h](j4)}(h ``fwnode``h]jw)}(hjh]hfwnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM;hjubjN)}(hhh]h)}(h*firmware node for the interrupt controllerh]h*firmware node for the interrupt controller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhM;hjubj.)}(h=``domain_flags`` Additional flags to add to the domain flags h](j4)}(h``domain_flags``h]jw)}(hjh]h domain_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM<hjubjN)}(hhh]h)}(h+Additional flags to add to the domain flagsh]h+Additional flags to add to the domain flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM<hj ubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hj hM<hjubj.)}(h6``size`` Size of linear map; 0 for radix mapping only h](j4)}(h``size``h]jw)}(hj/h]hsize}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj-ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM=hj)ubjN)}(hhh]h)}(h,Size of linear map; 0 for radix mapping onlyh]h,Size of linear map; 0 for radix mapping only}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM=hjEubah}(h]h ]h"]h$]h&]uh1jMhj)ubeh}(h]h ]h"]h$]h&]uh1j-hjDhM=hjubj.)}(hC``hwirq_max`` Maximum number of interrupts supported by controller h](j4)}(h ``hwirq_max``h]jw)}(hjhh]h hwirq_max}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjfubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM>hjbubjN)}(hhh]h)}(h4Maximum number of interrupts supported by controllerh]h4Maximum number of interrupts supported by controller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hM>hj~ubah}(h]h ]h"]h$]h&]uh1jMhjbubeh}(h]h ]h"]h$]h&]uh1j-hj}hM>hjubj.)}(hZ``direct_max`` Maximum value of direct maps; Use ~0 for no limit; 0 for no direct mapping h](j4)}(h``direct_max``h]jw)}(hjh]h direct_max}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM@hjubjN)}(hhh]h)}(hJMaximum value of direct maps; Use ~0 for no limit; 0 for no direct mappingh]hJMaximum value of direct maps; Use ~0 for no limit; 0 for no direct mapping}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM?hjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhM@hjubj.)}(hI``hwirq_base`` The first hardware interrupt number (legacy domains only) h](j4)}(h``hwirq_base``h]jw)}(hjh]h hwirq_base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMAhjubjN)}(hhh]h)}(h9The first hardware interrupt number (legacy domains only)h]h9The first hardware interrupt number (legacy domains only)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMAhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhMAhjubj.)}(h``virq_base`` The first Linux interrupt number for legacy domains to immediately associate the interrupts after domain creation h](j4)}(h ``virq_base``h]jw)}(hjh]h virq_base}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMChjubjN)}(hhh]h)}(hqThe first Linux interrupt number for legacy domains to immediately associate the interrupts after domain creationh]hqThe first Linux interrupt number for legacy domains to immediately associate the interrupts after domain creation}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMBhj*ubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hj)hMChjubj.)}(h``bus_token`` Domain bus token h](j4)}(h ``bus_token``h]jw)}(hjNh]h bus_token}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjLubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMDhjHubjN)}(hhh]h)}(hDomain bus tokenh]hDomain bus token}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMDhjdubah}(h]h ]h"]h$]h&]uh1jMhjHubeh}(h]h ]h"]h$]h&]uh1j-hjchMDhjubj.)}(hk``name_suffix`` Optional name suffix to avoid collisions when multiple domains are added using same fwnode h](j4)}(h``name_suffix``h]jw)}(hjh]h name_suffix}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMFhjubjN)}(hhh]h)}(hZOptional name suffix to avoid collisions when multiple domains are added using same fwnodeh]hZOptional name suffix to avoid collisions when multiple domains are added using same fwnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMEhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhMFhjubj.)}(h#``ops`` Domain operation callbacks h](j4)}(h``ops``h]jw)}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMGhjubjN)}(hhh]h)}(hDomain operation callbacksh]hDomain operation callbacks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMGhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhMGhjubj.)}(h.``host_data`` Controller private data pointer h](j4)}(h ``host_data``h]jw)}(hjh]h host_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMHhjubjN)}(hhh]h)}(hController private data pointerh]hController private data pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhMHhjubj.)}(h(``dev`` Device which creates the domain h](j4)}(h``dev``h]jw)}(hj3h]hdev}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj1ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMIhj-ubjN)}(hhh]h)}(hDevice which creates the domainh]hDevice which creates the domain}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMIhjIubah}(h]h ]h"]h$]h&]uh1jMhj-ubeh}(h]h ]h"]h$]h&]uh1j-hjHhMIhjubj.)}(hG``parent`` Pointer to the parent irq domain used in a hierarchy domain h](j4)}(h ``parent``h]jw)}(hjlh]hparent}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM`hjfubjN)}(hhh]h)}(h;Pointer to the parent irq domain used in a hierarchy domainh]h;Pointer to the parent irq domain used in a hierarchy domain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM`hjubah}(h]h ]h"]h$]h&]uh1jMhjfubeh}(h]h ]h"]h$]h&]uh1j-hjhM`hjubj.)}(hs``dgc_info`` Geneneric chip information structure pointer used to create generic chips for the domain if not NULL. h](j4)}(h ``dgc_info``h]jw)}(hjh]hdgc_info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMKhjubjN)}(hhh]h)}(heGeneneric chip information structure pointer used to create generic chips for the domain if not NULL.h]heGeneneric chip information structure pointer used to create generic chips for the domain if not NULL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMJhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhMKhjubj.)}(hh``init`` Function called when the domain is created. Allow to do some additional domain initialisation. h](j4)}(h``init``h]jw)}(hjh]hinit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMMhjubjN)}(hhh]h)}(h^Function called when the domain is created. Allow to do some additional domain initialisation.h]h^Function called when the domain is created. Allow to do some additional domain initialisation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMLhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhMMhjubj.)}(he``exit`` Function called when the domain is destroyed. Allow to do some additional cleanup operation.h](j4)}(h``exit``h]jw)}(hjh]hexit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMNhjubjN)}(hhh]h)}(h\Function called when the domain is destroyed. Allow to do some additional cleanup operation.h]h\Function called when the domain is destroyed. Allow to do some additional cleanup operation.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMNhj/ubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hj.hMNhjubeh}(h]h ]h"]h$]h&]uh1j(hjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK%irq_domain_create_linear (C function)c.irq_domain_create_linearhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hstruct irq_domain * irq_domain_create_linear (struct fwnode_handle *fwnode, unsigned int size, const struct irq_domain_ops *ops, void *host_data)h]j[)}(hstruct irq_domain *irq_domain_create_linear(struct fwnode_handle *fwnode, unsigned int size, const struct irq_domain_ops *ops, void *host_data)h](ja)}(hjdh]hstruct}(hjrhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjnhhhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjnhhhjhMubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jirq_domain_create_linearsbc.irq_domain_create_linearasbuh1hhjnhhhjhMubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjnhhhjhMubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjnhhhjhMubj)}(hirq_domain_create_linearh]j)}(hjh]hirq_domain_create_linear}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjnhhhjhMubhdesc_parameterlist)}(hd(struct fwnode_handle *fwnode, unsigned int size, const struct irq_domain_ops *ops, void *host_data)h](hdesc_parameter)}(hstruct fwnode_handle *fwnodeh](ja)}(hjdh]hstruct}(hjhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjubjs)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubh)}(hhh]j)}(h fwnode_handleh]h fwnode_handle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.irq_domain_create_linearasbuh1hhjubjs)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(hjh]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hfwnodeh]hfwnode}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int sizeh](hdesc_sig_keyword_type)}(hunsignedh]hunsigned}(hjnhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jlhjhubjs)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjhubjm)}(hinth]hint}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjhubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h const struct irq_domain_ops *opsh](ja)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubja)}(hjdh]hstruct}(hjhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubh)}(hhh]j)}(hirq_domain_opsh]hirq_domain_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.irq_domain_create_linearasbuh1hhjubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hopsh]hops}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hvoid *host_datah](jm)}(hvoidh]hvoid}(hjLhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjHubjs)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjHubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h host_datah]h host_data}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjnhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjjhhhjhMubah}(h]jeah ](jjeh"]h$]h&]jj)jhuh1jThjhMhjghhubj)}(hhh]h)}(h1Allocate and register a linear revmap irq_domain.h]h1Allocate and register a linear revmap irq_domain.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjghhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jOhhhjhNhNubj)}(hX:**Parameters** ``struct fwnode_handle *fwnode`` pointer to interrupt controller's FW node. ``unsigned int size`` Number of interrupts in the domain. ``const struct irq_domain_ops *ops`` map/unmap domain callbacks ``void *host_data`` Controller private data pointer **Return** Newly created irq_domainh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjubj))}(hhh](j.)}(hL``struct fwnode_handle *fwnode`` pointer to interrupt controller's FW node. h](j4)}(h ``struct fwnode_handle *fwnode``h]jw)}(hjh]hstruct fwnode_handle *fwnode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjubjN)}(hhh]h)}(h*pointer to interrupt controller's FW node.h]h,pointer to interrupt controller’s FW node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhMhjubj.)}(h:``unsigned int size`` Number of interrupts in the domain. h](j4)}(h``unsigned int size``h]jw)}(hjh]hunsigned int size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjubjN)}(hhh]h)}(h#Number of interrupts in the domain.h]h#Number of interrupts in the domain.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMhj/ubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hj.hMhjubj.)}(h@``const struct irq_domain_ops *ops`` map/unmap domain callbacks h](j4)}(h$``const struct irq_domain_ops *ops``h]jw)}(hjRh]h const struct irq_domain_ops *ops}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjPubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjLubjN)}(hhh]h)}(hmap/unmap domain callbacksh]hmap/unmap domain callbacks}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjhubah}(h]h ]h"]h$]h&]uh1jMhjLubeh}(h]h ]h"]h$]h&]uh1j-hjghMhjubj.)}(h4``void *host_data`` Controller private data pointer h](j4)}(h``void *host_data``h]jw)}(hjh]hvoid *host_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjubjN)}(hhh]h)}(hController private data pointerh]hController private data pointer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhMhjubeh}(h]h ]h"]h$]h&]uh1j(hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjubh)}(hNewly created irq_domainh]hNewly created irq_domain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jKirq_create_mapping (C function)c.irq_create_mappinghNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hRunsigned int irq_create_mapping (struct irq_domain *domain, irq_hw_number_t hwirq)h]j[)}(hQunsigned int irq_create_mapping(struct irq_domain *domain, irq_hw_number_t hwirq)h](jm)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjhhhjhMubjm)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhjhMubjs)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjhhhjhMubj)}(hirq_create_mappingh]j)}(hirq_create_mappingh]hirq_create_mapping}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(h2(struct irq_domain *domain, irq_hw_number_t hwirq)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hjdhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj`ubjs)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj`ubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjJsbc.irq_create_mappingasbuh1hhj`ubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj`ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hdomainh]hdomain}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubj)}(hirq_hw_number_t hwirqh](h)}(hhh]j)}(hirq_hw_number_th]hirq_hw_number_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.irq_create_mappingasbuh1hhjubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(hhwirqh]hhwirq}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj\ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jThjhMhjhhubj)}(hhh]h)}(h-Map a hardware interrupt into linux irq spaceh]h-Map a hardware interrupt into linux irq space}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhj,hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjGjjGjjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *domain`` domain owning this hardware interrupt or NULL for default domain ``irq_hw_number_t hwirq`` hardware irq number in that domain space **Description** Only one mapping per hardware interrupt is permitted. If the sense/trigger is to be specified, set_irq_type() should be called on the number returned from that call. **Return** Linux irq number or 0 on errorh](h)}(h**Parameters**h]j)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjKubj))}(hhh](j.)}(h_``struct irq_domain *domain`` domain owning this hardware interrupt or NULL for default domain h](j4)}(h``struct irq_domain *domain``h]jw)}(hjph]hstruct irq_domain *domain}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjnubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjjubjN)}(hhh]h)}(h@domain owning this hardware interrupt or NULL for default domainh]h@domain owning this hardware interrupt or NULL for default domain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jMhjjubeh}(h]h ]h"]h$]h&]uh1j-hjhMhjgubj.)}(hC``irq_hw_number_t hwirq`` hardware irq number in that domain space h](j4)}(h``irq_hw_number_t hwirq``h]jw)}(hjh]hirq_hw_number_t hwirq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjubjN)}(hhh]h)}(h(hardware irq number in that domain spaceh]h(hardware irq number in that domain space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhMhjgubeh}(h]h ]h"]h$]h&]uh1j(hjKubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjKubh)}(h5Only one mapping per hardware interrupt is permitted.h]h5Only one mapping per hardware interrupt is permitted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjKubh)}(hoIf the sense/trigger is to be specified, set_irq_type() should be called on the number returned from that call.h]hoIf the sense/trigger is to be specified, set_irq_type() should be called on the number returned from that call.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjKubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjKubh)}(hLinux irq number or 0 on errorh]hLinux irq number or 0 on error}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK irq_resolve_mapping (C function)c.irq_resolve_mappinghNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hXstruct irq_desc * irq_resolve_mapping (struct irq_domain *domain, irq_hw_number_t hwirq)h]j[)}(hVstruct irq_desc *irq_resolve_mapping(struct irq_domain *domain, irq_hw_number_t hwirq)h](ja)}(hjdh]hstruct}(hj_hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj[hhhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMubjs)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj[hhhjlhMubh)}(hhh]j)}(hirq_desch]hirq_desc}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jirq_resolve_mappingsbc.irq_resolve_mappingasbuh1hhj[hhhjlhMubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj[hhhjlhMubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[hhhjlhMubj)}(hirq_resolve_mappingh]j)}(hjh]hirq_resolve_mapping}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[hhhjlhMubj)}(h2(struct irq_domain *domain, irq_hw_number_t hwirq)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hjhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.irq_resolve_mappingasbuh1hhjubjs)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(hjh]h*}(hj# hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdomainh]hdomain}(hj0 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hirq_hw_number_t hwirqh](h)}(hhh]j)}(hirq_hw_number_th]hirq_hw_number_t}(hjL hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjN modnameN classnameNjj)}j]jc.irq_resolve_mappingasbuh1hhjE ubjs)}(h h]h }(hjj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjE ubj)}(hhwirqh]hhwirq}(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhj[hhhjlhMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjWhhhjlhMubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1jThjlhMhjThhubj)}(hhh]h)}(h&Find a linux irq from a hw irq number.h]h&Find a linux irq from a hw irq number.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhj hhubah}(h]h ]h"]h$]h&]uh1jhjThhhjlhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jOhhhjhNhNubj)}(h**Parameters** ``struct irq_domain *domain`` domain owning this hardware interrupt ``irq_hw_number_t hwirq`` hardware irq number in that domain space **Return** Interrupt descriptorh](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhj ubj))}(hhh](j.)}(hD``struct irq_domain *domain`` domain owning this hardware interrupt h](j4)}(h``struct irq_domain *domain``h]jw)}(hj h]hstruct irq_domain *domain}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhj ubjN)}(hhh]h)}(h%domain owning this hardware interrupth]h%domain owning this hardware interrupt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jMhj ubeh}(h]h ]h"]h$]h&]uh1j-hj hMhj ubj.)}(hC``irq_hw_number_t hwirq`` hardware irq number in that domain space h](j4)}(h``irq_hw_number_t hwirq``h]jw)}(hj!h]hirq_hw_number_t hwirq}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj!ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhj!ubjN)}(hhh]h)}(h(hardware irq number in that domain spaceh]h(hardware irq number in that domain space}(hj5!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1!hMhj2!ubah}(h]h ]h"]h$]h&]uh1jMhj!ubeh}(h]h ]h"]h$]h&]uh1j-hj1!hMhj ubeh}(h]h ]h"]h$]h&]uh1j(hj ubh)}(h **Return**h]j)}(hjW!h]hReturn}(hjY!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU!ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhj ubh)}(hInterrupt descriptorh]hInterrupt descriptor}(hjm!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jKirq_find_mapping (C function)c.irq_find_mappinghNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hPunsigned int irq_find_mapping (struct irq_domain *domain, irq_hw_number_t hwirq)h]j[)}(hOunsigned int irq_find_mapping(struct irq_domain *domain, irq_hw_number_t hwirq)h](jm)}(hunsignedh]hunsigned}(hj!hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj!hhhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM ubjs)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj!hhhj!hM ubjm)}(hinth]hint}(hj!hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj!hhhj!hM ubjs)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj!hhhj!hM ubj)}(hirq_find_mappingh]j)}(hirq_find_mappingh]hirq_find_mapping}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj!hhhj!hM ubj)}(h2(struct irq_domain *domain, irq_hw_number_t hwirq)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hj!hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj!ubjs)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj!ubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"modnameN classnameNjj)}j]j)}jj!sbc.irq_find_mappingasbuh1hhj!ubjs)}(h h]h }(hj3"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj!ubj)}(hjh]h*}(hjA"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hdomainh]hdomain}(hjN"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(hirq_hw_number_t hwirqh](h)}(hhh]j)}(hirq_hw_number_th]hirq_hw_number_t}(hjj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjl"modnameN classnameNjj)}j]j/"c.irq_find_mappingasbuh1hhjc"ubjs)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjc"ubj)}(hhwirqh]hhwirq}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc"ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubeh}(h]h ]h"]h$]h&]jjuh1jhj!hhhj!hM ubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj!hhhj!hM ubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jThj!hM hj!hhubj)}(hhh]h)}(h&Find a linux irq from a hw irq number.h]h&Find a linux irq from a hw irq number.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM hj"hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj!hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj"jj"jjjuh1jOhhhjhNhNubj)}(h**Parameters** ``struct irq_domain *domain`` domain owning this hardware interrupt ``irq_hw_number_t hwirq`` hardware irq number in that domain space **Return** Linux irq number or 0 if not foundh](h)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM hj"ubj))}(hhh](j.)}(hD``struct irq_domain *domain`` domain owning this hardware interrupt h](j4)}(h``struct irq_domain *domain``h]jw)}(hj#h]hstruct irq_domain *domain}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj"ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM hj"ubjN)}(hhh]h)}(h%domain owning this hardware interrupth]h%domain owning this hardware interrupt}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hM hj#ubah}(h]h ]h"]h$]h&]uh1jMhj"ubeh}(h]h ]h"]h$]h&]uh1j-hj#hM hj"ubj.)}(hC``irq_hw_number_t hwirq`` hardware irq number in that domain space h](j4)}(h``irq_hw_number_t hwirq``h]jw)}(hj:#h]hirq_hw_number_t hwirq}(hj<#hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj8#ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM hj4#ubjN)}(hhh]h)}(h(hardware irq number in that domain spaceh]h(hardware irq number in that domain space}(hjS#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO#hM hjP#ubah}(h]h ]h"]h$]h&]uh1jMhj4#ubeh}(h]h ]h"]h$]h&]uh1j-hjO#hM hj"ubeh}(h]h ]h"]h$]h&]uh1j(hj"ubh)}(h **Return**h]j)}(hju#h]hReturn}(hjw#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs#ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM hj"ubh)}(h"Linux irq number or 0 if not foundh]h"Linux irq number or 0 if not found}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK(irq_domain_create_hierarchy (C function)c.irq_domain_create_hierarchyhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hstruct irq_domain * irq_domain_create_hierarchy (struct irq_domain *parent, unsigned int flags, unsigned int size, struct fwnode_handle *fwnode, const struct irq_domain_ops *ops, void *host_data)h]j[)}(hstruct irq_domain *irq_domain_create_hierarchy(struct irq_domain *parent, unsigned int flags, unsigned int size, struct fwnode_handle *fwnode, const struct irq_domain_ops *ops, void *host_data)h](ja)}(hjdh]hstruct}(hj#hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj#hhhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM=ubjs)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj#hhhj#hM=ubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj)}j]j)}jirq_domain_create_hierarchysbc.irq_domain_create_hierarchyasbuh1hhj#hhhj#hM=ubjs)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj#hhhj#hM=ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hM=ubj)}(hirq_domain_create_hierarchyh]j)}(hj#h]hirq_domain_create_hierarchy}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj#hhhj#hM=ubj)}(h(struct irq_domain *parent, unsigned int flags, unsigned int size, struct fwnode_handle *fwnode, const struct irq_domain_ops *ops, void *host_data)h](j)}(hstruct irq_domain *parenth](ja)}(hjdh]hstruct}(hj4$hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj0$ubjs)}(h h]h }(hjA$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj0$ubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjR$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjT$modnameN classnameNjj)}j]j#c.irq_domain_create_hierarchyasbuh1hhj0$ubjs)}(h h]h }(hjp$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj0$ubj)}(hjh]h*}(hj~$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0$ubj)}(hparenth]hparent}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,$ubj)}(hunsigned int flagsh](jm)}(hunsignedh]hunsigned}(hj$hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj$ubjs)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj$ubjm)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj$ubjs)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj$ubj)}(hflagsh]hflags}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,$ubj)}(hunsigned int sizeh](jm)}(hunsignedh]hunsigned}(hj$hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj$ubjs)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj$ubjm)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj$ubjs)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj$ubj)}(hsizeh]hsize}(hj-%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,$ubj)}(hstruct fwnode_handle *fwnodeh](ja)}(hjdh]hstruct}(hjF%hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjB%ubjs)}(h h]h }(hjS%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjB%ubh)}(hhh]j)}(h fwnode_handleh]h fwnode_handle}(hjd%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjf%modnameN classnameNjj)}j]j#c.irq_domain_create_hierarchyasbuh1hhjB%ubjs)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjB%ubj)}(hjh]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB%ubj)}(hfwnodeh]hfwnode}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,$ubj)}(h const struct irq_domain_ops *opsh](ja)}(hjh]hconst}(hj%hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj%ubjs)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj%ubja)}(hjdh]hstruct}(hj%hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj%ubjs)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj%ubh)}(hhh]j)}(hirq_domain_opsh]hirq_domain_ops}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNjj)}j]j#c.irq_domain_create_hierarchyasbuh1hhj%ubjs)}(h h]h }(hj &hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj%ubj)}(hjh]h*}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hopsh]hops}(hj(&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,$ubj)}(hvoid *host_datah](jm)}(hvoidh]hvoid}(hjA&hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj=&ubjs)}(h h]h }(hjO&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj=&ubj)}(hjh]h*}(hj]&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=&ubj)}(h host_datah]h host_data}(hjj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=&ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj,$ubeh}(h]h ]h"]h$]h&]jjuh1jhj#hhhj#hM=ubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj#hhhj#hM=ubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1jThj#hM=hj#hhubj)}(hhh]h)}(h"Add a irqdomain into the hierarchyh]h"Add a irqdomain into the hierarchy}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM=hj&hhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj#hM=ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&jj&jjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *parent`` Parent irq domain to associate with the new domain ``unsigned int flags`` Irq domain flags associated to the domain ``unsigned int size`` Size of the domain. See below ``struct fwnode_handle *fwnode`` Optional fwnode of the interrupt controller ``const struct irq_domain_ops *ops`` Pointer to the interrupt domain callbacks ``void *host_data`` Controller private data pointer **Description** If **size** is 0 a tree domain is created, otherwise a linear domain. If successful the parent is associated to the new domain and the domain flags are set. **Return** A pointer to IRQ domain, or ``NULL`` on failure.h](h)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMAhj&ubj))}(hhh](j.)}(hQ``struct irq_domain *parent`` Parent irq domain to associate with the new domain h](j4)}(h``struct irq_domain *parent``h]jw)}(hj&h]hstruct irq_domain *parent}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj&ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM>hj&ubjN)}(hhh]h)}(h2Parent irq domain to associate with the new domainh]h2Parent irq domain to associate with the new domain}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hM>hj&ubah}(h]h ]h"]h$]h&]uh1jMhj&ubeh}(h]h ]h"]h$]h&]uh1j-hj&hM>hj&ubj.)}(hA``unsigned int flags`` Irq domain flags associated to the domain h](j4)}(h``unsigned int flags``h]jw)}(hj'h]hunsigned int flags}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj 'ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM?hj'ubjN)}(hhh]h)}(h)Irq domain flags associated to the domainh]h)Irq domain flags associated to the domain}(hj''hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#'hM?hj$'ubah}(h]h ]h"]h$]h&]uh1jMhj'ubeh}(h]h ]h"]h$]h&]uh1j-hj#'hM?hj&ubj.)}(h4``unsigned int size`` Size of the domain. See below h](j4)}(h``unsigned int size``h]jw)}(hjG'h]hunsigned int size}(hjI'hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjE'ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhM@hjA'ubjN)}(hhh]h)}(hSize of the domain. See belowh]hSize of the domain. See below}(hj`'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\'hM@hj]'ubah}(h]h ]h"]h$]h&]uh1jMhjA'ubeh}(h]h ]h"]h$]h&]uh1j-hj\'hM@hj&ubj.)}(hM``struct fwnode_handle *fwnode`` Optional fwnode of the interrupt controller h](j4)}(h ``struct fwnode_handle *fwnode``h]jw)}(hj'h]hstruct fwnode_handle *fwnode}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj~'ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMAhjz'ubjN)}(hhh]h)}(h+Optional fwnode of the interrupt controllerh]h+Optional fwnode of the interrupt controller}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMAhj'ubah}(h]h ]h"]h$]h&]uh1jMhjz'ubeh}(h]h ]h"]h$]h&]uh1j-hj'hMAhj&ubj.)}(hO``const struct irq_domain_ops *ops`` Pointer to the interrupt domain callbacks h](j4)}(h$``const struct irq_domain_ops *ops``h]jw)}(hj'h]h const struct irq_domain_ops *ops}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj'ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMBhj'ubjN)}(hhh]h)}(h)Pointer to the interrupt domain callbacksh]h)Pointer to the interrupt domain callbacks}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMBhj'ubah}(h]h ]h"]h$]h&]uh1jMhj'ubeh}(h]h ]h"]h$]h&]uh1j-hj'hMBhj&ubj.)}(h4``void *host_data`` Controller private data pointer h](j4)}(h``void *host_data``h]jw)}(hj'h]hvoid *host_data}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj'ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMChj'ubjN)}(hhh]h)}(hController private data pointerh]hController private data pointer}(hj (hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMChj(ubah}(h]h ]h"]h$]h&]uh1jMhj'ubeh}(h]h ]h"]h$]h&]uh1j-hj(hMChj&ubeh}(h]h ]h"]h$]h&]uh1j(hj&ubh)}(h**Description**h]j)}(hj-(h]h Description}(hj/(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+(ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMEhj&ubh)}(hEIf **size** is 0 a tree domain is created, otherwise a linear domain.h](hIf }(hjC(hhhNhNubj)}(h**size**h]hsize}(hjK(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC(ubh: is 0 a tree domain is created, otherwise a linear domain.}(hjC(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMDhj&ubh)}(hVIf successful the parent is associated to the new domain and the domain flags are set.h]hVIf successful the parent is associated to the new domain and the domain flags are set.}(hjd(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMFhj&ubh)}(h **Return**h]j)}(hju(h]hReturn}(hjw(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs(ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMIhj&ubh)}(h0A pointer to IRQ domain, or ``NULL`` on failure.h](hA pointer to IRQ domain, or }(hj(hhhNhNubjw)}(h``NULL``h]hNULL}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj(ubh on failure.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMJhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK"irq_domain_alloc_irqs (C function)c.irq_domain_alloc_irqshNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(h`int irq_domain_alloc_irqs (struct irq_domain *domain, unsigned int nr_irqs, int node, void *arg)h]j[)}(h_int irq_domain_alloc_irqs(struct irq_domain *domain, unsigned int nr_irqs, int node, void *arg)h](jm)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj(hhhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhubjs)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj(hhhj(hMhubj)}(hirq_domain_alloc_irqsh]j)}(hirq_domain_alloc_irqsh]hirq_domain_alloc_irqs}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(hhhj(hMhubj)}(hF(struct irq_domain *domain, unsigned int nr_irqs, int node, void *arg)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hj )hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj)ubjs)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj)ubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj')hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj))modnameN classnameNjj)}j]j)}jj(sbc.irq_domain_alloc_irqsasbuh1hhj)ubjs)}(h h]h }(hjG)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj)ubj)}(hjh]h*}(hjU)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hdomainh]hdomain}(hjb)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubj)}(hunsigned int nr_irqsh](jm)}(hunsignedh]hunsigned}(hj{)hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjw)ubjs)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjw)ubjm)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjw)ubjs)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjw)ubj)}(hnr_irqsh]hnr_irqs}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubj)}(hint nodeh](jm)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj)ubjs)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj)ubj)}(hnodeh]hnode}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubj)}(h void *argh](jm)}(hvoidh]hvoid}(hj*hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj)ubjs)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj)ubj)}(hjh]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hargh]harg}(hj**hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)ubeh}(h]h ]h"]h$]h&]jjuh1jhj(hhhj(hMhubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj(hhhj(hMhubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1jThj(hMhhj(hhubj)}(hhh]h)}(hAllocate IRQs from domainh]hAllocate IRQs from domain}(hjT*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMhhjQ*hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hMhubeh}(h]h ](jfunctioneh"]h$]h&]jjjjl*jjl*jjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *domain`` domain to allocate from ``unsigned int nr_irqs`` number of IRQs to allocate ``int node`` NUMA node id for memory allocation ``void *arg`` domain specific argument **Description** See __irq_domain_alloc_irqs()' documentation.h](h)}(h**Parameters**h]j)}(hjv*h]h Parameters}(hjx*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt*ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMlhjp*ubj))}(hhh](j.)}(h6``struct irq_domain *domain`` domain to allocate from h](j4)}(h``struct irq_domain *domain``h]jw)}(hj*h]hstruct irq_domain *domain}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj*ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMihj*ubjN)}(hhh]h)}(hdomain to allocate fromh]hdomain to allocate from}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMihj*ubah}(h]h ]h"]h$]h&]uh1jMhj*ubeh}(h]h ]h"]h$]h&]uh1j-hj*hMihj*ubj.)}(h4``unsigned int nr_irqs`` number of IRQs to allocate h](j4)}(h``unsigned int nr_irqs``h]jw)}(hj*h]hunsigned int nr_irqs}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj*ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMjhj*ubjN)}(hhh]h)}(hnumber of IRQs to allocateh]hnumber of IRQs to allocate}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMjhj*ubah}(h]h ]h"]h$]h&]uh1jMhj*ubeh}(h]h ]h"]h$]h&]uh1j-hj*hMjhj*ubj.)}(h0``int node`` NUMA node id for memory allocation h](j4)}(h ``int node``h]jw)}(hj+h]hint node}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj+ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMkhj+ubjN)}(hhh]h)}(h"NUMA node id for memory allocationh]h"NUMA node id for memory allocation}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMkhj+ubah}(h]h ]h"]h$]h&]uh1jMhj+ubeh}(h]h ]h"]h$]h&]uh1j-hj+hMkhj*ubj.)}(h'``void *arg`` domain specific argument h](j4)}(h ``void *arg``h]jw)}(hj@+h]h void *arg}(hjB+hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj>+ubah}(h]h ]h"]h$]h&]uh1j3hb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMlhj:+ubjN)}(hhh]h)}(hdomain specific argumenth]hdomain specific argument}(hjY+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU+hMlhjV+ubah}(h]h ]h"]h$]h&]uh1jMhj:+ubeh}(h]h ]h"]h$]h&]uh1j-hjU+hMlhj*ubeh}(h]h ]h"]h$]h&]uh1j(hjp*ubh)}(h**Description**h]j)}(hj{+h]h Description}(hj}+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy+ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMnhjp*ubh)}(h-See __irq_domain_alloc_irqs()' documentation.h]h/See __irq_domain_alloc_irqs()’ documentation.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:308: ./include/linux/irqdomain.hhMmhjp*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK&__irq_domain_alloc_fwnode (C function)c.__irq_domain_alloc_fwnodehNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hstruct fwnode_handle * __irq_domain_alloc_fwnode (unsigned int type, int id, const char *name, phys_addr_t *pa, struct fwnode_handle *parent)h]j[)}(hstruct fwnode_handle *__irq_domain_alloc_fwnode(unsigned int type, int id, const char *name, phys_addr_t *pa, struct fwnode_handle *parent)h](ja)}(hjdh]hstruct}(hj+hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj+hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKGubjs)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj+hhhj+hKGubh)}(hhh]j)}(h fwnode_handleh]h fwnode_handle}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNjj)}j]j)}j__irq_domain_alloc_fwnodesbc.__irq_domain_alloc_fwnodeasbuh1hhj+hhhj+hKGubjs)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj+hhhj+hKGubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj+hKGubj)}(h__irq_domain_alloc_fwnodeh]j)}(hj+h]h__irq_domain_alloc_fwnode}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj+hhhj+hKGubj)}(h\(unsigned int type, int id, const char *name, phys_addr_t *pa, struct fwnode_handle *parent)h](j)}(hunsigned int typeh](jm)}(hunsignedh]hunsigned}(hj:,hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj6,ubjs)}(h h]h }(hjH,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj6,ubjm)}(hinth]hint}(hjV,hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj6,ubjs)}(h h]h }(hjd,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj6,ubj)}(htypeh]htype}(hjr,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2,ubj)}(hint idh](jm)}(hinth]hint}(hj,hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj,ubjs)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj,ubj)}(hidh]hid}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2,ubj)}(hconst char *nameh](ja)}(hjh]hconst}(hj,hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj,ubjs)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj,ubjm)}(hcharh]hchar}(hj,hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj,ubjs)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj,ubj)}(hjh]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hnameh]hname}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2,ubj)}(hphys_addr_t *pah](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hj -hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"-modnameN classnameNjj)}j]j+c.__irq_domain_alloc_fwnodeasbuh1hhj-ubjs)}(h h]h }(hj>-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj-ubj)}(hjh]h*}(hjL-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(hpah]hpa}(hjY-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2,ubj)}(hstruct fwnode_handle *parenth](ja)}(hjdh]hstruct}(hjr-hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjn-ubjs)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjn-ubh)}(hhh]j)}(h fwnode_handleh]h fwnode_handle}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNjj)}j]j+c.__irq_domain_alloc_fwnodeasbuh1hhjn-ubjs)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjn-ubj)}(hjh]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn-ubj)}(hparenth]hparent}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn-ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj2,ubeh}(h]h ]h"]h$]h&]jjuh1jhj+hhhj+hKGubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj+hhhj+hKGubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1jThj+hKGhj+hhubj)}(hhh]h)}(h?Allocate a fwnode_handle suitable for identifying an irq domainh]h?Allocate a fwnode_handle suitable for identifying an irq domain}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKGhj-hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hKGubeh}(h]h ](jfunctioneh"]h$]h&]jjjj .jj .jjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``unsigned int type`` Type of irqchip_fwnode. See linux/irqdomain.h ``int id`` Optional user provided id if name != NULL ``const char *name`` Optional user provided domain name ``phys_addr_t *pa`` Optional user-provided physical address ``struct fwnode_handle *parent`` Optional parent fwnode_handle **Description** Allocate a struct irqchip_fwid, and return a pointer to the embedded fwnode_handle (or NULL on failure). **Note** The types IRQCHIP_FWNODE_NAMED and IRQCHIP_FWNODE_NAMED_ID are solely to transport name information to irqdomain creation code. The node is not stored. For other types the pointer is kept in the irq domain struct.h](h)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKKhj.ubj))}(hhh](j.)}(hD``unsigned int type`` Type of irqchip_fwnode. See linux/irqdomain.h h](j4)}(h``unsigned int type``h]jw)}(hj4.h]hunsigned int type}(hj6.hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj2.ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKIhj..ubjN)}(hhh]h)}(h-Type of irqchip_fwnode. See linux/irqdomain.hh]h-Type of irqchip_fwnode. See linux/irqdomain.h}(hjM.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI.hKIhjJ.ubah}(h]h ]h"]h$]h&]uh1jMhj..ubeh}(h]h ]h"]h$]h&]uh1j-hjI.hKIhj+.ubj.)}(h5``int id`` Optional user provided id if name != NULL h](j4)}(h ``int id``h]jw)}(hjm.h]hint id}(hjo.hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjk.ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKJhjg.ubjN)}(hhh]h)}(h)Optional user provided id if name != NULLh]h)Optional user provided id if name != NULL}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKJhj.ubah}(h]h ]h"]h$]h&]uh1jMhjg.ubeh}(h]h ]h"]h$]h&]uh1j-hj.hKJhj+.ubj.)}(h8``const char *name`` Optional user provided domain name h](j4)}(h``const char *name``h]jw)}(hj.h]hconst char *name}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj.ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKKhj.ubjN)}(hhh]h)}(h"Optional user provided domain nameh]h"Optional user provided domain name}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKKhj.ubah}(h]h ]h"]h$]h&]uh1jMhj.ubeh}(h]h ]h"]h$]h&]uh1j-hj.hKKhj+.ubj.)}(h<``phys_addr_t *pa`` Optional user-provided physical address h](j4)}(h``phys_addr_t *pa``h]jw)}(hj.h]hphys_addr_t *pa}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj.ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKLhj.ubjN)}(hhh]h)}(h'Optional user-provided physical addressh]h'Optional user-provided physical address}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKLhj.ubah}(h]h ]h"]h$]h&]uh1jMhj.ubeh}(h]h ]h"]h$]h&]uh1j-hj.hKLhj+.ubj.)}(h?``struct fwnode_handle *parent`` Optional parent fwnode_handle h](j4)}(h ``struct fwnode_handle *parent``h]jw)}(hj/h]hstruct fwnode_handle *parent}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj/ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKMhj/ubjN)}(hhh]h)}(hOptional parent fwnode_handleh]hOptional parent fwnode_handle}(hj1/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-/hKMhj./ubah}(h]h ]h"]h$]h&]uh1jMhj/ubeh}(h]h ]h"]h$]h&]uh1j-hj-/hKMhj+.ubeh}(h]h ]h"]h$]h&]uh1j(hj.ubh)}(h**Description**h]j)}(hjS/h]h Description}(hjU/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ/ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKOhj.ubh)}(hhAllocate a struct irqchip_fwid, and return a pointer to the embedded fwnode_handle (or NULL on failure).h]hhAllocate a struct irqchip_fwid, and return a pointer to the embedded fwnode_handle (or NULL on failure).}(hji/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKNhj.ubh)}(h**Note**h]j)}(hjz/h]hNote}(hj|/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx/ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKQhj.ubh)}(hThe types IRQCHIP_FWNODE_NAMED and IRQCHIP_FWNODE_NAMED_ID are solely to transport name information to irqdomain creation code. The node is not stored. For other types the pointer is kept in the irq domain struct.h]hThe types IRQCHIP_FWNODE_NAMED and IRQCHIP_FWNODE_NAMED_ID are solely to transport name information to irqdomain creation code. The node is not stored. For other types the pointer is kept in the irq domain struct.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKRhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK#irq_domain_free_fwnode (C function)c.irq_domain_free_fwnodehNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(h:void irq_domain_free_fwnode (struct fwnode_handle *fwnode)h]j[)}(h9void irq_domain_free_fwnode(struct fwnode_handle *fwnode)h](jm)}(hvoidh]hvoid}(hj/hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj/hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chK}ubjs)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj/hhhj/hK}ubj)}(hirq_domain_free_fwnodeh]j)}(hirq_domain_free_fwnodeh]hirq_domain_free_fwnode}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhj/hK}ubj)}(h(struct fwnode_handle *fwnode)h]j)}(hstruct fwnode_handle *fwnodeh](ja)}(hjdh]hstruct}(hj/hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj/ubjs)}(h h]h }(hj 0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj/ubh)}(hhh]j)}(h fwnode_handleh]h fwnode_handle}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNjj)}j]j)}jj/sbc.irq_domain_free_fwnodeasbuh1hhj/ubjs)}(h h]h }(hj:0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj/ubj)}(hjh]h*}(hjH0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hfwnodeh]hfwnode}(hjU0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/ubah}(h]h ]h"]h$]h&]jjuh1jhj/hhhj/hK}ubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj/hhhj/hK}ubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1jThj/hK}hj/hhubj)}(hhh]h)}(h"Free a non-OF-backed fwnode_handleh]h"Free a non-OF-backed fwnode_handle}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chK}hj|0hhubah}(h]h ]h"]h$]h&]uh1jhj/hhhj/hK}ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1jOhhhjhNhNubj)}(h**Parameters** ``struct fwnode_handle *fwnode`` fwnode_handle to free **Description** Free a fwnode_handle allocated with irq_domain_alloc_fwnode.h](h)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKhj0ubj))}(hhh]j.)}(h7``struct fwnode_handle *fwnode`` fwnode_handle to free h](j4)}(h ``struct fwnode_handle *fwnode``h]jw)}(hj0h]hstruct fwnode_handle *fwnode}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj0ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chK~hj0ubjN)}(hhh]h)}(hfwnode_handle to freeh]hfwnode_handle to free}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hK~hj0ubah}(h]h ]h"]h$]h&]uh1jMhj0ubeh}(h]h ]h"]h$]h&]uh1j-hj0hK~hj0ubah}(h]h ]h"]h$]h&]uh1j(hj0ubh)}(h**Description**h]j)}(hj0h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKhj0ubh)}(hhjhhhNhNubjP)}(hhh](jU)}(hOstruct irq_domain * irq_domain_instantiate (const struct irq_domain_info *info)h]j[)}(hMstruct irq_domain *irq_domain_instantiate(const struct irq_domain_info *info)h](ja)}(hjdh]hstruct}(hj@1hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj<1hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM{ubjs)}(h h]h }(hjN1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj<1hhhjM1hM{ubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj_1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetja1modnameN classnameNjj)}j]j)}jirq_domain_instantiatesbc.irq_domain_instantiateasbuh1hhj<1hhhjM1hM{ubjs)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj<1hhhjM1hM{ubj)}(hjh]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<1hhhjM1hM{ubj)}(hirq_domain_instantiateh]j)}(hj}1h]hirq_domain_instantiate}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj<1hhhjM1hM{ubj)}(h$(const struct irq_domain_info *info)h]j)}(h"const struct irq_domain_info *infoh](ja)}(hjh]hconst}(hj1hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj1ubjs)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj1ubja)}(hjdh]hstruct}(hj1hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj1ubjs)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj1ubh)}(hhh]j)}(hirq_domain_infoh]hirq_domain_info}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j{1c.irq_domain_instantiateasbuh1hhj1ubjs)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj1ubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(hinfoh]hinfo}(hj,2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj1ubah}(h]h ]h"]h$]h&]jjuh1jhj<1hhhjM1hM{ubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj81hhhjM1hM{ubah}(h]j31ah ](jjeh"]h$]h&]jj)jhuh1jThjM1hM{hj51hhubj)}(hhh]h)}(h+Instantiate a new irq domain data structureh]h+Instantiate a new irq domain data structure}(hjV2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM{hjS2hhubah}(h]h ]h"]h$]h&]uh1jhj51hhhjM1hM{ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjn2jjn2jjjuh1jOhhhjhNhNubj)}(h**Parameters** ``const struct irq_domain_info *info`` Domain information pointer pointing to the information for this domain **Return** A pointer to the instantiated irq domain or an ERR_PTR value.h](h)}(h**Parameters**h]j)}(hjx2h]h Parameters}(hjz2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv2ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjr2ubj))}(hhh]j.)}(hn``const struct irq_domain_info *info`` Domain information pointer pointing to the information for this domain h](j4)}(h&``const struct irq_domain_info *info``h]jw)}(hj2h]h"const struct irq_domain_info *info}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj2ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM|hj2ubjN)}(hhh]h)}(hFDomain information pointer pointing to the information for this domainh]hFDomain information pointer pointing to the information for this domain}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hM|hj2ubah}(h]h ]h"]h$]h&]uh1jMhj2ubeh}(h]h ]h"]h$]h&]uh1j-hj2hM|hj2ubah}(h]h ]h"]h$]h&]uh1j(hjr2ubh)}(h **Return**h]j)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM~hjr2ubh)}(h=A pointer to the instantiated irq domain or an ERR_PTR value.h]h=A pointer to the instantiated irq domain or an ERR_PTR value.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM~hjr2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jKirq_domain_remove (C function)c.irq_domain_removehNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(h2void irq_domain_remove (struct irq_domain *domain)h]j[)}(h1void irq_domain_remove(struct irq_domain *domain)h](jm)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj3hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hj&3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj3hhhj%3hMubj)}(hirq_domain_removeh]j)}(hirq_domain_removeh]hirq_domain_remove}(hj83hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj43ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj3hhhj%3hMubj)}(h(struct irq_domain *domain)h]j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hjT3hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjP3ubjs)}(h h]h }(hja3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjP3ubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjr3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo3ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjt3modnameN classnameNjj)}j]j)}jj:3sbc.irq_domain_removeasbuh1hhjP3ubjs)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjP3ubj)}(hjh]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP3ubj)}(hdomainh]hdomain}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP3ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjL3ubah}(h]h ]h"]h$]h&]jjuh1jhj3hhhj%3hMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj3hhhj%3hMubah}(h]j 3ah ](jjeh"]h$]h&]jj)jhuh1jThj%3hMhj 3hhubj)}(hhh]h)}(hRemove an irq domain.h]hRemove an irq domain.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj3hhubah}(h]h ]h"]h$]h&]uh1jhj 3hhhj%3hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3jj3jjjuh1jOhhhjhNhNubj)}(h**Parameters** ``struct irq_domain *domain`` domain to remove **Description** This routine is used to remove an irq domain. The caller must ensure that all mappings within the domain have been disposed of prior to use, depending on the revmap type.h](h)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj3ubj))}(hhh]j.)}(h/``struct irq_domain *domain`` domain to remove h](j4)}(h``struct irq_domain *domain``h]jw)}(hj4h]hstruct irq_domain *domain}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj4ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj4ubjN)}(hhh]h)}(hdomain to removeh]hdomain to remove}(hj14hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-4hMhj.4ubah}(h]h ]h"]h$]h&]uh1jMhj4ubeh}(h]h ]h"]h$]h&]uh1j-hj-4hMhj4ubah}(h]h ]h"]h$]h&]uh1j(hj3ubh)}(h**Description**h]j)}(hjS4h]h Description}(hjU4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ4ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj3ubh)}(hThis routine is used to remove an irq domain. The caller must ensure that all mappings within the domain have been disposed of prior to use, depending on the revmap type.h]hThis routine is used to remove an irq domain. The caller must ensure that all mappings within the domain have been disposed of prior to use, depending on the revmap type.}(hji4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK%irq_domain_create_simple (C function)c.irq_domain_create_simplehNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hstruct irq_domain * irq_domain_create_simple (struct fwnode_handle *fwnode, unsigned int size, unsigned int first_irq, const struct irq_domain_ops *ops, void *host_data)h]j[)}(hstruct irq_domain *irq_domain_create_simple(struct fwnode_handle *fwnode, unsigned int size, unsigned int first_irq, const struct irq_domain_ops *ops, void *host_data)h](ja)}(hjdh]hstruct}(hj4hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj4hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj4hhhj4hMubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj4modnameN classnameNjj)}j]j)}jirq_domain_create_simplesbc.irq_domain_create_simpleasbuh1hhj4hhhj4hMubjs)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj4hhhj4hMubj)}(hjh]h*}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj4hMubj)}(hirq_domain_create_simpleh]j)}(hj4h]hirq_domain_create_simple}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4 hhhj4hMubj)}(h|(struct fwnode_handle *fwnode, unsigned int size, unsigned int first_irq, const struct irq_domain_ops *ops, void *host_data)h](j)}(hstruct fwnode_handle *fwnodeh](ja)}(hjdh]hstruct}(hj5hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj5ubjs)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj5ubh)}(hhh]j)}(h fwnode_handleh]h fwnode_handle}(hj05hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj25modnameN classnameNjj)}j]j4c.irq_domain_create_simpleasbuh1hhj5ubjs)}(h h]h }(hjN5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj5ubj)}(hjh]h*}(hj\5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hfwnodeh]hfwnode}(hji5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj 5ubj)}(hunsigned int sizeh](jm)}(hunsignedh]hunsigned}(hj5hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj~5ubjs)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj~5ubjm)}(hinth]hint}(hj5hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj~5ubjs)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj~5ubj)}(hsizeh]hsize}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj 5ubj)}(hunsigned int first_irqh](jm)}(hunsignedh]hunsigned}(hj5hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj5ubjs)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj5ubjm)}(hinth]hint}(hj5hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj5ubjs)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj5ubj)}(h first_irqh]h first_irq}(hj 6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj 5ubj)}(h const struct irq_domain_ops *opsh](ja)}(hjh]hconst}(hj$6hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj 6ubjs)}(h h]h }(hj16hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj 6ubja)}(hjdh]hstruct}(hj?6hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj 6ubjs)}(h h]h }(hjL6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj 6ubh)}(hhh]j)}(hirq_domain_opsh]hirq_domain_ops}(hj]6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ6ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_6modnameN classnameNjj)}j]j4c.irq_domain_create_simpleasbuh1hhj 6ubjs)}(h h]h }(hj{6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj 6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 6ubj)}(hopsh]hops}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj 5ubj)}(hvoid *host_datah](jm)}(hvoidh]hvoid}(hj6hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj6ubjs)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj6ubj)}(hjh]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h host_datah]h host_data}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj 5ubeh}(h]h ]h"]h$]h&]jjuh1jhj4hhhj4hMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj4hhhj4hMubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1jThj4hMhj4hhubj)}(hhh]h)}(h9Register an irq_domain and optionally map a range of irqsh]h9Register an irq_domain and optionally map a range of irqs}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj6hhubah}(h]h ]h"]h$]h&]uh1jhj4hhhj4hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct fwnode_handle *fwnode`` firmware node for the interrupt controller ``unsigned int size`` total number of irqs in mapping ``unsigned int first_irq`` first number of irq block assigned to the domain, pass zero to assign irqs on-the-fly. If first_irq is non-zero, then pre-map all of the irqs in the domain to virqs starting at first_irq. ``const struct irq_domain_ops *ops`` domain callbacks ``void *host_data`` Controller private data pointer **Description** Allocates an irq_domain, and optionally if first_irq is positive then also allocate irq_descs and map all of the hwirqs to virqs starting at first_irq. This is intended to implement the expected behaviour for most interrupt controllers. If device tree is used, then first_irq will be 0 and irqs get mapped dynamically on the fly. However, if the controller requires static virq assignments (non-DT boot) then it will set that up correctly.h](h)}(h**Parameters**h]j)}(hj$7h]h Parameters}(hj&7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"7ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj7ubj))}(hhh](j.)}(hL``struct fwnode_handle *fwnode`` firmware node for the interrupt controller h](j4)}(h ``struct fwnode_handle *fwnode``h]jw)}(hjC7h]hstruct fwnode_handle *fwnode}(hjE7hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjA7ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj=7ubjN)}(hhh]h)}(h*firmware node for the interrupt controllerh]h*firmware node for the interrupt controller}(hj\7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX7hMhjY7ubah}(h]h ]h"]h$]h&]uh1jMhj=7ubeh}(h]h ]h"]h$]h&]uh1j-hjX7hMhj:7ubj.)}(h6``unsigned int size`` total number of irqs in mapping h](j4)}(h``unsigned int size``h]jw)}(hj|7h]hunsigned int size}(hj~7hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjz7ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjv7ubjN)}(hhh]h)}(htotal number of irqs in mappingh]htotal number of irqs in mapping}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jMhjv7ubeh}(h]h ]h"]h$]h&]uh1j-hj7hMhj:7ubj.)}(h``unsigned int first_irq`` first number of irq block assigned to the domain, pass zero to assign irqs on-the-fly. If first_irq is non-zero, then pre-map all of the irqs in the domain to virqs starting at first_irq. h](j4)}(h``unsigned int first_irq``h]jw)}(hj7h]hunsigned int first_irq}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj7ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj7ubjN)}(hhh]h)}(hfirst number of irq block assigned to the domain, pass zero to assign irqs on-the-fly. If first_irq is non-zero, then pre-map all of the irqs in the domain to virqs starting at first_irq.h]hfirst number of irq block assigned to the domain, pass zero to assign irqs on-the-fly. If first_irq is non-zero, then pre-map all of the irqs in the domain to virqs starting at first_irq.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj7ubah}(h]h ]h"]h$]h&]uh1jMhj7ubeh}(h]h ]h"]h$]h&]uh1j-hj7hMhj:7ubj.)}(h6``const struct irq_domain_ops *ops`` domain callbacks h](j4)}(h$``const struct irq_domain_ops *ops``h]jw)}(hj7h]h const struct irq_domain_ops *ops}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj7ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj7ubjN)}(hhh]h)}(hdomain callbacksh]hdomain callbacks}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jMhj7ubeh}(h]h ]h"]h$]h&]uh1j-hj8hMhj:7ubj.)}(h4``void *host_data`` Controller private data pointer h](j4)}(h``void *host_data``h]jw)}(hj(8h]hvoid *host_data}(hj*8hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj&8ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj"8ubjN)}(hhh]h)}(hController private data pointerh]hController private data pointer}(hjA8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=8hMhj>8ubah}(h]h ]h"]h$]h&]uh1jMhj"8ubeh}(h]h ]h"]h$]h&]uh1j-hj=8hMhj:7ubeh}(h]h ]h"]h$]h&]uh1j(hj7ubh)}(h**Description**h]j)}(hjc8h]h Description}(hje8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja8ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj7ubh)}(hAllocates an irq_domain, and optionally if first_irq is positive then also allocate irq_descs and map all of the hwirqs to virqs starting at first_irq.h]hAllocates an irq_domain, and optionally if first_irq is positive then also allocate irq_descs and map all of the hwirqs to virqs starting at first_irq.}(hjy8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj7ubh)}(hXThis is intended to implement the expected behaviour for most interrupt controllers. If device tree is used, then first_irq will be 0 and irqs get mapped dynamically on the fly. However, if the controller requires static virq assignments (non-DT boot) then it will set that up correctly.h]hXThis is intended to implement the expected behaviour for most interrupt controllers. If device tree is used, then first_irq will be 0 and irqs get mapped dynamically on the fly. However, if the controller requires static virq assignments (non-DT boot) then it will set that up correctly.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK%irq_find_matching_fwspec (C function)c.irq_find_matching_fwspechNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hmstruct irq_domain * irq_find_matching_fwspec (struct irq_fwspec *fwspec, enum irq_domain_bus_token bus_token)h]j[)}(hkstruct irq_domain *irq_find_matching_fwspec(struct irq_fwspec *fwspec, enum irq_domain_bus_token bus_token)h](ja)}(hjdh]hstruct}(hj8hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj8hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj8hhhj8hMubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj8modnameN classnameNjj)}j]j)}jirq_find_matching_fwspecsbc.irq_find_matching_fwspecasbuh1hhj8hhhj8hMubjs)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj8hhhj8hMubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hMubj)}(hirq_find_matching_fwspech]j)}(hj8h]hirq_find_matching_fwspec}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhj8hMubj)}(h@(struct irq_fwspec *fwspec, enum irq_domain_bus_token bus_token)h](j)}(hstruct irq_fwspec *fwspech](ja)}(hjdh]hstruct}(hj19hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj-9ubjs)}(h h]h }(hj>9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj-9ubh)}(hhh]j)}(h irq_fwspech]h irq_fwspec}(hjO9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQ9modnameN classnameNjj)}j]j8c.irq_find_matching_fwspecasbuh1hhj-9ubjs)}(h h]h }(hjm9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj-9ubj)}(hjh]h*}(hj{9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-9ubj)}(hfwspech]hfwspec}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)9ubj)}(h#enum irq_domain_bus_token bus_tokenh](ja)}(henumh]henum}(hj9hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj9ubjs)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj9ubh)}(hhh]j)}(hirq_domain_bus_tokenh]hirq_domain_bus_token}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j8c.irq_find_matching_fwspecasbuh1hhj9ubjs)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj9ubj)}(h bus_tokenh]h bus_token}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj)9ubeh}(h]h ]h"]h$]h&]jjuh1jhj8hhhj8hMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj8hhhj8hMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1jThj8hMhj8hhubj)}(hhh]h)}(h#Locates a domain for a given fwspech]h#Locates a domain for a given fwspec}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj:hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj8hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.:jj.:jjjuh1jOhhhjhNhNubj)}(h**Parameters** ``struct irq_fwspec *fwspec`` FW specifier for an interrupt ``enum irq_domain_bus_token bus_token`` domain-specific datah](h)}(h**Parameters**h]j)}(hj8:h]h Parameters}(hj::hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6:ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM hj2:ubj))}(hhh](j.)}(h<``struct irq_fwspec *fwspec`` FW specifier for an interrupt h](j4)}(h``struct irq_fwspec *fwspec``h]jw)}(hjW:h]hstruct irq_fwspec *fwspec}(hjY:hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjU:ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjQ:ubjN)}(hhh]h)}(hFW specifier for an interrupth]hFW specifier for an interrupt}(hjp:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl:hMhjm:ubah}(h]h ]h"]h$]h&]uh1jMhjQ:ubeh}(h]h ]h"]h$]h&]uh1j-hjl:hMhjN:ubj.)}(h<``enum irq_domain_bus_token bus_token`` domain-specific datah](j4)}(h'``enum irq_domain_bus_token bus_token``h]jw)}(hj:h]h#enum irq_domain_bus_token bus_token}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj:ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM hj:ubjN)}(hhh]h)}(hdomain-specific datah]hdomain-specific data}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM hj:ubah}(h]h ]h"]h$]h&]uh1jMhj:ubeh}(h]h ]h"]h$]h&]uh1j-hj:hM hjN:ubeh}(h]h ]h"]h$]h&]uh1j(hj2:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK#irq_set_default_domain (C function)c.irq_set_default_domainhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(h7void irq_set_default_domain (struct irq_domain *domain)h]j[)}(h6void irq_set_default_domain(struct irq_domain *domain)h](jm)}(hvoidh]hvoid}(hj:hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj:hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM2ubjs)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj:hhhj:hM2ubj)}(hirq_set_default_domainh]j)}(hirq_set_default_domainh]hirq_set_default_domain}(hj ;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj:hhhj:hM2ubj)}(h(struct irq_domain *domain)h]j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hj';hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj#;ubjs)}(h h]h }(hj4;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj#;ubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjE;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjG;modnameN classnameNjj)}j]j)}jj ;sbc.irq_set_default_domainasbuh1hhj#;ubjs)}(h h]h }(hje;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj#;ubj)}(hjh]h*}(hjs;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#;ubj)}(hdomainh]hdomain}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#;ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj;ubah}(h]h ]h"]h$]h&]jjuh1jhj:hhhj:hM2ubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj:hhhj:hM2ubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1jThj:hM2hj:hhubj)}(hhh]h)}(hSet a "default" irq domainh]hSet a “default” irq domain}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM2hj;hhubah}(h]h ]h"]h$]h&]uh1jhj:hhhj:hM2ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1jOhhhjhNhNubj)}(hXg**Parameters** ``struct irq_domain *domain`` default domain pointer **Description** For convenience, it's possible to set a "default" domain that will be used whenever NULL is passed to irq_create_mapping(). It makes life easier for platforms that want to manipulate a few hard coded interrupt numbers that aren't properly represented in the device-tree.h](h)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM6hj;ubj))}(hhh]j.)}(h5``struct irq_domain *domain`` default domain pointer h](j4)}(h``struct irq_domain *domain``h]jw)}(hj;h]hstruct irq_domain *domain}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj;ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM3hj;ubjN)}(hhh]h)}(hdefault domain pointerh]hdefault domain pointer}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hM3hj<ubah}(h]h ]h"]h$]h&]uh1jMhj;ubeh}(h]h ]h"]h$]h&]uh1j-hj<hM3hj;ubah}(h]h ]h"]h$]h&]uh1j(hj;ubh)}(h**Description**h]j)}(hj&<h]h Description}(hj(<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$<ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM5hj;ubh)}(hXFor convenience, it's possible to set a "default" domain that will be used whenever NULL is passed to irq_create_mapping(). It makes life easier for platforms that want to manipulate a few hard coded interrupt numbers that aren't properly represented in the device-tree.h]hXFor convenience, it’s possible to set a “default” domain that will be used whenever NULL is passed to irq_create_mapping(). It makes life easier for platforms that want to manipulate a few hard coded interrupt numbers that aren’t properly represented in the device-tree.}(hj<<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM4hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK#irq_get_default_domain (C function)c.irq_get_default_domainhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(h1struct irq_domain * irq_get_default_domain (void)h]j[)}(h/struct irq_domain *irq_get_default_domain(void)h](ja)}(hjdh]hstruct}(hjk<hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjg<hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMCubjs)}(h h]h }(hjy<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjg<hhhjx<hMCubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNjj)}j]j)}jirq_get_default_domainsbc.irq_get_default_domainasbuh1hhjg<hhhjx<hMCubjs)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjg<hhhjx<hMCubj)}(hjh]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg<hhhjx<hMCubj)}(hirq_get_default_domainh]j)}(hj<h]hirq_get_default_domain}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjg<hhhjx<hMCubj)}(h(void)h]j)}(hvoidh]jm)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj<ubah}(h]h ]h"]h$]h&]noemphjjuh1jhj<ubah}(h]h ]h"]h$]h&]jjuh1jhjg<hhhjx<hMCubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjc<hhhjx<hMCubah}(h]j^<ah ](jjeh"]h$]h&]jj)jhuh1jThjx<hMChj`<hhubj)}(hhh]h)}(h!Retrieve the "default" irq domainh]h%Retrieve the “default” irq domain}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMChj =hhubah}(h]h ]h"]h$]h&]uh1jhj`<hhhjx<hMCubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'=jj'=jjjuh1jOhhhjhNhNubj)}(h**Parameters** ``void`` no arguments **Return** the default domain, if any. **Description** Modern code should never use this. This should only be used on systems that cannot implement a firmware->fwnode mapping (which both DT and ACPI provide).h](h)}(h**Parameters**h]j)}(hj1=h]h Parameters}(hj3=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/=ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMGhj+=ubj))}(hhh]j.)}(h``void`` no arguments h](j4)}(h``void``h]jw)}(hjP=h]hvoid}(hjR=hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjN=ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKhjJ=ubjN)}(hhh]h)}(h no argumentsh]h no arguments}(hji=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje=hKhjf=ubah}(h]h ]h"]h$]h&]uh1jMhjJ=ubeh}(h]h ]h"]h$]h&]uh1j-hje=hKhjG=ubah}(h]h ]h"]h$]h&]uh1j(hj+=ubh)}(h **Return**h]j)}(hj=h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chKhj+=ubh)}(hthe default domain, if any.h]hthe default domain, if any.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMEhj+=ubh)}(h**Description**h]j)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMGhj+=ubh)}(hModern code should never use this. This should only be used on systems that cannot implement a firmware->fwnode mapping (which both DT and ACPI provide).h]hModern code should never use this. This should only be used on systems that cannot implement a firmware->fwnode mapping (which both DT and ACPI provide).}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMFhj+=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK&irq_create_direct_mapping (C function)c.irq_create_direct_mappinghNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hBunsigned int irq_create_direct_mapping (struct irq_domain *domain)h]j[)}(hAunsigned int irq_create_direct_mapping(struct irq_domain *domain)h](jm)}(hunsignedh]hunsigned}(hj=hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj=hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj=hhhj>hMubjm)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj=hhhj>hMubjs)}(h h]h }(hj">hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj=hhhj>hMubj)}(hirq_create_direct_mappingh]j)}(hirq_create_direct_mappingh]hirq_create_direct_mapping}(hj4>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhj>hMubj)}(h(struct irq_domain *domain)h]j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hjP>hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjL>ubjs)}(h h]h }(hj]>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjL>ubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjn>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjp>modnameN classnameNjj)}j]j)}jj6>sbc.irq_create_direct_mappingasbuh1hhjL>ubjs)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjL>ubj)}(hjh]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL>ubj)}(hdomainh]hdomain}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL>ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjH>ubah}(h]h ]h"]h$]h&]jjuh1jhj=hhhj>hMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj=hhhj>hMubah}(h]j=ah ](jjeh"]h$]h&]jj)jhuh1jThj>hMhj=hhubj)}(hhh]h)}(h"Allocate an irq for direct mappingh]h"Allocate an irq for direct mapping}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj>hhubah}(h]h ]h"]h$]h&]uh1jhj=hhhj>hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *domain`` domain to allocate the irq for or NULL for default domain **Description** This routine is used for irq controllers which can choose the hardware interrupt numbers they generate. In such a case it's simplest to use the linux irq as the hardware interrupt number. It still uses the linear or radix tree to store the mapping, but the irq controller can optimize the revmap path by using the hwirq directly.h](h)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj>ubj))}(hhh]j.)}(hX``struct irq_domain *domain`` domain to allocate the irq for or NULL for default domain h](j4)}(h``struct irq_domain *domain``h]jw)}(hj?h]hstruct irq_domain *domain}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj?ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj?ubjN)}(hhh]h)}(h9domain to allocate the irq for or NULL for default domainh]h9domain to allocate the irq for or NULL for default domain}(hj-?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)?hMhj*?ubah}(h]h ]h"]h$]h&]uh1jMhj?ubeh}(h]h ]h"]h$]h&]uh1j-hj)?hMhj ?ubah}(h]h ]h"]h$]h&]uh1j(hj>ubh)}(h**Description**h]j)}(hjO?h]h Description}(hjQ?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM?ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj>ubh)}(hXIThis routine is used for irq controllers which can choose the hardware interrupt numbers they generate. In such a case it's simplest to use the linux irq as the hardware interrupt number. It still uses the linear or radix tree to store the mapping, but the irq controller can optimize the revmap path by using the hwirq directly.h]hXKThis routine is used for irq controllers which can choose the hardware interrupt numbers they generate. In such a case it’s simplest to use the linux irq as the hardware interrupt number. It still uses the linear or radix tree to store the mapping, but the irq controller can optimize the revmap path by using the hwirq directly.}(hje?hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK(irq_create_mapping_affinity (C function)c.irq_create_mapping_affinityhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hunsigned int irq_create_mapping_affinity (struct irq_domain *domain, irq_hw_number_t hwirq, const struct irq_affinity_desc *affinity)h]j[)}(hunsigned int irq_create_mapping_affinity(struct irq_domain *domain, irq_hw_number_t hwirq, const struct irq_affinity_desc *affinity)h](jm)}(hunsignedh]hunsigned}(hj?hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj?hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM*ubjs)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj?hhhj?hM*ubjm)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj?hhhj?hM*ubjs)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj?hhhj?hM*ubj)}(hirq_create_mapping_affinityh]j)}(hirq_create_mapping_affinityh]hirq_create_mapping_affinity}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?hhhj?hM*ubj)}(h\(struct irq_domain *domain, irq_hw_number_t hwirq, const struct irq_affinity_desc *affinity)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hj?hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj?ubjs)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj?ubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj @hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj @modnameN classnameNjj)}j]j)}jj?sbc.irq_create_mapping_affinityasbuh1hhj?ubjs)}(h h]h }(hj+@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj?ubj)}(hjh]h*}(hj9@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(hdomainh]hdomain}(hjF@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(hirq_hw_number_t hwirqh](h)}(hhh]j)}(hirq_hw_number_th]hirq_hw_number_t}(hjb@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjd@modnameN classnameNjj)}j]j'@c.irq_create_mapping_affinityasbuh1hhj[@ubjs)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj[@ubj)}(hhwirqh]hhwirq}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubj)}(h(const struct irq_affinity_desc *affinityh](ja)}(hjh]hconst}(hj@hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj@ubjs)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj@ubja)}(hjdh]hstruct}(hj@hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj@ubjs)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj@ubh)}(hhh]j)}(hirq_affinity_desch]hirq_affinity_desc}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj)}j]j'@c.irq_create_mapping_affinityasbuh1hhj@ubjs)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj@ubj)}(hjh]h*}(hj AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(haffinityh]haffinity}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj?ubeh}(h]h ]h"]h$]h&]jjuh1jhj?hhhj?hM*ubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj?hhhj?hM*ubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1jThj?hM*hj?hhubj)}(hhh]h)}(h-Map a hardware interrupt into linux irq spaceh]h-Map a hardware interrupt into linux irq space}(hjCAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM*hj@Ahhubah}(h]h ]h"]h$]h&]uh1jhj?hhhj?hM*ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj[Ajj[Ajjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *domain`` domain owning this hardware interrupt or NULL for default domain ``irq_hw_number_t hwirq`` hardware irq number in that domain space ``const struct irq_affinity_desc *affinity`` irq affinity **Description** Only one mapping per hardware interrupt is permitted. Returns a linux irq number. If the sense/trigger is to be specified, set_irq_type() should be called on the number returned from that call.h](h)}(h**Parameters**h]j)}(hjeAh]h Parameters}(hjgAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcAubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM.hj_Aubj))}(hhh](j.)}(h_``struct irq_domain *domain`` domain owning this hardware interrupt or NULL for default domain h](j4)}(h``struct irq_domain *domain``h]jw)}(hjAh]hstruct irq_domain *domain}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjAubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM+hj~AubjN)}(hhh]h)}(h@domain owning this hardware interrupt or NULL for default domainh]h@domain owning this hardware interrupt or NULL for default domain}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM+hjAubah}(h]h ]h"]h$]h&]uh1jMhj~Aubeh}(h]h ]h"]h$]h&]uh1j-hjAhM+hj{Aubj.)}(hC``irq_hw_number_t hwirq`` hardware irq number in that domain space h](j4)}(h``irq_hw_number_t hwirq``h]jw)}(hjAh]hirq_hw_number_t hwirq}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjAubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM,hjAubjN)}(hhh]h)}(h(hardware irq number in that domain spaceh]h(hardware irq number in that domain space}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM,hjAubah}(h]h ]h"]h$]h&]uh1jMhjAubeh}(h]h ]h"]h$]h&]uh1j-hjAhM,hj{Aubj.)}(h:``const struct irq_affinity_desc *affinity`` irq affinity h](j4)}(h,``const struct irq_affinity_desc *affinity``h]jw)}(hjAh]h(const struct irq_affinity_desc *affinity}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjAubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM-hjAubjN)}(hhh]h)}(h irq affinityh]h irq affinity}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj BhM-hj Bubah}(h]h ]h"]h$]h&]uh1jMhjAubeh}(h]h ]h"]h$]h&]uh1j-hj BhM-hj{Aubeh}(h]h ]h"]h$]h&]uh1j(hj_Aubh)}(h**Description**h]j)}(hj1Bh]h Description}(hj3BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Bubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM/hj_Aubh)}(hOnly one mapping per hardware interrupt is permitted. Returns a linux irq number. If the sense/trigger is to be specified, set_irq_type() should be called on the number returned from that call.h]hOnly one mapping per hardware interrupt is permitted. Returns a linux irq number. If the sense/trigger is to be specified, set_irq_type() should be called on the number returned from that call.}(hjGBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM.hj_Aubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK irq_dispose_mapping (C function)c.irq_dispose_mappinghNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(h,void irq_dispose_mapping (unsigned int virq)h]j[)}(h+void irq_dispose_mapping(unsigned int virq)h](jm)}(hvoidh]hvoid}(hjvBhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjrBhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjrBhhhjBhMubj)}(hirq_dispose_mappingh]j)}(hirq_dispose_mappingh]hirq_dispose_mapping}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]jjuh1jhjrBhhhjBhMubj)}(h(unsigned int virq)h]j)}(hunsigned int virqh](jm)}(hunsignedh]hunsigned}(hjBhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjBubjs)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjBubjm)}(hinth]hint}(hjBhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjBubjs)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjBubj)}(hvirqh]hvirq}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjBubah}(h]h ]h"]h$]h&]jjuh1jhjrBhhhjBhMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjnBhhhjBhMubah}(h]jiBah ](jjeh"]h$]h&]jj)jhuh1jThjBhMhjkBhhubj)}(hhh]h)}(hUnmap an interrupth]hUnmap an interrupt}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjChhubah}(h]h ]h"]h$]h&]uh1jhjkBhhhjBhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj-Cjj-Cjjjuh1jOhhhjhNhNubj)}(hR**Parameters** ``unsigned int virq`` linux irq number of the interrupt to unmaph](h)}(h**Parameters**h]j)}(hj7Ch]h Parameters}(hj9ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Cubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj1Cubj))}(hhh]j.)}(h@``unsigned int virq`` linux irq number of the interrupt to unmaph](j4)}(h``unsigned int virq``h]jw)}(hjVCh]hunsigned int virq}(hjXChhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjTCubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjPCubjN)}(hhh]h)}(h*linux irq number of the interrupt to unmaph]h*linux irq number of the interrupt to unmap}(hjoChhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjlCubah}(h]h ]h"]h$]h&]uh1jMhjPCubeh}(h]h ]h"]h$]h&]uh1j-hjkChMhjMCubah}(h]h ]h"]h$]h&]uh1j(hj1Cubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK"__irq_resolve_mapping (C function)c.__irq_resolve_mappinghNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hmstruct irq_desc * __irq_resolve_mapping (struct irq_domain *domain, irq_hw_number_t hwirq, unsigned int *irq)h]j[)}(hkstruct irq_desc *__irq_resolve_mapping(struct irq_domain *domain, irq_hw_number_t hwirq, unsigned int *irq)h](ja)}(hjdh]hstruct}(hjChhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjChhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjChhhjChMubh)}(hhh]j)}(hirq_desch]hirq_desc}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNjj)}j]j)}j__irq_resolve_mappingsbc.__irq_resolve_mappingasbuh1hhjChhhjChMubjs)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjChhhjChMubj)}(hjh]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjChMubj)}(h__irq_resolve_mappingh]j)}(hjCh]h__irq_resolve_mapping}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Dubah}(h]h ](jjeh"]h$]h&]jjuh1jhjChhhjChMubj)}(hE(struct irq_domain *domain, irq_hw_number_t hwirq, unsigned int *irq)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hj*DhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj&Dubjs)}(h h]h }(hj7DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj&Dubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjHDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJDmodnameN classnameNjj)}j]jCc.__irq_resolve_mappingasbuh1hhj&Dubjs)}(h h]h }(hjfDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj&Dubj)}(hjh]h*}(hjtDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&Dubj)}(hdomainh]hdomain}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&Dubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"Dubj)}(hirq_hw_number_t hwirqh](h)}(hhh]j)}(hirq_hw_number_th]hirq_hw_number_t}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNjj)}j]jCc.__irq_resolve_mappingasbuh1hhjDubjs)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjDubj)}(hhwirqh]hhwirq}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"Dubj)}(hunsigned int *irqh](jm)}(hunsignedh]hunsigned}(hjDhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjDubjs)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjDubjm)}(hinth]hint}(hjDhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjDubjs)}(h h]h }(hj EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjDubj)}(hjh]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hirqh]hirq}(hj'EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj"Dubeh}(h]h ]h"]h$]h&]jjuh1jhjChhhjChMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjChhhjChMubah}(h]jCah ](jjeh"]h$]h&]jj)jhuh1jThjChMhjChhubj)}(hhh]h)}(h&Find a linux irq from a hw irq number.h]h&Find a linux irq from a hw irq number.}(hjQEhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjNEhhubah}(h]h ]h"]h$]h&]uh1jhjChhhjChMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjiEjjiEjjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *domain`` domain owning this hardware interrupt ``irq_hw_number_t hwirq`` hardware irq number in that domain space ``unsigned int *irq`` optional pointer to return the Linux irq if required **Description** Returns the interrupt descriptor.h](h)}(h**Parameters**h]j)}(hjsEh]h Parameters}(hjuEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqEubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjmEubj))}(hhh](j.)}(hD``struct irq_domain *domain`` domain owning this hardware interrupt h](j4)}(h``struct irq_domain *domain``h]jw)}(hjEh]hstruct irq_domain *domain}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjEubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjEubjN)}(hhh]h)}(h%domain owning this hardware interrupth]h%domain owning this hardware interrupt}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjEubah}(h]h ]h"]h$]h&]uh1jMhjEubeh}(h]h ]h"]h$]h&]uh1j-hjEhMhjEubj.)}(hC``irq_hw_number_t hwirq`` hardware irq number in that domain space h](j4)}(h``irq_hw_number_t hwirq``h]jw)}(hjEh]hirq_hw_number_t hwirq}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjEubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjEubjN)}(hhh]h)}(h(hardware irq number in that domain spaceh]h(hardware irq number in that domain space}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhMhjEubah}(h]h ]h"]h$]h&]uh1jMhjEubeh}(h]h ]h"]h$]h&]uh1j-hjEhMhjEubj.)}(hK``unsigned int *irq`` optional pointer to return the Linux irq if required h](j4)}(h``unsigned int *irq``h]jw)}(hjFh]hunsigned int *irq}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjFubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjEubjN)}(hhh]h)}(h4optional pointer to return the Linux irq if requiredh]h4optional pointer to return the Linux irq if required}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jMhjEubeh}(h]h ]h"]h$]h&]uh1j-hjFhMhjEubeh}(h]h ]h"]h$]h&]uh1j(hjmEubh)}(h**Description**h]j)}(hj?Fh]h Description}(hjAFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=Fubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjmEubh)}(h!Returns the interrupt descriptor.h]h!Returns the interrupt descriptor.}(hjUFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjmEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK%irq_domain_xlate_onecell (C function)c.irq_domain_xlate_onecellhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hint irq_domain_xlate_onecell (struct irq_domain *d, struct device_node *ctrlr, const u32 *intspec, unsigned int intsize, unsigned long *out_hwirq, unsigned int *out_type)h]j[)}(hint irq_domain_xlate_onecell(struct irq_domain *d, struct device_node *ctrlr, const u32 *intspec, unsigned int intsize, unsigned long *out_hwirq, unsigned int *out_type)h](jm)}(hinth]hint}(hjFhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjFhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMHubjs)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjFhhhjFhMHubj)}(hirq_domain_xlate_onecellh]j)}(hirq_domain_xlate_onecellh]hirq_domain_xlate_onecell}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]jjuh1jhjFhhhjFhMHubj)}(h(struct irq_domain *d, struct device_node *ctrlr, const u32 *intspec, unsigned int intsize, unsigned long *out_hwirq, unsigned int *out_type)h](j)}(hstruct irq_domain *dh](ja)}(hjdh]hstruct}(hjFhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjFubjs)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjFubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjFmodnameN classnameNjj)}j]j)}jjFsbc.irq_domain_xlate_onecellasbuh1hhjFubjs)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjFubj)}(hjh]h*}(hj GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(hdh]hd}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(hstruct device_node *ctrlrh](ja)}(hjdh]hstruct}(hj3GhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj/Gubjs)}(h h]h }(hj@GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj/Gubh)}(hhh]j)}(h device_nodeh]h device_node}(hjQGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSGmodnameN classnameNjj)}j]jFc.irq_domain_xlate_onecellasbuh1hhj/Gubjs)}(h h]h }(hjoGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj/Gubj)}(hjh]h*}(hj}GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/Gubj)}(hctrlrh]hctrlr}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/Gubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(hconst u32 *intspech](ja)}(hjh]hconst}(hjGhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjGubjs)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjGubh)}(hhh]j)}(hu32h]hu32}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNjj)}j]jFc.irq_domain_xlate_onecellasbuh1hhjGubjs)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjGubj)}(hjh]h*}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(hintspech]hintspec}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(hunsigned int intsizeh](jm)}(hunsignedh]hunsigned}(hjHhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjHubjs)}(h h]h }(hj!HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjHubjm)}(hinth]hint}(hj/HhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjHubjs)}(h h]h }(hj=HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjHubj)}(hintsizeh]hintsize}(hjKHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(hunsigned long *out_hwirqh](jm)}(hunsignedh]hunsigned}(hjdHhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj`Hubjs)}(h h]h }(hjrHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj`Hubjm)}(hlongh]hlong}(hjHhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj`Hubjs)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj`Hubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Hubj)}(h out_hwirqh]h out_hwirq}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Hubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubj)}(hunsigned int *out_typeh](jm)}(hunsignedh]hunsigned}(hjHhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjHubjs)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjHubjm)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjHubjs)}(h h]h }(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjHubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hout_typeh]hout_type}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjFubeh}(h]h ]h"]h$]h&]jjuh1jhjFhhhjFhMHubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj|FhhhjFhMHubah}(h]jwFah ](jjeh"]h$]h&]jj)jhuh1jThjFhMHhjyFhhubj)}(hhh]h)}(h*Generic xlate for direct one cell bindingsh]h*Generic xlate for direct one cell bindings}(hj1IhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMHhj.Ihhubah}(h]h ]h"]h$]h&]uh1jhjyFhhhjFhMHubeh}(h]h ](jfunctioneh"]h$]h&]jjjjIIjjIIjjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *d`` Interrupt domain involved in the translation ``struct device_node *ctrlr`` The device tree node for the device whose interrupt is translated ``const u32 *intspec`` The interrupt specifier data from the device tree ``unsigned int intsize`` The number of entries in **intspec** ``unsigned long *out_hwirq`` Pointer to storage for the hardware interrupt number ``unsigned int *out_type`` Pointer to storage for the interrupt type **Description** Device Tree IRQ specifier translation function which works with one cell bindings where the cell value maps directly to the hwirq number.h](h)}(h**Parameters**h]j)}(hjSIh]h Parameters}(hjUIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQIubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMLhjMIubj))}(hhh](j.)}(hF``struct irq_domain *d`` Interrupt domain involved in the translation h](j4)}(h``struct irq_domain *d``h]jw)}(hjrIh]hstruct irq_domain *d}(hjtIhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjpIubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMIhjlIubjN)}(hhh]h)}(h,Interrupt domain involved in the translationh]h,Interrupt domain involved in the translation}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMIhjIubah}(h]h ]h"]h$]h&]uh1jMhjlIubeh}(h]h ]h"]h$]h&]uh1j-hjIhMIhjiIubj.)}(h```struct device_node *ctrlr`` The device tree node for the device whose interrupt is translated h](j4)}(h``struct device_node *ctrlr``h]jw)}(hjIh]hstruct device_node *ctrlr}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjIubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMJhjIubjN)}(hhh]h)}(hAThe device tree node for the device whose interrupt is translatedh]hAThe device tree node for the device whose interrupt is translated}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMJhjIubah}(h]h ]h"]h$]h&]uh1jMhjIubeh}(h]h ]h"]h$]h&]uh1j-hjIhMJhjiIubj.)}(hI``const u32 *intspec`` The interrupt specifier data from the device tree h](j4)}(h``const u32 *intspec``h]jw)}(hjIh]hconst u32 *intspec}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjIubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMKhjIubjN)}(hhh]h)}(h1The interrupt specifier data from the device treeh]h1The interrupt specifier data from the device tree}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhMKhjIubah}(h]h ]h"]h$]h&]uh1jMhjIubeh}(h]h ]h"]h$]h&]uh1j-hjIhMKhjiIubj.)}(h>``unsigned int intsize`` The number of entries in **intspec** h](j4)}(h``unsigned int intsize``h]jw)}(hjJh]hunsigned int intsize}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjJubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMLhjJubjN)}(hhh]h)}(h$The number of entries in **intspec**h](hThe number of entries in }(hj6JhhhNhNubj)}(h **intspec**h]hintspec}(hj>JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6Jubeh}(h]h ]h"]h$]h&]uh1hhj2JhMLhj3Jubah}(h]h ]h"]h$]h&]uh1jMhjJubeh}(h]h ]h"]h$]h&]uh1j-hj2JhMLhjiIubj.)}(hR``unsigned long *out_hwirq`` Pointer to storage for the hardware interrupt number h](j4)}(h``unsigned long *out_hwirq``h]jw)}(hjdJh]hunsigned long *out_hwirq}(hjfJhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjbJubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMMhj^JubjN)}(hhh]h)}(h4Pointer to storage for the hardware interrupt numberh]h4Pointer to storage for the hardware interrupt number}(hj}JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyJhMMhjzJubah}(h]h ]h"]h$]h&]uh1jMhj^Jubeh}(h]h ]h"]h$]h&]uh1j-hjyJhMMhjiIubj.)}(hE``unsigned int *out_type`` Pointer to storage for the interrupt type h](j4)}(h``unsigned int *out_type``h]jw)}(hjJh]hunsigned int *out_type}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjJubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMNhjJubjN)}(hhh]h)}(h)Pointer to storage for the interrupt typeh]h)Pointer to storage for the interrupt type}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMNhjJubah}(h]h ]h"]h$]h&]uh1jMhjJubeh}(h]h ]h"]h$]h&]uh1j-hjJhMNhjiIubeh}(h]h ]h"]h$]h&]uh1j(hjMIubh)}(h**Description**h]j)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMPhjMIubh)}(hDevice Tree IRQ specifier translation function which works with one cell bindings where the cell value maps directly to the hwirq number.h]hDevice Tree IRQ specifier translation function which works with one cell bindings where the cell value maps directly to the hwirq number.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMOhjMIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK%irq_domain_xlate_twocell (C function)c.irq_domain_xlate_twocellhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hint irq_domain_xlate_twocell (struct irq_domain *d, struct device_node *ctrlr, const u32 *intspec, unsigned int intsize, irq_hw_number_t *out_hwirq, unsigned int *out_type)h]j[)}(hint irq_domain_xlate_twocell(struct irq_domain *d, struct device_node *ctrlr, const u32 *intspec, unsigned int intsize, irq_hw_number_t *out_hwirq, unsigned int *out_type)h](jm)}(hinth]hint}(hjKhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjKhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM`ubjs)}(h h]h }(hj,KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjKhhhj+KhM`ubj)}(hirq_domain_xlate_twocellh]j)}(hirq_domain_xlate_twocellh]hirq_domain_xlate_twocell}(hj>KhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Kubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhj+KhM`ubj)}(h(struct irq_domain *d, struct device_node *ctrlr, const u32 *intspec, unsigned int intsize, irq_hw_number_t *out_hwirq, unsigned int *out_type)h](j)}(hstruct irq_domain *dh](ja)}(hjdh]hstruct}(hjZKhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjVKubjs)}(h h]h }(hjgKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjVKubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjxKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzKmodnameN classnameNjj)}j]j)}jj@Ksbc.irq_domain_xlate_twocellasbuh1hhjVKubjs)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjVKubj)}(hjh]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVKubj)}(hjGh]hd}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRKubj)}(hstruct device_node *ctrlrh](ja)}(hjdh]hstruct}(hjKhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjKubjs)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjKubh)}(hhh]j)}(h device_nodeh]h device_node}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjKmodnameN classnameNjj)}j]jKc.irq_domain_xlate_twocellasbuh1hhjKubjs)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjKubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(hctrlrh]hctrlr}(hj"LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRKubj)}(hconst u32 *intspech](ja)}(hjh]hconst}(hj;LhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj7Lubjs)}(h h]h }(hjHLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj7Lubh)}(hhh]j)}(hu32h]hu32}(hjYLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[LmodnameN classnameNjj)}j]jKc.irq_domain_xlate_twocellasbuh1hhj7Lubjs)}(h h]h }(hjwLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj7Lubj)}(hjh]h*}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Lubj)}(hintspech]hintspec}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Lubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRKubj)}(hunsigned int intsizeh](jm)}(hunsignedh]hunsigned}(hjLhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjLubjs)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjLubjm)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjLubjs)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjLubj)}(hintsizeh]hintsize}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRKubj)}(hirq_hw_number_t *out_hwirqh](h)}(hhh]j)}(hirq_hw_number_th]hirq_hw_number_t}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNjj)}j]jKc.irq_domain_xlate_twocellasbuh1hhjLubjs)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjLubj)}(hjh]h*}(hj+MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h out_hwirqh]h out_hwirq}(hj8MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRKubj)}(hunsigned int *out_typeh](jm)}(hunsignedh]hunsigned}(hjQMhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjMMubjs)}(h h]h }(hj_MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjMMubjm)}(hinth]hint}(hjmMhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjMMubjs)}(h h]h }(hj{MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjMMubj)}(hjh]h*}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMMubj)}(hout_typeh]hout_type}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMMubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjRKubeh}(h]h ]h"]h$]h&]jjuh1jhjKhhhj+KhM`ubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjKhhhj+KhM`ubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1jThj+KhM`hjKhhubj)}(hhh]h)}(h*Generic xlate for direct two cell bindingsh]h*Generic xlate for direct two cell bindings}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM`hjMhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhj+KhM`ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMjjMjjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *d`` Interrupt domain involved in the translation ``struct device_node *ctrlr`` The device tree node for the device whose interrupt is translated ``const u32 *intspec`` The interrupt specifier data from the device tree ``unsigned int intsize`` The number of entries in **intspec** ``irq_hw_number_t *out_hwirq`` Pointer to storage for the hardware interrupt number ``unsigned int *out_type`` Pointer to storage for the interrupt type **Description** Device Tree IRQ specifier translation function which works with two cell bindings where the cell values map directly to the hwirq number and linux irq flags.h](h)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMdhjMubj))}(hhh](j.)}(hF``struct irq_domain *d`` Interrupt domain involved in the translation h](j4)}(h``struct irq_domain *d``h]jw)}(hjNh]hstruct irq_domain *d}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjMubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMahjMubjN)}(hhh]h)}(h,Interrupt domain involved in the translationh]h,Interrupt domain involved in the translation}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMahjNubah}(h]h ]h"]h$]h&]uh1jMhjMubeh}(h]h ]h"]h$]h&]uh1j-hjNhMahjMubj.)}(h```struct device_node *ctrlr`` The device tree node for the device whose interrupt is translated h](j4)}(h``struct device_node *ctrlr``h]jw)}(hj:Nh]hstruct device_node *ctrlr}(hj``unsigned int intsize`` The number of entries in **intspec** h](j4)}(h``unsigned int intsize``h]jw)}(hjNh]hunsigned int intsize}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjNubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMdhjNubjN)}(hhh]h)}(h$The number of entries in **intspec**h](hThe number of entries in }(hjNhhhNhNubj)}(h **intspec**h]hintspec}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1hhjNhMdhjNubah}(h]h ]h"]h$]h&]uh1jMhjNubeh}(h]h ]h"]h$]h&]uh1j-hjNhMdhjMubj.)}(hT``irq_hw_number_t *out_hwirq`` Pointer to storage for the hardware interrupt number h](j4)}(h``irq_hw_number_t *out_hwirq``h]jw)}(hjNh]hirq_hw_number_t *out_hwirq}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjNubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMehjNubjN)}(hhh]h)}(h4Pointer to storage for the hardware interrupt numberh]h4Pointer to storage for the hardware interrupt number}(hj OhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMehj Oubah}(h]h ]h"]h$]h&]uh1jMhjNubeh}(h]h ]h"]h$]h&]uh1j-hjOhMehjMubj.)}(hE``unsigned int *out_type`` Pointer to storage for the interrupt type h](j4)}(h``unsigned int *out_type``h]jw)}(hj,Oh]hunsigned int *out_type}(hj.OhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj*Oubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMfhj&OubjN)}(hhh]h)}(h)Pointer to storage for the interrupt typeh]h)Pointer to storage for the interrupt type}(hjEOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAOhMfhjBOubah}(h]h ]h"]h$]h&]uh1jMhj&Oubeh}(h]h ]h"]h$]h&]uh1j-hjAOhMfhjMubeh}(h]h ]h"]h$]h&]uh1j(hjMubh)}(h**Description**h]j)}(hjgOh]h Description}(hjiOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeOubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhhjMubh)}(hDevice Tree IRQ specifier translation function which works with two cell bindings where the cell values map directly to the hwirq number and linux irq flags.h]hDevice Tree IRQ specifier translation function which works with two cell bindings where the cell values map directly to the hwirq number and linux irq flags.}(hj}OhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMghjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK*irq_domain_xlate_twothreecell (C function)c.irq_domain_xlate_twothreecellhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hint irq_domain_xlate_twothreecell (struct irq_domain *d, struct device_node *ctrlr, const u32 *intspec, unsigned int intsize, irq_hw_number_t *out_hwirq, unsigned int *out_type)h]j[)}(hint irq_domain_xlate_twothreecell(struct irq_domain *d, struct device_node *ctrlr, const u32 *intspec, unsigned int intsize, irq_hw_number_t *out_hwirq, unsigned int *out_type)h](jm)}(hinth]hint}(hjOhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjOhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMxubjs)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjOhhhjOhMxubj)}(hirq_domain_xlate_twothreecellh]j)}(hirq_domain_xlate_twothreecellh]hirq_domain_xlate_twothreecell}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOhhhjOhMxubj)}(h(struct irq_domain *d, struct device_node *ctrlr, const u32 *intspec, unsigned int intsize, irq_hw_number_t *out_hwirq, unsigned int *out_type)h](j)}(hstruct irq_domain *dh](ja)}(hjdh]hstruct}(hjOhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjOubjs)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjOubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj PmodnameN classnameNjj)}j]j)}jjOsbc.irq_domain_xlate_twothreecellasbuh1hhjOubjs)}(h h]h }(hj'PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjOubj)}(hjh]h*}(hj5PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hjGh]hd}(hjBPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hstruct device_node *ctrlrh](ja)}(hjdh]hstruct}(hjZPhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjVPubjs)}(h h]h }(hjgPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjVPubh)}(hhh]j)}(h device_nodeh]h device_node}(hjxPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjzPmodnameN classnameNjj)}j]j#Pc.irq_domain_xlate_twothreecellasbuh1hhjVPubjs)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjVPubj)}(hjh]h*}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVPubj)}(hctrlrh]hctrlr}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hconst u32 *intspech](ja)}(hjh]hconst}(hjPhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjPubjs)}(h h]h }(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjPubh)}(hhh]j)}(hu32h]hu32}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPmodnameN classnameNjj)}j]j#Pc.irq_domain_xlate_twothreecellasbuh1hhjPubjs)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjPubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubj)}(hintspech]hintspec}(hj!QhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hunsigned int intsizeh](jm)}(hunsignedh]hunsigned}(hj:QhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj6Qubjs)}(h h]h }(hjHQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj6Qubjm)}(hinth]hint}(hjVQhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj6Qubjs)}(h h]h }(hjdQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj6Qubj)}(hintsizeh]hintsize}(hjrQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Qubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hirq_hw_number_t *out_hwirqh](h)}(hhh]j)}(hirq_hw_number_th]hirq_hw_number_t}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNjj)}j]j#Pc.irq_domain_xlate_twothreecellasbuh1hhjQubjs)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjQubj)}(hjh]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(h out_hwirqh]h out_hwirq}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubj)}(hunsigned int *out_typeh](jm)}(hunsignedh]hunsigned}(hjQhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjQubjs)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjQubjm)}(hinth]hint}(hjQhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjQubjs)}(h h]h }(hj RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjQubj)}(hjh]h*}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hout_typeh]hout_type}(hj%RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjOubeh}(h]h ]h"]h$]h&]jjuh1jhjOhhhjOhMxubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjOhhhjOhMxubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1jThjOhMxhjOhhubj)}(hhh]h)}(h3Generic xlate for direct two or three cell bindingsh]h3Generic xlate for direct two or three cell bindings}(hjORhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMxhjLRhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjOhMxubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgRjjgRjjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *d`` Interrupt domain involved in the translation ``struct device_node *ctrlr`` The device tree node for the device whose interrupt is translated ``const u32 *intspec`` The interrupt specifier data from the device tree ``unsigned int intsize`` The number of entries in **intspec** ``irq_hw_number_t *out_hwirq`` Pointer to storage for the hardware interrupt number ``unsigned int *out_type`` Pointer to storage for the interrupt type **Description** Device Tree interrupt specifier translation function for two or three cell bindings, where the cell values map directly to the hardware interrupt number and the type specifier.h](h)}(h**Parameters**h]j)}(hjqRh]h Parameters}(hjsRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoRubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM|hjkRubj))}(hhh](j.)}(hF``struct irq_domain *d`` Interrupt domain involved in the translation h](j4)}(h``struct irq_domain *d``h]jw)}(hjRh]hstruct irq_domain *d}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjRubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMyhjRubjN)}(hhh]h)}(h,Interrupt domain involved in the translationh]h,Interrupt domain involved in the translation}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMyhjRubah}(h]h ]h"]h$]h&]uh1jMhjRubeh}(h]h ]h"]h$]h&]uh1j-hjRhMyhjRubj.)}(h```struct device_node *ctrlr`` The device tree node for the device whose interrupt is translated h](j4)}(h``struct device_node *ctrlr``h]jw)}(hjRh]hstruct device_node *ctrlr}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjRubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMzhjRubjN)}(hhh]h)}(hAThe device tree node for the device whose interrupt is translatedh]hAThe device tree node for the device whose interrupt is translated}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMzhjRubah}(h]h ]h"]h$]h&]uh1jMhjRubeh}(h]h ]h"]h$]h&]uh1j-hjRhMzhjRubj.)}(hI``const u32 *intspec`` The interrupt specifier data from the device tree h](j4)}(h``const u32 *intspec``h]jw)}(hjSh]hconst u32 *intspec}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjSubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM{hjRubjN)}(hhh]h)}(h1The interrupt specifier data from the device treeh]h1The interrupt specifier data from the device tree}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM{hjSubah}(h]h ]h"]h$]h&]uh1jMhjRubeh}(h]h ]h"]h$]h&]uh1j-hjShM{hjRubj.)}(h>``unsigned int intsize`` The number of entries in **intspec** h](j4)}(h``unsigned int intsize``h]jw)}(hj;Sh]hunsigned int intsize}(hj=ShhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj9Subah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM|hj5SubjN)}(hhh]h)}(h$The number of entries in **intspec**h](hThe number of entries in }(hjTShhhNhNubj)}(h **intspec**h]hintspec}(hj\ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTSubeh}(h]h ]h"]h$]h&]uh1hhjPShM|hjQSubah}(h]h ]h"]h$]h&]uh1jMhj5Subeh}(h]h ]h"]h$]h&]uh1j-hjPShM|hjRubj.)}(hT``irq_hw_number_t *out_hwirq`` Pointer to storage for the hardware interrupt number h](j4)}(h``irq_hw_number_t *out_hwirq``h]jw)}(hjSh]hirq_hw_number_t *out_hwirq}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjSubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM}hj|SubjN)}(hhh]h)}(h4Pointer to storage for the hardware interrupt numberh]h4Pointer to storage for the hardware interrupt number}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM}hjSubah}(h]h ]h"]h$]h&]uh1jMhj|Subeh}(h]h ]h"]h$]h&]uh1j-hjShM}hjRubj.)}(hE``unsigned int *out_type`` Pointer to storage for the interrupt type h](j4)}(h``unsigned int *out_type``h]jw)}(hjSh]hunsigned int *out_type}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjSubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM~hjSubjN)}(hhh]h)}(h)Pointer to storage for the interrupt typeh]h)Pointer to storage for the interrupt type}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM~hjSubah}(h]h ]h"]h$]h&]uh1jMhjSubeh}(h]h ]h"]h$]h&]uh1j-hjShM~hjRubeh}(h]h ]h"]h$]h&]uh1j(hjkRubh)}(h**Description**h]j)}(hjSh]h Description}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjkRubh)}(hDevice Tree interrupt specifier translation function for two or three cell bindings, where the cell values map directly to the hardware interrupt number and the type specifier.h]hDevice Tree interrupt specifier translation function for two or three cell bindings, where the cell values map directly to the hardware interrupt number and the type specifier.}(hj ThhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjkRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK(irq_domain_xlate_onetwocell (C function)c.irq_domain_xlate_onetwocellhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hint irq_domain_xlate_onetwocell (struct irq_domain *d, struct device_node *ctrlr, const u32 *intspec, unsigned int intsize, unsigned long *out_hwirq, unsigned int *out_type)h]j[)}(hint irq_domain_xlate_onetwocell(struct irq_domain *d, struct device_node *ctrlr, const u32 *intspec, unsigned int intsize, unsigned long *out_hwirq, unsigned int *out_type)h](jm)}(hinth]hint}(hj;ThhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj7Thhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hjJThhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj7ThhhjIThMubj)}(hirq_domain_xlate_onetwocellh]j)}(hirq_domain_xlate_onetwocellh]hirq_domain_xlate_onetwocell}(hj\ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXTubah}(h]h ](jjeh"]h$]h&]jjuh1jhj7ThhhjIThMubj)}(h(struct irq_domain *d, struct device_node *ctrlr, const u32 *intspec, unsigned int intsize, unsigned long *out_hwirq, unsigned int *out_type)h](j)}(hstruct irq_domain *dh](ja)}(hjdh]hstruct}(hjxThhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjtTubjs)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjtTubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNjj)}j]j)}jj^Tsbc.irq_domain_xlate_onetwocellasbuh1hhjtTubjs)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjtTubj)}(hjh]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtTubj)}(hjGh]hd}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpTubj)}(hstruct device_node *ctrlrh](ja)}(hjdh]hstruct}(hjThhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjTubjs)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjTubh)}(hhh]j)}(h device_nodeh]h device_node}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj UmodnameN classnameNjj)}j]jTc.irq_domain_xlate_onetwocellasbuh1hhjTubjs)}(h h]h }(hj%UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjTubj)}(hjh]h*}(hj3UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hctrlrh]hctrlr}(hj@UhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpTubj)}(hconst u32 *intspech](ja)}(hjh]hconst}(hjYUhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjUUubjs)}(h h]h }(hjfUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjUUubh)}(hhh]j)}(hu32h]hu32}(hjwUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtUubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjyUmodnameN classnameNjj)}j]jTc.irq_domain_xlate_onetwocellasbuh1hhjUUubjs)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjUUubj)}(hjh]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUUubj)}(hintspech]hintspec}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpTubj)}(hunsigned int intsizeh](jm)}(hunsignedh]hunsigned}(hjUhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjUubjs)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjUubjm)}(hinth]hint}(hjUhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjUubjs)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjUubj)}(hintsizeh]hintsize}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpTubj)}(hunsigned long *out_hwirqh](jm)}(hunsignedh]hunsigned}(hjVhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjVubjs)}(h h]h }(hj(VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjVubjm)}(hlongh]hlong}(hj6VhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjVubjs)}(h h]h }(hjDVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjVubj)}(hjh]h*}(hjRVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubj)}(h out_hwirqh]h out_hwirq}(hj_VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpTubj)}(hunsigned int *out_typeh](jm)}(hunsignedh]hunsigned}(hjxVhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjtVubjs)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjtVubjm)}(hinth]hint}(hjVhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjtVubjs)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjtVubj)}(hjh]h*}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtVubj)}(hout_typeh]hout_type}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtVubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjpTubeh}(h]h ]h"]h$]h&]jjuh1jhj7ThhhjIThMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj3ThhhjIThMubah}(h]j.Tah ](jjeh"]h$]h&]jj)jhuh1jThjIThMhj0Thhubj)}(hhh]h)}(h*Generic xlate for one or two cell bindingsh]h*Generic xlate for one or two cell bindings}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjVhhubah}(h]h ]h"]h$]h&]uh1jhj0ThhhjIThMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1jOhhhjhNhNubj)}(hXw**Parameters** ``struct irq_domain *d`` Interrupt domain involved in the translation ``struct device_node *ctrlr`` The device tree node for the device whose interrupt is translated ``const u32 *intspec`` The interrupt specifier data from the device tree ``unsigned int intsize`` The number of entries in **intspec** ``unsigned long *out_hwirq`` Pointer to storage for the hardware interrupt number ``unsigned int *out_type`` Pointer to storage for the interrupt type **Description** Device Tree IRQ specifier translation function which works with either one or two cell bindings where the cell values map directly to the hwirq number and linux irq flags. **Note** don't use this function unless your interrupt controller explicitly supports both one and two cell bindings. For the majority of controllers the _onecell() or _twocell() variants above should be used.h](h)}(h**Parameters**h]j)}(hj Wh]h Parameters}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjWubj))}(hhh](j.)}(hF``struct irq_domain *d`` Interrupt domain involved in the translation h](j4)}(h``struct irq_domain *d``h]jw)}(hj(Wh]hstruct irq_domain *d}(hj*WhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj&Wubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj"WubjN)}(hhh]h)}(h,Interrupt domain involved in the translationh]h,Interrupt domain involved in the translation}(hjAWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=WhMhj>Wubah}(h]h ]h"]h$]h&]uh1jMhj"Wubeh}(h]h ]h"]h$]h&]uh1j-hj=WhMhjWubj.)}(h```struct device_node *ctrlr`` The device tree node for the device whose interrupt is translated h](j4)}(h``struct device_node *ctrlr``h]jw)}(hjaWh]hstruct device_node *ctrlr}(hjcWhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj_Wubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj[WubjN)}(hhh]h)}(hAThe device tree node for the device whose interrupt is translatedh]hAThe device tree node for the device whose interrupt is translated}(hjzWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvWhMhjwWubah}(h]h ]h"]h$]h&]uh1jMhj[Wubeh}(h]h ]h"]h$]h&]uh1j-hjvWhMhjWubj.)}(hI``const u32 *intspec`` The interrupt specifier data from the device tree h](j4)}(h``const u32 *intspec``h]jw)}(hjWh]hconst u32 *intspec}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjWubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjWubjN)}(hhh]h)}(h1The interrupt specifier data from the device treeh]h1The interrupt specifier data from the device tree}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMhjWubah}(h]h ]h"]h$]h&]uh1jMhjWubeh}(h]h ]h"]h$]h&]uh1j-hjWhMhjWubj.)}(h>``unsigned int intsize`` The number of entries in **intspec** h](j4)}(h``unsigned int intsize``h]jw)}(hjWh]hunsigned int intsize}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjWubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjWubjN)}(hhh]h)}(h$The number of entries in **intspec**h](hThe number of entries in }(hjWhhhNhNubj)}(h **intspec**h]hintspec}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1hhjWhMhjWubah}(h]h ]h"]h$]h&]uh1jMhjWubeh}(h]h ]h"]h$]h&]uh1j-hjWhMhjWubj.)}(hR``unsigned long *out_hwirq`` Pointer to storage for the hardware interrupt number h](j4)}(h``unsigned long *out_hwirq``h]jw)}(hjXh]hunsigned long *out_hwirq}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjXubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjXubjN)}(hhh]h)}(h4Pointer to storage for the hardware interrupt numberh]h4Pointer to storage for the hardware interrupt number}(hj3XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/XhMhj0Xubah}(h]h ]h"]h$]h&]uh1jMhjXubeh}(h]h ]h"]h$]h&]uh1j-hj/XhMhjWubj.)}(hE``unsigned int *out_type`` Pointer to storage for the interrupt type h](j4)}(h``unsigned int *out_type``h]jw)}(hjSXh]hunsigned int *out_type}(hjUXhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjQXubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjMXubjN)}(hhh]h)}(h)Pointer to storage for the interrupt typeh]h)Pointer to storage for the interrupt type}(hjlXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhXhMhjiXubah}(h]h ]h"]h$]h&]uh1jMhjMXubeh}(h]h ]h"]h$]h&]uh1j-hjhXhMhjWubeh}(h]h ]h"]h$]h&]uh1j(hjWubh)}(h**Description**h]j)}(hjXh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjWubh)}(hDevice Tree IRQ specifier translation function which works with either one or two cell bindings where the cell values map directly to the hwirq number and linux irq flags.h]hDevice Tree IRQ specifier translation function which works with either one or two cell bindings where the cell values map directly to the hwirq number and linux irq flags.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjWubh)}(h**Note**h]j)}(hjXh]hNote}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjWubh)}(hdon't use this function unless your interrupt controller explicitly supports both one and two cell bindings. For the majority of controllers the _onecell() or _twocell() variants above should be used.h]hdon’t use this function unless your interrupt controller explicitly supports both one and two cell bindings. For the majority of controllers the _onecell() or _twocell() variants above should be used.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK)irq_domain_translate_onecell (C function)c.irq_domain_translate_onecellhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hint irq_domain_translate_onecell (struct irq_domain *d, struct irq_fwspec *fwspec, unsigned long *out_hwirq, unsigned int *out_type)h]j[)}(hint irq_domain_translate_onecell(struct irq_domain *d, struct irq_fwspec *fwspec, unsigned long *out_hwirq, unsigned int *out_type)h](jm)}(hinth]hint}(hjXhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjXhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hj YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjXhhhjYhMubj)}(hirq_domain_translate_onecellh]j)}(hirq_domain_translate_onecellh]hirq_domain_translate_onecell}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](jjeh"]h$]h&]jjuh1jhjXhhhjYhMubj)}(hc(struct irq_domain *d, struct irq_fwspec *fwspec, unsigned long *out_hwirq, unsigned int *out_type)h](j)}(hstruct irq_domain *dh](ja)}(hjdh]hstruct}(hj7YhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj3Yubjs)}(h h]h }(hjDYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj3Yubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjUYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWYmodnameN classnameNjj)}j]j)}jjYsbc.irq_domain_translate_onecellasbuh1hhj3Yubjs)}(h h]h }(hjuYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj3Yubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Yubj)}(hjGh]hd}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Yubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/Yubj)}(hstruct irq_fwspec *fwspech](ja)}(hjdh]hstruct}(hjYhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjYubjs)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjYubh)}(hhh]j)}(h irq_fwspech]h irq_fwspec}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNjj)}j]jqYc.irq_domain_translate_onecellasbuh1hhjYubjs)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjYubj)}(hjh]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hfwspech]hfwspec}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/Yubj)}(hunsigned long *out_hwirqh](jm)}(hunsignedh]hunsigned}(hjZhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjZubjs)}(h h]h }(hj&ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjZubjm)}(hlongh]hlong}(hj4ZhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjZubjs)}(h h]h }(hjBZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjZubj)}(hjh]h*}(hjPZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h out_hwirqh]h out_hwirq}(hj]ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/Yubj)}(hunsigned int *out_typeh](jm)}(hunsignedh]hunsigned}(hjvZhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjrZubjs)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjrZubjm)}(hinth]hint}(hjZhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjrZubjs)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjrZubj)}(hjh]h*}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrZubj)}(hout_typeh]hout_type}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrZubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj/Yubeh}(h]h ]h"]h$]h&]jjuh1jhjXhhhjYhMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjXhhhjYhMubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1jThjYhMhjXhhubj)}(hhh]h)}(h.Generic translate for direct one cell bindingsh]h.Generic translate for direct one cell bindings}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjZhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjYhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1jOhhhjhNhNubj)}(hXC**Parameters** ``struct irq_domain *d`` Interrupt domain involved in the translation ``struct irq_fwspec *fwspec`` The firmware interrupt specifier to translate ``unsigned long *out_hwirq`` Pointer to storage for the hardware interrupt number ``unsigned int *out_type`` Pointer to storage for the interrupt typeh](h)}(h**Parameters**h]j)}(hj[h]h Parameters}(hj [hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj[ubj))}(hhh](j.)}(hF``struct irq_domain *d`` Interrupt domain involved in the translation h](j4)}(h``struct irq_domain *d``h]jw)}(hj&[h]hstruct irq_domain *d}(hj([hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj$[ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj [ubjN)}(hhh]h)}(h,Interrupt domain involved in the translationh]h,Interrupt domain involved in the translation}(hj?[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;[hMhj<[ubah}(h]h ]h"]h$]h&]uh1jMhj [ubeh}(h]h ]h"]h$]h&]uh1j-hj;[hMhj[ubj.)}(hL``struct irq_fwspec *fwspec`` The firmware interrupt specifier to translate h](j4)}(h``struct irq_fwspec *fwspec``h]jw)}(hj_[h]hstruct irq_fwspec *fwspec}(hja[hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj][ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjY[ubjN)}(hhh]h)}(h-The firmware interrupt specifier to translateh]h-The firmware interrupt specifier to translate}(hjx[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjt[hMhju[ubah}(h]h ]h"]h$]h&]uh1jMhjY[ubeh}(h]h ]h"]h$]h&]uh1j-hjt[hMhj[ubj.)}(hR``unsigned long *out_hwirq`` Pointer to storage for the hardware interrupt number h](j4)}(h``unsigned long *out_hwirq``h]jw)}(hj[h]hunsigned long *out_hwirq}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj[ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj[ubjN)}(hhh]h)}(h4Pointer to storage for the hardware interrupt numberh]h4Pointer to storage for the hardware interrupt number}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jMhj[ubeh}(h]h ]h"]h$]h&]uh1j-hj[hMhj[ubj.)}(hD``unsigned int *out_type`` Pointer to storage for the interrupt typeh](j4)}(h``unsigned int *out_type``h]jw)}(hj[h]hunsigned int *out_type}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj[ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj[ubjN)}(hhh]h)}(h)Pointer to storage for the interrupt typeh]h)Pointer to storage for the interrupt type}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj[ubah}(h]h ]h"]h$]h&]uh1jMhj[ubeh}(h]h ]h"]h$]h&]uh1j-hj[hMhj[ubeh}(h]h ]h"]h$]h&]uh1j(hj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK)irq_domain_translate_twocell (C function)c.irq_domain_translate_twocellhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hint irq_domain_translate_twocell (struct irq_domain *d, struct irq_fwspec *fwspec, unsigned long *out_hwirq, unsigned int *out_type)h]j[)}(hint irq_domain_translate_twocell(struct irq_domain *d, struct irq_fwspec *fwspec, unsigned long *out_hwirq, unsigned int *out_type)h](jm)}(hinth]hint}(hj+\hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj'\hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hj:\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj'\hhhj9\hMubj)}(hirq_domain_translate_twocellh]j)}(hirq_domain_translate_twocellh]hirq_domain_translate_twocell}(hjL\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH\ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'\hhhj9\hMubj)}(hc(struct irq_domain *d, struct irq_fwspec *fwspec, unsigned long *out_hwirq, unsigned int *out_type)h](j)}(hstruct irq_domain *dh](ja)}(hjdh]hstruct}(hjh\hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjd\ubjs)}(h h]h }(hju\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjd\ubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j)}jjN\sbc.irq_domain_translate_twocellasbuh1hhjd\ubjs)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjd\ubj)}(hjh]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd\ubj)}(hjGh]hd}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`\ubj)}(hstruct irq_fwspec *fwspech](ja)}(hjdh]hstruct}(hj\hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj\ubjs)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj\ubh)}(hhh]j)}(h irq_fwspech]h irq_fwspec}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\modnameN classnameNjj)}j]j\c.irq_domain_translate_twocellasbuh1hhj\ubjs)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj\ubj)}(hjh]h*}(hj#]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hfwspech]hfwspec}(hj0]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`\ubj)}(hunsigned long *out_hwirqh](jm)}(hunsignedh]hunsigned}(hjI]hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjE]ubjs)}(h h]h }(hjW]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjE]ubjm)}(hlongh]hlong}(hje]hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjE]ubjs)}(h h]h }(hjs]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjE]ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE]ubj)}(h out_hwirqh]h out_hwirq}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`\ubj)}(hunsigned int *out_typeh](jm)}(hunsignedh]hunsigned}(hj]hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj]ubjs)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj]ubjm)}(hinth]hint}(hj]hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj]ubjs)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj]ubj)}(hjh]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(hout_typeh]hout_type}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj`\ubeh}(h]h ]h"]h$]h&]jjuh1jhj'\hhhj9\hMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj#\hhhj9\hMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1jThj9\hMhj \hhubj)}(hhh]h)}(h.Generic translate for direct two cell bindingsh]h.Generic translate for direct two cell bindings}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj^hhubah}(h]h ]h"]h$]h&]uh1jhj \hhhj9\hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.^jj.^jjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *d`` Interrupt domain involved in the translation ``struct irq_fwspec *fwspec`` The firmware interrupt specifier to translate ``unsigned long *out_hwirq`` Pointer to storage for the hardware interrupt number ``unsigned int *out_type`` Pointer to storage for the interrupt type **Description** Device Tree IRQ specifier translation function which works with two cell bindings where the cell values map directly to the hwirq number and linux irq flags.h](h)}(h**Parameters**h]j)}(hj8^h]h Parameters}(hj:^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6^ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj2^ubj))}(hhh](j.)}(hF``struct irq_domain *d`` Interrupt domain involved in the translation h](j4)}(h``struct irq_domain *d``h]jw)}(hjW^h]hstruct irq_domain *d}(hjY^hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjU^ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjQ^ubjN)}(hhh]h)}(h,Interrupt domain involved in the translationh]h,Interrupt domain involved in the translation}(hjp^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl^hMhjm^ubah}(h]h ]h"]h$]h&]uh1jMhjQ^ubeh}(h]h ]h"]h$]h&]uh1j-hjl^hMhjN^ubj.)}(hL``struct irq_fwspec *fwspec`` The firmware interrupt specifier to translate h](j4)}(h``struct irq_fwspec *fwspec``h]jw)}(hj^h]hstruct irq_fwspec *fwspec}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj^ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj^ubjN)}(hhh]h)}(h-The firmware interrupt specifier to translateh]h-The firmware interrupt specifier to translate}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jMhj^ubeh}(h]h ]h"]h$]h&]uh1j-hj^hMhjN^ubj.)}(hR``unsigned long *out_hwirq`` Pointer to storage for the hardware interrupt number h](j4)}(h``unsigned long *out_hwirq``h]jw)}(hj^h]hunsigned long *out_hwirq}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj^ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj^ubjN)}(hhh]h)}(h4Pointer to storage for the hardware interrupt numberh]h4Pointer to storage for the hardware interrupt number}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jMhj^ubeh}(h]h ]h"]h$]h&]uh1j-hj^hMhjN^ubj.)}(hE``unsigned int *out_type`` Pointer to storage for the interrupt type h](j4)}(h``unsigned int *out_type``h]jw)}(hj_h]hunsigned int *out_type}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj_ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj^ubjN)}(hhh]h)}(h)Pointer to storage for the interrupt typeh]h)Pointer to storage for the interrupt type}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jMhj^ubeh}(h]h ]h"]h$]h&]uh1j-hj_hMhjN^ubeh}(h]h ]h"]h$]h&]uh1j(hj2^ubh)}(h**Description**h]j)}(hj=_h]h Description}(hj?_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;_ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj2^ubh)}(hDevice Tree IRQ specifier translation function which works with two cell bindings where the cell values map directly to the hwirq number and linux irq flags.h]hDevice Tree IRQ specifier translation function which works with two cell bindings where the cell values map directly to the hwirq number and linux irq flags.}(hjS_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj2^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK.irq_domain_translate_twothreecell (C function)#c.irq_domain_translate_twothreecellhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hint irq_domain_translate_twothreecell (struct irq_domain *d, struct irq_fwspec *fwspec, unsigned long *out_hwirq, unsigned int *out_type)h]j[)}(hint irq_domain_translate_twothreecell(struct irq_domain *d, struct irq_fwspec *fwspec, unsigned long *out_hwirq, unsigned int *out_type)h](jm)}(hinth]hint}(hj_hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj~_hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj~_hhhj_hMubj)}(h!irq_domain_translate_twothreecellh]j)}(h!irq_domain_translate_twothreecellh]h!irq_domain_translate_twothreecell}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj~_hhhj_hMubj)}(hc(struct irq_domain *d, struct irq_fwspec *fwspec, unsigned long *out_hwirq, unsigned int *out_type)h](j)}(hstruct irq_domain *dh](ja)}(hjdh]hstruct}(hj_hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj_ubjs)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj_ubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj_modnameN classnameNjj)}j]j)}jj_sb#c.irq_domain_translate_twothreecellasbuh1hhj_ubjs)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj_ubj)}(hjh]h*}(hj `hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hjGh]hd}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubj)}(hstruct irq_fwspec *fwspech](ja)}(hjdh]hstruct}(hj0`hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj,`ubjs)}(h h]h }(hj=`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj,`ubh)}(hhh]j)}(h irq_fwspech]h irq_fwspec}(hjN`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjP`modnameN classnameNjj)}j]j_#c.irq_domain_translate_twothreecellasbuh1hhj,`ubjs)}(h h]h }(hjl`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj,`ubj)}(hjh]h*}(hjz`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,`ubj)}(hfwspech]hfwspec}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubj)}(hunsigned long *out_hwirqh](jm)}(hunsignedh]hunsigned}(hj`hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj`ubjs)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj`ubjm)}(hlongh]hlong}(hj`hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj`ubjs)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj`ubj)}(hjh]h*}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h out_hwirqh]h out_hwirq}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubj)}(hunsigned int *out_typeh](jm)}(hunsignedh]hunsigned}(hj`hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj`ubjs)}(h h]h }(hj ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj`ubjm)}(hinth]hint}(hjahhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj`ubjs)}(h h]h }(hj(ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj`ubj)}(hjh]h*}(hj6ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hout_typeh]hout_type}(hjCahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj_ubeh}(h]h ]h"]h$]h&]jjuh1jhj~_hhhj_hMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjz_hhhj_hMubah}(h]ju_ah ](jjeh"]h$]h&]jj)jhuh1jThj_hMhjw_hhubj)}(hhh]h)}(h7Generic translate for direct two or three cell bindingsh]h7Generic translate for direct two or three cell bindings}(hjmahhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjjahhubah}(h]h ]h"]h$]h&]uh1jhjw_hhhj_hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *d`` Interrupt domain involved in the translation ``struct irq_fwspec *fwspec`` The firmware interrupt specifier to translate ``unsigned long *out_hwirq`` Pointer to storage for the hardware interrupt number ``unsigned int *out_type`` Pointer to storage for the interrupt type **Description** Firmware interrupt specifier translation function for two or three cell specifications, where the parameter values map directly to the hardware interrupt number and the type specifier.h](h)}(h**Parameters**h]j)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjaubj))}(hhh](j.)}(hF``struct irq_domain *d`` Interrupt domain involved in the translation h](j4)}(h``struct irq_domain *d``h]jw)}(hjah]hstruct irq_domain *d}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjaubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjaubjN)}(hhh]h)}(h,Interrupt domain involved in the translationh]h,Interrupt domain involved in the translation}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjaubah}(h]h ]h"]h$]h&]uh1jMhjaubeh}(h]h ]h"]h$]h&]uh1j-hjahMhjaubj.)}(hL``struct irq_fwspec *fwspec`` The firmware interrupt specifier to translate h](j4)}(h``struct irq_fwspec *fwspec``h]jw)}(hjah]hstruct irq_fwspec *fwspec}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjaubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjaubjN)}(hhh]h)}(h-The firmware interrupt specifier to translateh]h-The firmware interrupt specifier to translate}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjaubah}(h]h ]h"]h$]h&]uh1jMhjaubeh}(h]h ]h"]h$]h&]uh1j-hjahMhjaubj.)}(hR``unsigned long *out_hwirq`` Pointer to storage for the hardware interrupt number h](j4)}(h``unsigned long *out_hwirq``h]jw)}(hj bh]hunsigned long *out_hwirq}(hj"bhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjbubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjbubjN)}(hhh]h)}(h4Pointer to storage for the hardware interrupt numberh]h4Pointer to storage for the hardware interrupt number}(hj9bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5bhMhj6bubah}(h]h ]h"]h$]h&]uh1jMhjbubeh}(h]h ]h"]h$]h&]uh1j-hj5bhMhjaubj.)}(hE``unsigned int *out_type`` Pointer to storage for the interrupt type h](j4)}(h``unsigned int *out_type``h]jw)}(hjYbh]hunsigned int *out_type}(hj[bhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjWbubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjSbubjN)}(hhh]h)}(h)Pointer to storage for the interrupt typeh]h)Pointer to storage for the interrupt type}(hjrbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnbhMhjobubah}(h]h ]h"]h$]h&]uh1jMhjSbubeh}(h]h ]h"]h$]h&]uh1j-hjnbhMhjaubeh}(h]h ]h"]h$]h&]uh1j(hjaubh)}(h**Description**h]j)}(hjbh]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjaubh)}(hFirmware interrupt specifier translation function for two or three cell specifications, where the parameter values map directly to the hardware interrupt number and the type specifier.h]hFirmware interrupt specifier translation function for two or three cell specifications, where the parameter values map directly to the hardware interrupt number and the type specifier.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK&irq_domain_reset_irq_data (C function)c.irq_domain_reset_irq_datahNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(h:void irq_domain_reset_irq_data (struct irq_data *irq_data)h]j[)}(h9void irq_domain_reset_irq_data(struct irq_data *irq_data)h](jm)}(hvoidh]hvoid}(hjbhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjbhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjbhhhjbhMubj)}(hirq_domain_reset_irq_datah]j)}(hirq_domain_reset_irq_datah]hirq_domain_reset_irq_data}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1jhjbhhhjbhMubj)}(h(struct irq_data *irq_data)h]j)}(hstruct irq_data *irq_datah](ja)}(hjdh]hstruct}(hjchhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjcubjs)}(h h]h }(hj#chhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjcubh)}(hhh]j)}(hirq_datah]hirq_data}(hj4chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1cubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj6cmodnameN classnameNjj)}j]j)}jjbsbc.irq_domain_reset_irq_dataasbuh1hhjcubjs)}(h h]h }(hjTchhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjcubj)}(hjh]h*}(hjbchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(hirq_datah]hirq_data}(hjochhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjcubah}(h]h ]h"]h$]h&]jjuh1jhjbhhhjbhMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjbhhhjbhMubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1jThjbhMhjbhhubj)}(hhh]h)}(h/Clear hwirq, chip and chip_data in **irq_data**h](h#Clear hwirq, chip and chip_data in }(hjchhhNhNubj)}(h **irq_data**h]hirq_data}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjchhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjbhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcjjcjjjuh1jOhhhjhNhNubj)}(hG**Parameters** ``struct irq_data *irq_data`` The pointer to irq_datah](h)}(h**Parameters**h]j)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjcubj))}(hhh]j.)}(h5``struct irq_data *irq_data`` The pointer to irq_datah](j4)}(h``struct irq_data *irq_data``h]jw)}(hjch]hstruct irq_data *irq_data}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjcubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM!hjcubjN)}(hhh]h)}(hThe pointer to irq_datah]hThe pointer to irq_data}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjcubah}(h]h ]h"]h$]h&]uh1jMhjcubeh}(h]h ]h"]h$]h&]uh1j-hjchM!hjcubah}(h]h ]h"]h$]h&]uh1j(hjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK,irq_domain_disconnect_hierarchy (C function)!c.irq_domain_disconnect_hierarchyhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hRint irq_domain_disconnect_hierarchy (struct irq_domain *domain, unsigned int virq)h]j[)}(hQint irq_domain_disconnect_hierarchy(struct irq_domain *domain, unsigned int virq)h](jm)}(hinth]hint}(hjBdhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj>dhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMsubjs)}(h h]h }(hjQdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj>dhhhjPdhMsubj)}(hirq_domain_disconnect_hierarchyh]j)}(hirq_domain_disconnect_hierarchyh]hirq_domain_disconnect_hierarchy}(hjcdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_dubah}(h]h ](jjeh"]h$]h&]jjuh1jhj>dhhhjPdhMsubj)}(h.(struct irq_domain *domain, unsigned int virq)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hjdhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj{dubjs)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj{dubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjdmodnameN classnameNjj)}j]j)}jjedsb!c.irq_domain_disconnect_hierarchyasbuh1hhj{dubjs)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj{dubj)}(hjh]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{dubj)}(hdomainh]hdomain}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{dubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwdubj)}(hunsigned int virqh](jm)}(hunsignedh]hunsigned}(hjdhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjdubjs)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjdubjm)}(hinth]hint}(hj ehhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjdubjs)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjdubj)}(hvirqh]hvirq}(hj)ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwdubeh}(h]h ]h"]h$]h&]jjuh1jhj>dhhhjPdhMsubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj:dhhhjPdhMsubah}(h]j5dah ](jjeh"]h$]h&]jj)jhuh1jThjPdhMshj7dhhubj)}(hhh]h)}(h*Mark the first unused level of a hierarchyh]h*Mark the first unused level of a hierarchy}(hjSehhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMshjPehhubah}(h]h ]h"]h$]h&]uh1jhj7dhhhjPdhMsubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkejjkejjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *domain`` IRQ domain from which the hierarchy is to be disconnected ``unsigned int virq`` IRQ number where the hierarchy is to be trimmed **Description** Marks the **virq** level belonging to **domain** as disconnected. Returns -EINVAL if **virq** doesn't have a valid irq_data pointing to **domain**. Its only use is to be able to trim levels of hierarchy that do not have any real meaning for this interrupt, and that the driver marks as such from its .alloc() callback.h](h)}(h**Parameters**h]j)}(hjueh]h Parameters}(hjwehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjseubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMwhjoeubj))}(hhh](j.)}(hX``struct irq_domain *domain`` IRQ domain from which the hierarchy is to be disconnected h](j4)}(h``struct irq_domain *domain``h]jw)}(hjeh]hstruct irq_domain *domain}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjeubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMthjeubjN)}(hhh]h)}(h9IRQ domain from which the hierarchy is to be disconnectedh]h9IRQ domain from which the hierarchy is to be disconnected}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMthjeubah}(h]h ]h"]h$]h&]uh1jMhjeubeh}(h]h ]h"]h$]h&]uh1j-hjehMthjeubj.)}(hF``unsigned int virq`` IRQ number where the hierarchy is to be trimmed h](j4)}(h``unsigned int virq``h]jw)}(hjeh]hunsigned int virq}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjeubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMuhjeubjN)}(hhh]h)}(h/IRQ number where the hierarchy is to be trimmedh]h/IRQ number where the hierarchy is to be trimmed}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMuhjeubah}(h]h ]h"]h$]h&]uh1jMhjeubeh}(h]h ]h"]h$]h&]uh1j-hjehMuhjeubeh}(h]h ]h"]h$]h&]uh1j(hjoeubh)}(h**Description**h]j)}(hjfh]h Description}(hj fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMwhjoeubh)}(hMarks the **virq** level belonging to **domain** as disconnected. Returns -EINVAL if **virq** doesn't have a valid irq_data pointing to **domain**.h](h Marks the }(hjfhhhNhNubj)}(h**virq**h]hvirq}(hj&fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh level belonging to }(hjfhhhNhNubj)}(h **domain**h]hdomain}(hj8fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh% as disconnected. Returns -EINVAL if }(hjfhhhNhNubj)}(h**virq**h]hvirq}(hjJfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh- doesn’t have a valid irq_data pointing to }(hjfhhhNhNubj)}(h **domain**h]hdomain}(hj\fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMvhjoeubh)}(hIts only use is to be able to trim levels of hierarchy that do not have any real meaning for this interrupt, and that the driver marks as such from its .alloc() callback.h]hIts only use is to be able to trim levels of hierarchy that do not have any real meaning for this interrupt, and that the driver marks as such from its .alloc() callback.}(hjufhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMzhjoeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK$irq_domain_get_irq_data (C function)c.irq_domain_get_irq_datahNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hXstruct irq_data * irq_domain_get_irq_data (struct irq_domain *domain, unsigned int virq)h]j[)}(hVstruct irq_data *irq_domain_get_irq_data(struct irq_domain *domain, unsigned int virq)h](ja)}(hjdh]hstruct}(hjfhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjfhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjfhhhjfhMubh)}(hhh]j)}(hirq_datah]hirq_data}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNjj)}j]j)}jirq_domain_get_irq_datasbc.irq_domain_get_irq_dataasbuh1hhjfhhhjfhMubjs)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjfhhhjfhMubj)}(hjh]h*}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhjfhMubj)}(hirq_domain_get_irq_datah]j)}(hjfh]hirq_domain_get_irq_data}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](jjeh"]h$]h&]jjuh1jhjfhhhjfhMubj)}(h.(struct irq_domain *domain, unsigned int virq)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hjghhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjgubjs)}(h h]h }(hj+ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjgubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjgmodnameN classnameNjj)}j]jfc.irq_domain_get_irq_dataasbuh1hhjgubjs)}(h h]h }(hjZghhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjgubj)}(hjh]h*}(hjhghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hdomainh]hdomain}(hjughhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubj)}(hunsigned int virqh](jm)}(hunsignedh]hunsigned}(hjghhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjgubjs)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjgubjm)}(hinth]hint}(hjghhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjgubjs)}(h h]h }(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjgubj)}(hvirqh]hvirq}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjgubeh}(h]h ]h"]h$]h&]jjuh1jhjfhhhjfhMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjfhhhjfhMubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1jThjfhMhjfhhubj)}(hhh]h)}(h4Get irq_data associated with **virq** and **domain**h](hGet irq_data associated with }(hjghhhNhNubj)}(h**virq**h]hvirq}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubh and }(hjghhhNhNubj)}(h **domain**h]hdomain}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjghhubah}(h]h ]h"]h$]h&]uh1jhjfhhhjfhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(hjj(hjjjuh1jOhhhjhNhNubj)}(hs**Parameters** ``struct irq_domain *domain`` domain to match ``unsigned int virq`` IRQ number to get irq_datah](h)}(h**Parameters**h]j)}(hj2hh]h Parameters}(hj4hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0hubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj,hubj))}(hhh](j.)}(h.``struct irq_domain *domain`` domain to match h](j4)}(h``struct irq_domain *domain``h]jw)}(hjQhh]hstruct irq_domain *domain}(hjShhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjOhubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjKhubjN)}(hhh]h)}(hdomain to matchh]hdomain to match}(hjjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhhMhjghubah}(h]h ]h"]h$]h&]uh1jMhjKhubeh}(h]h ]h"]h$]h&]uh1j-hjfhhMhjHhubj.)}(h0``unsigned int virq`` IRQ number to get irq_datah](j4)}(h``unsigned int virq``h]jw)}(hjhh]hunsigned int virq}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjhubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjhubjN)}(hhh]h)}(hIRQ number to get irq_datah]hIRQ number to get irq_data}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjhubah}(h]h ]h"]h$]h&]uh1jMhjhubeh}(h]h ]h"]h$]h&]uh1j-hjhhMhjHhubeh}(h]h ]h"]h$]h&]uh1j(hj,hubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK*irq_domain_set_hwirq_and_chip (C function)c.irq_domain_set_hwirq_and_chiphNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hint irq_domain_set_hwirq_and_chip (struct irq_domain *domain, unsigned int virq, irq_hw_number_t hwirq, const struct irq_chip *chip, void *chip_data)h]j[)}(hint irq_domain_set_hwirq_and_chip(struct irq_domain *domain, unsigned int virq, irq_hw_number_t hwirq, const struct irq_chip *chip, void *chip_data)h](jm)}(hinth]hint}(hjhhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjhhhhjhhMubj)}(hirq_domain_set_hwirq_and_chiph]j)}(hirq_domain_set_hwirq_and_chiph]hirq_domain_set_hwirq_and_chip}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhhjhhMubj)}(hs(struct irq_domain *domain, unsigned int virq, irq_hw_number_t hwirq, const struct irq_chip *chip, void *chip_data)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hj!ihhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjiubjs)}(h h]h }(hj.ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjiubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj?ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj``const struct irq_chip *chip`` The associated interrupt chip h](j4)}(h``const struct irq_chip *chip``h]jw)}(hjlh]hconst struct irq_chip *chip}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjlubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjlubjN)}(hhh]h)}(hThe associated interrupt chiph]hThe associated interrupt chip}(hj/lhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+lhMhj,lubah}(h]h ]h"]h$]h&]uh1jMhjlubeh}(h]h ]h"]h$]h&]uh1j-hj+lhMhjbkubj.)}(h,``void *chip_data`` The associated chip datah](j4)}(h``void *chip_data``h]jw)}(hjOlh]hvoid *chip_data}(hjQlhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjMlubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjIlubjN)}(hhh]h)}(hThe associated chip datah]hThe associated chip data}(hjhlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjelubah}(h]h ]h"]h$]h&]uh1jMhjIlubeh}(h]h ]h"]h$]h&]uh1j-hjdlhMhjbkubeh}(h]h ]h"]h$]h&]uh1j(hjFkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK irq_domain_set_info (C function)c.irq_domain_set_infohNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hvoid irq_domain_set_info (struct irq_domain *domain, unsigned int virq, irq_hw_number_t hwirq, const struct irq_chip *chip, void *chip_data, irq_flow_handler_t handler, void *handler_data, const char *handler_name)h]j[)}(hvoid irq_domain_set_info(struct irq_domain *domain, unsigned int virq, irq_hw_number_t hwirq, const struct irq_chip *chip, void *chip_data, irq_flow_handler_t handler, void *handler_data, const char *handler_name)h](jm)}(hvoidh]hvoid}(hjlhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjlhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjlhhhjlhMubj)}(hirq_domain_set_infoh]j)}(hirq_domain_set_infoh]hirq_domain_set_info}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ](jjeh"]h$]h&]jjuh1jhjlhhhjlhMubj)}(h(struct irq_domain *domain, unsigned int virq, irq_hw_number_t hwirq, const struct irq_chip *chip, void *chip_data, irq_flow_handler_t handler, void *handler_data, const char *handler_name)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hjlhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjlubjs)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjlubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j)}jjlsbc.irq_domain_set_infoasbuh1hhjlubjs)}(h h]h }(hj$mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjlubj)}(hjh]h*}(hj2mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(hdomainh]hdomain}(hj?mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hunsigned int virqh](jm)}(hunsignedh]hunsigned}(hjXmhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjTmubjs)}(h h]h }(hjfmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjTmubjm)}(hinth]hint}(hjtmhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjTmubjs)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjTmubj)}(hvirqh]hvirq}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hirq_hw_number_t hwirqh](h)}(hhh]j)}(hirq_hw_number_th]hirq_hw_number_t}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmmodnameN classnameNjj)}j]j mc.irq_domain_set_infoasbuh1hhjmubjs)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjmubj)}(hhwirqh]hhwirq}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hconst struct irq_chip *chiph](ja)}(hjh]hconst}(hjmhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjmubjs)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjmubja)}(hjdh]hstruct}(hj nhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjmubjs)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjmubh)}(hhh]j)}(hirq_chiph]hirq_chip}(hj*nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'nubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,nmodnameN classnameNjj)}j]j mc.irq_domain_set_infoasbuh1hhjmubjs)}(h h]h }(hjHnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjmubj)}(hjh]h*}(hjVnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubj)}(hchiph]hchip}(hjcnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hvoid *chip_datah](jm)}(hvoidh]hvoid}(hj|nhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjxnubjs)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjxnubj)}(hjh]h*}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxnubj)}(h chip_datah]h chip_data}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hirq_flow_handler_t handlerh](h)}(hhh]j)}(hirq_flow_handler_th]hirq_flow_handler_t}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjnmodnameN classnameNjj)}j]j mc.irq_domain_set_infoasbuh1hhjnubjs)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjnubj)}(hhandlerh]hhandler}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hvoid *handler_datah](jm)}(hvoidh]hvoid}(hjohhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjoubjs)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjoubj)}(hjh]h*}(hj"ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h handler_datah]h handler_data}(hj/ohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubj)}(hconst char *handler_nameh](ja)}(hjh]hconst}(hjHohhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjDoubjs)}(h h]h }(hjUohhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjDoubjm)}(hcharh]hchar}(hjcohhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjDoubjs)}(h h]h }(hjqohhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjDoubj)}(hjh]h*}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDoubj)}(h handler_nameh]h handler_name}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDoubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjlubeh}(h]h ]h"]h$]h&]jjuh1jhjlhhhjlhMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjlhhhjlhMubah}(h]jlah ](jjeh"]h$]h&]jj)jhuh1jThjlhMhjlhhubj)}(hhh]h)}(h2Set the complete data for a **virq** in **domain**h](hSet the complete data for a }(hjohhhNhNubj)}(h**virq**h]hvirq}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh in }(hjohhhNhNubj)}(h **domain**h]hdomain}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjohhubah}(h]h ]h"]h$]h&]uh1jhjlhhhjlhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjojjojjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *domain`` Interrupt domain to match ``unsigned int virq`` IRQ number ``irq_hw_number_t hwirq`` The hardware interrupt number ``const struct irq_chip *chip`` The associated interrupt chip ``void *chip_data`` The associated interrupt chip data ``irq_flow_handler_t handler`` The interrupt flow handler ``void *handler_data`` The interrupt flow handler data ``const char *handler_name`` The interrupt handler nameh](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjoubj))}(hhh](j.)}(h8``struct irq_domain *domain`` Interrupt domain to match h](j4)}(h``struct irq_domain *domain``h]jw)}(hjph]hstruct irq_domain *domain}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjpubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjpubjN)}(hhh]h)}(hInterrupt domain to matchh]hInterrupt domain to match}(hj0phhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,phMhj-pubah}(h]h ]h"]h$]h&]uh1jMhjpubeh}(h]h ]h"]h$]h&]uh1j-hj,phMhjpubj.)}(h!``unsigned int virq`` IRQ number h](j4)}(h``unsigned int virq``h]jw)}(hjPph]hunsigned int virq}(hjRphhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjNpubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjJpubjN)}(hhh]h)}(h IRQ numberh]h IRQ number}(hjiphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjephMhjfpubah}(h]h ]h"]h$]h&]uh1jMhjJpubeh}(h]h ]h"]h$]h&]uh1j-hjephMhjpubj.)}(h8``irq_hw_number_t hwirq`` The hardware interrupt number h](j4)}(h``irq_hw_number_t hwirq``h]jw)}(hjph]hirq_hw_number_t hwirq}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjpubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjpubjN)}(hhh]h)}(hThe hardware interrupt numberh]hThe hardware interrupt number}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1jMhjpubeh}(h]h ]h"]h$]h&]uh1j-hjphMhjpubj.)}(h>``const struct irq_chip *chip`` The associated interrupt chip h](j4)}(h``const struct irq_chip *chip``h]jw)}(hjph]hconst struct irq_chip *chip}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjpubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjpubjN)}(hhh]h)}(hThe associated interrupt chiph]hThe associated interrupt chip}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjpubah}(h]h ]h"]h$]h&]uh1jMhjpubeh}(h]h ]h"]h$]h&]uh1j-hjphMhjpubj.)}(h7``void *chip_data`` The associated interrupt chip data h](j4)}(h``void *chip_data``h]jw)}(hjph]hvoid *chip_data}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjpubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM hjpubjN)}(hhh]h)}(h"The associated interrupt chip datah]h"The associated interrupt chip data}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM hjqubah}(h]h ]h"]h$]h&]uh1jMhjpubeh}(h]h ]h"]h$]h&]uh1j-hjqhM hjpubj.)}(h:``irq_flow_handler_t handler`` The interrupt flow handler h](j4)}(h``irq_flow_handler_t handler``h]jw)}(hj4qh]hirq_flow_handler_t handler}(hj6qhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj2qubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM hj.qubjN)}(hhh]h)}(hThe interrupt flow handlerh]hThe interrupt flow handler}(hjMqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIqhM hjJqubah}(h]h ]h"]h$]h&]uh1jMhj.qubeh}(h]h ]h"]h$]h&]uh1j-hjIqhM hjpubj.)}(h7``void *handler_data`` The interrupt flow handler data h](j4)}(h``void *handler_data``h]jw)}(hjmqh]hvoid *handler_data}(hjoqhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjkqubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM hjgqubjN)}(hhh]h)}(hThe interrupt flow handler datah]hThe interrupt flow handler data}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM hjqubah}(h]h ]h"]h$]h&]uh1jMhjgqubeh}(h]h ]h"]h$]h&]uh1j-hjqhM hjpubj.)}(h7``const char *handler_name`` The interrupt handler nameh](j4)}(h``const char *handler_name``h]jw)}(hjqh]hconst char *handler_name}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjqubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM hjqubjN)}(hhh]h)}(hThe interrupt handler nameh]hThe interrupt handler name}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM hjqubah}(h]h ]h"]h$]h&]uh1jMhjqubeh}(h]h ]h"]h$]h&]uh1j-hjqhM hjpubeh}(h]h ]h"]h$]h&]uh1j(hjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK(irq_domain_free_irqs_common (C function)c.irq_domain_free_irqs_commonhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hevoid irq_domain_free_irqs_common (struct irq_domain *domain, unsigned int virq, unsigned int nr_irqs)h]j[)}(hdvoid irq_domain_free_irqs_common(struct irq_domain *domain, unsigned int virq, unsigned int nr_irqs)h](jm)}(hvoidh]hvoid}(hjrhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjqhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjqhhhjrhMubj)}(hirq_domain_free_irqs_commonh]j)}(hirq_domain_free_irqs_commonh]hirq_domain_free_irqs_common}(hj!rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]jjuh1jhjqhhhjrhMubj)}(hD(struct irq_domain *domain, unsigned int virq, unsigned int nr_irqs)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hj=rhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj9rubjs)}(h h]h }(hjJrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj9rubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj[rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXrubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]rmodnameN classnameNjj)}j]j)}jj#rsbc.irq_domain_free_irqs_commonasbuh1hhj9rubjs)}(h h]h }(hj{rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj9rubj)}(hjh]h*}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9rubj)}(hdomainh]hdomain}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9rubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5rubj)}(hunsigned int virqh](jm)}(hunsignedh]hunsigned}(hjrhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjrubjs)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjrubjm)}(hinth]hint}(hjrhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjrubjs)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjrubj)}(hvirqh]hvirq}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5rubj)}(hunsigned int nr_irqsh](jm)}(hunsignedh]hunsigned}(hjshhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjrubjs)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjrubjm)}(hinth]hint}(hjshhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjrubjs)}(h h]h }(hj*shhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjrubj)}(hnr_irqsh]hnr_irqs}(hj8shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj5rubeh}(h]h ]h"]h$]h&]jjuh1jhjqhhhjrhMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjqhhhjrhMubah}(h]jqah ](jjeh"]h$]h&]jj)jhuh1jThjrhMhjqhhubj)}(hhh]h)}(h"Clear irq_data and free the parenth]h"Clear irq_data and free the parent}(hjbshhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj_shhubah}(h]h ]h"]h$]h&]uh1jhjqhhhjrhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzsjjzsjjjuh1jOhhhjhNhNubj)}(h**Parameters** ``struct irq_domain *domain`` Interrupt domain to match ``unsigned int virq`` IRQ number to start with ``unsigned int nr_irqs`` The number of irqs to freeh](h)}(h**Parameters**h]j)}(hjsh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj~subj))}(hhh](j.)}(h8``struct irq_domain *domain`` Interrupt domain to match h](j4)}(h``struct irq_domain *domain``h]jw)}(hjsh]hstruct irq_domain *domain}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjsubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjsubjN)}(hhh]h)}(hInterrupt domain to matchh]hInterrupt domain to match}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjsubah}(h]h ]h"]h$]h&]uh1jMhjsubeh}(h]h ]h"]h$]h&]uh1j-hjshMhjsubj.)}(h/``unsigned int virq`` IRQ number to start with h](j4)}(h``unsigned int virq``h]jw)}(hjsh]hunsigned int virq}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjsubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjsubjN)}(hhh]h)}(hIRQ number to start withh]hIRQ number to start with}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshMhjsubah}(h]h ]h"]h$]h&]uh1jMhjsubeh}(h]h ]h"]h$]h&]uh1j-hjshMhjsubj.)}(h3``unsigned int nr_irqs`` The number of irqs to freeh](j4)}(h``unsigned int nr_irqs``h]jw)}(hjth]hunsigned int nr_irqs}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjtubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjtubjN)}(hhh]h)}(hThe number of irqs to freeh]hThe number of irqs to free}(hj.thhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj+tubah}(h]h ]h"]h$]h&]uh1jMhjtubeh}(h]h ]h"]h$]h&]uh1j-hj*thMhjsubeh}(h]h ]h"]h$]h&]uh1j(hj~subeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK%irq_domain_free_irqs_top (C function)c.irq_domain_free_irqs_tophNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hbvoid irq_domain_free_irqs_top (struct irq_domain *domain, unsigned int virq, unsigned int nr_irqs)h]j[)}(havoid irq_domain_free_irqs_top(struct irq_domain *domain, unsigned int virq, unsigned int nr_irqs)h](jm)}(hvoidh]hvoid}(hjothhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjkthhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM/ubjs)}(h h]h }(hj~thhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjkthhhj}thM/ubj)}(hirq_domain_free_irqs_toph]j)}(hirq_domain_free_irqs_toph]hirq_domain_free_irqs_top}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]jjuh1jhjkthhhj}thM/ubj)}(hD(struct irq_domain *domain, unsigned int virq, unsigned int nr_irqs)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hjthhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjtubjs)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjtubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjtmodnameN classnameNjj)}j]j)}jjtsbc.irq_domain_free_irqs_topasbuh1hhjtubjs)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjtubj)}(hjh]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubj)}(hdomainh]hdomain}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubj)}(hunsigned int virqh](jm)}(hunsignedh]hunsigned}(hjuhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjuubjs)}(h h]h }(hj,uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjuubjm)}(hinth]hint}(hj:uhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjuubjs)}(h h]h }(hjHuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjuubj)}(hvirqh]hvirq}(hjVuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubj)}(hunsigned int nr_irqsh](jm)}(hunsignedh]hunsigned}(hjouhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjkuubjs)}(h h]h }(hj}uhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjkuubjm)}(hinth]hint}(hjuhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjkuubjs)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjkuubj)}(hnr_irqsh]hnr_irqs}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkuubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjtubeh}(h]h ]h"]h$]h&]jjuh1jhjkthhhj}thM/ubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjgthhhj}thM/ubah}(h]jbtah ](jjeh"]h$]h&]jj)jhuh1jThj}thM/hjdthhubj)}(hhh]h)}(h=Clear handler and handler data, clear irqdata and free parenth]h=Clear handler and handler data, clear irqdata and free parent}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM/hjuhhubah}(h]h ]h"]h$]h&]uh1jhjdthhhj}thM/ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1jOhhhjhNhNubj)}(h**Parameters** ``struct irq_domain *domain`` Interrupt domain to match ``unsigned int virq`` IRQ number to start with ``unsigned int nr_irqs`` The number of irqs to freeh](h)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM3hjuubj))}(hhh](j.)}(h8``struct irq_domain *domain`` Interrupt domain to match h](j4)}(h``struct irq_domain *domain``h]jw)}(hjvh]hstruct irq_domain *domain}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjvubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM0hj vubjN)}(hhh]h)}(hInterrupt domain to matchh]hInterrupt domain to match}(hj+vhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'vhM0hj(vubah}(h]h ]h"]h$]h&]uh1jMhj vubeh}(h]h ]h"]h$]h&]uh1j-hj'vhM0hj vubj.)}(h/``unsigned int virq`` IRQ number to start with h](j4)}(h``unsigned int virq``h]jw)}(hjKvh]hunsigned int virq}(hjMvhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjIvubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM1hjEvubjN)}(hhh]h)}(hIRQ number to start withh]hIRQ number to start with}(hjdvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`vhM1hjavubah}(h]h ]h"]h$]h&]uh1jMhjEvubeh}(h]h ]h"]h$]h&]uh1j-hj`vhM1hj vubj.)}(h3``unsigned int nr_irqs`` The number of irqs to freeh](j4)}(h``unsigned int nr_irqs``h]jw)}(hjvh]hunsigned int nr_irqs}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjvubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM3hj~vubjN)}(hhh]h)}(hThe number of irqs to freeh]hThe number of irqs to free}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chM2hjvubah}(h]h ]h"]h$]h&]uh1jMhj~vubeh}(h]h ]h"]h$]h&]uh1j-hjvhM3hj vubeh}(h]h ]h"]h$]h&]uh1j(hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK$__irq_domain_alloc_irqs (C function)c.__irq_domain_alloc_irqshNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hint __irq_domain_alloc_irqs (struct irq_domain *domain, int irq_base, unsigned int nr_irqs, int node, void *arg, bool realloc, const struct irq_affinity_desc *affinity)h]j[)}(hint __irq_domain_alloc_irqs(struct irq_domain *domain, int irq_base, unsigned int nr_irqs, int node, void *arg, bool realloc, const struct irq_affinity_desc *affinity)h](jm)}(hinth]hint}(hjvhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjvhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjvhhhjvhMubj)}(h__irq_domain_alloc_irqsh]j)}(h__irq_domain_alloc_irqsh]h__irq_domain_alloc_irqs}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ](jjeh"]h$]h&]jjuh1jhjvhhhjvhMubj)}(h(struct irq_domain *domain, int irq_base, unsigned int nr_irqs, int node, void *arg, bool realloc, const struct irq_affinity_desc *affinity)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hjwhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjwubjs)}(h h]h }(hj(whhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjwubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj9whhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6wubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;wmodnameN classnameNjj)}j]j)}jjwsbc.__irq_domain_alloc_irqsasbuh1hhjwubjs)}(h h]h }(hjYwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjwubj)}(hjh]h*}(hjgwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hdomainh]hdomain}(hjtwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(h int irq_baseh](jm)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jyah"]h$]ph&]uh1jlhjwubjs)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjwubj)}(hirq_baseh]hirq_base}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hunsigned int nr_irqsh](jm)}(hunsignedh]hunsigned}(hjwhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjwubjs)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjwubjm)}(hinth]hint}(hjwhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjwubjs)}(h h]h }(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjwubj)}(hnr_irqsh]hnr_irqs}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(hint nodeh](jm)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjxubjs)}(h h]h }(hj!xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjxubj)}(hnodeh]hnode}(hj/xhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(h void *argh](jm)}(hvoidh]hvoid}(hjHxhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjDxubjs)}(h h]h }(hjVxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjDxubj)}(hjh]h*}(hjdxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDxubj)}(hargh]harg}(hjqxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(h bool realloch](jm)}(hboolh]hbool}(hjxhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjxubjs)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjxubj)}(hrealloch]hrealloc}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubj)}(h(const struct irq_affinity_desc *affinityh](ja)}(hjh]hconst}(hjxhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjxubjs)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjxubja)}(hjdh]hstruct}(hjxhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjxubjs)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjxubh)}(hhh]j)}(hirq_affinity_desch]hirq_affinity_desc}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjxmodnameN classnameNjj)}j]jUwc.__irq_domain_alloc_irqsasbuh1hhjxubjs)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjxubj)}(hjh]h*}(hj$yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(haffinityh]haffinity}(hj1yhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjwubeh}(h]h ]h"]h$]h&]jjuh1jhjvhhhjvhMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjvhhhjvhMubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1jThjvhMhjvhhubj)}(hhh]h)}(hAllocate IRQs from domainh]hAllocate IRQs from domain}(hj[yhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjXyhhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjvhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjsyjjsyjjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *domain`` domain to allocate from ``int irq_base`` allocate specified IRQ number if irq_base >= 0 ``unsigned int nr_irqs`` number of IRQs to allocate ``int node`` NUMA node id for memory allocation ``void *arg`` domain specific argument ``bool realloc`` IRQ descriptors have already been allocated if true ``const struct irq_affinity_desc *affinity`` Optional irq affinity mask for multiqueue devices **Description** Allocate IRQ numbers and initialized all data structures to support hierarchy IRQ domains. Parameter **realloc** is mainly to support legacy IRQs. Returns error code or allocated IRQ number The whole process to setup an IRQ has been split into two steps. The first step, __irq_domain_alloc_irqs(), is to allocate IRQ descriptor and required hardware resources. The second step, irq_domain_activate_irq(), is to program the hardware with preallocated resources. In this way, it's easier to rollback when failing to allocate resources.h](h)}(h**Parameters**h]j)}(hj}yh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{yubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjwyubj))}(hhh](j.)}(h6``struct irq_domain *domain`` domain to allocate from h](j4)}(h``struct irq_domain *domain``h]jw)}(hjyh]hstruct irq_domain *domain}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjyubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjyubjN)}(hhh]h)}(hdomain to allocate fromh]hdomain to allocate from}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jMhjyubeh}(h]h ]h"]h$]h&]uh1j-hjyhMhjyubj.)}(h@``int irq_base`` allocate specified IRQ number if irq_base >= 0 h](j4)}(h``int irq_base``h]jw)}(hjyh]h int irq_base}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjyubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjyubjN)}(hhh]h)}(h.allocate specified IRQ number if irq_base >= 0h]h.allocate specified IRQ number if irq_base >= 0}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMhjyubah}(h]h ]h"]h$]h&]uh1jMhjyubeh}(h]h ]h"]h$]h&]uh1j-hjyhMhjyubj.)}(h4``unsigned int nr_irqs`` number of IRQs to allocate h](j4)}(h``unsigned int nr_irqs``h]jw)}(hjzh]hunsigned int nr_irqs}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj zubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjzubjN)}(hhh]h)}(hnumber of IRQs to allocateh]hnumber of IRQs to allocate}(hj'zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#zhMhj$zubah}(h]h ]h"]h$]h&]uh1jMhjzubeh}(h]h ]h"]h$]h&]uh1j-hj#zhMhjyubj.)}(h0``int node`` NUMA node id for memory allocation h](j4)}(h ``int node``h]jw)}(hjGzh]hint node}(hjIzhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjEzubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjAzubjN)}(hhh]h)}(h"NUMA node id for memory allocationh]h"NUMA node id for memory allocation}(hj`zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\zhMhj]zubah}(h]h ]h"]h$]h&]uh1jMhjAzubeh}(h]h ]h"]h$]h&]uh1j-hj\zhMhjyubj.)}(h'``void *arg`` domain specific argument h](j4)}(h ``void *arg``h]jw)}(hjzh]h void *arg}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj~zubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjzzubjN)}(hhh]h)}(hdomain specific argumenth]hdomain specific argument}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jMhjzzubeh}(h]h ]h"]h$]h&]uh1j-hjzhMhjyubj.)}(hE``bool realloc`` IRQ descriptors have already been allocated if true h](j4)}(h``bool realloc``h]jw)}(hjzh]h bool realloc}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjzubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjzubjN)}(hhh]h)}(h3IRQ descriptors have already been allocated if trueh]h3IRQ descriptors have already been allocated if true}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhjzubah}(h]h ]h"]h$]h&]uh1jMhjzubeh}(h]h ]h"]h$]h&]uh1j-hjzhMhjyubj.)}(h_``const struct irq_affinity_desc *affinity`` Optional irq affinity mask for multiqueue devices h](j4)}(h,``const struct irq_affinity_desc *affinity``h]jw)}(hjzh]h(const struct irq_affinity_desc *affinity}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjzubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjzubjN)}(hhh]h)}(h1Optional irq affinity mask for multiqueue devicesh]h1Optional irq affinity mask for multiqueue devices}(hj {hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jMhjzubeh}(h]h ]h"]h$]h&]uh1j-hj{hMhjyubeh}(h]h ]h"]h$]h&]uh1j(hjwyubh)}(h**Description**h]j)}(hj-{h]h Description}(hj/{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+{ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjwyubh)}(hAllocate IRQ numbers and initialized all data structures to support hierarchy IRQ domains. Parameter **realloc** is mainly to support legacy IRQs. Returns error code or allocated IRQ numberh](heAllocate IRQ numbers and initialized all data structures to support hierarchy IRQ domains. Parameter }(hjC{hhhNhNubj)}(h **realloc**h]hrealloc}(hjK{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC{ubhM is mainly to support legacy IRQs. Returns error code or allocated IRQ number}(hjC{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjwyubh)}(hXWThe whole process to setup an IRQ has been split into two steps. The first step, __irq_domain_alloc_irqs(), is to allocate IRQ descriptor and required hardware resources. The second step, irq_domain_activate_irq(), is to program the hardware with preallocated resources. In this way, it's easier to rollback when failing to allocate resources.h]hXYThe whole process to setup an IRQ has been split into two steps. The first step, __irq_domain_alloc_irqs(), is to allocate IRQ descriptor and required hardware resources. The second step, irq_domain_activate_irq(), is to program the hardware with preallocated resources. In this way, it’s easier to rollback when failing to allocate resources.}(hjd{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjwyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK irq_domain_push_irq (C function)c.irq_domain_push_irqhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hHint irq_domain_push_irq (struct irq_domain *domain, int virq, void *arg)h]j[)}(hGint irq_domain_push_irq(struct irq_domain *domain, int virq, void *arg)h](jm)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj{hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj{hhhj{hMubj)}(hirq_domain_push_irqh]j)}(hirq_domain_push_irqh]hirq_domain_push_irq}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj{hhhj{hMubj)}(h0(struct irq_domain *domain, int virq, void *arg)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hj{hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hj{ubjs)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj{ubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]j)}jj{sbc.irq_domain_push_irqasbuh1hhj{ubjs)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj{ubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hdomainh]hdomain}(hj)|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{ubj)}(hint virqh](jm)}(hinth]hint}(hjB|hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj>|ubjs)}(h h]h }(hjP|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj>|ubj)}(hvirqh]hvirq}(hj^|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{ubj)}(h void *argh](jm)}(hvoidh]hvoid}(hjw|hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjs|ubjs)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjs|ubj)}(hjh]h*}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs|ubj)}(hargh]harg}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs|ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj{ubeh}(h]h ]h"]h$]h&]jjuh1jhj{hhhj{hMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj{hhhj{hMubah}(h]j{ah ](jjeh"]h$]h&]jj)jhuh1jThj{hMhj{hhubj)}(hhh]h)}(h+Push a domain in to the top of a hierarchy.h]h+Push a domain in to the top of a hierarchy.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj|hhubah}(h]h ]h"]h$]h&]uh1jhj{hhhj{hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1jOhhhjhNhNubj)}(hX**Parameters** ``struct irq_domain *domain`` Domain to push. ``int virq`` Irq to push the domain in to. ``void *arg`` Passed to the irq_domain_ops alloc() function. **Description** For an already existing irqdomain hierarchy, as might be obtained via a call to pci_enable_msix(), add an additional domain to the head of the processing chain. Must be called before request_irq() has been called.h](h)}(h**Parameters**h]j)}(hj|h]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj|ubj))}(hhh](j.)}(h.``struct irq_domain *domain`` Domain to push. h](j4)}(h``struct irq_domain *domain``h]jw)}(hj }h]hstruct irq_domain *domain}(hj }hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj }ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj}ubjN)}(hhh]h)}(hDomain to push.h]hDomain to push.}(hj$}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj }hMhj!}ubah}(h]h ]h"]h$]h&]uh1jMhj}ubeh}(h]h ]h"]h$]h&]uh1j-hj }hMhj}ubj.)}(h+``int virq`` Irq to push the domain in to. h](j4)}(h ``int virq``h]jw)}(hjD}h]hint virq}(hjF}hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjB}ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj>}ubjN)}(hhh]h)}(hIrq to push the domain in to.h]hIrq to push the domain in to.}(hj]}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY}hMhjZ}ubah}(h]h ]h"]h$]h&]uh1jMhj>}ubeh}(h]h ]h"]h$]h&]uh1j-hjY}hMhj}ubj.)}(h=``void *arg`` Passed to the irq_domain_ops alloc() function. h](j4)}(h ``void *arg``h]jw)}(hj}}h]h void *arg}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj{}ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjw}ubjN)}(hhh]h)}(h.Passed to the irq_domain_ops alloc() function.h]h.Passed to the irq_domain_ops alloc() function.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hMhj}ubah}(h]h ]h"]h$]h&]uh1jMhjw}ubeh}(h]h ]h"]h$]h&]uh1j-hj}hMhj}ubeh}(h]h ]h"]h$]h&]uh1j(hj|ubh)}(h**Description**h]j)}(hj}h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj|ubh)}(hFor an already existing irqdomain hierarchy, as might be obtained via a call to pci_enable_msix(), add an additional domain to the head of the processing chain. Must be called before request_irq() has been called.h]hFor an already existing irqdomain hierarchy, as might be obtained via a call to pci_enable_msix(), add an additional domain to the head of the processing chain. Must be called before request_irq() has been called.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jKirq_domain_pop_irq (C function)c.irq_domain_pop_irqhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hhjhhhNhNubjP)}(hhh](jU)}(hCvoid irq_domain_free_irqs (unsigned int virq, unsigned int nr_irqs)h]j[)}(hBvoid irq_domain_free_irqs(unsigned int virq, unsigned int nr_irqs)h](jm)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMcubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjhhhjhMcubj)}(hirq_domain_free_irqsh]j)}(hirq_domain_free_irqsh]hirq_domain_free_irqs}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMcubj)}(h)(unsigned int virq, unsigned int nr_irqs)h](j)}(hunsigned int virqh](jm)}(hunsignedh]hunsigned}(hj)hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj%ubjs)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj%ubjm)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj%ubjs)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj%ubj)}(hvirqh]hvirq}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubj)}(hunsigned int nr_irqsh](jm)}(hunsignedh]hunsigned}(hjzhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjvubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjvubjm)}(hinth]hint}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjvubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjvubj)}(hnr_irqsh]hnr_irqs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]noemphjjuh1jhj!ubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMcubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjhhhjhMcubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jThjhMchjhhubj)}(hhh]h)}(h.Free IRQ number and associated data structuresh]h.Free IRQ number and associated data structures}(hj܀hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMchjـhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMcubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jOhhhjhNhNubj)}(hj**Parameters** ``unsigned int virq`` base IRQ number ``unsigned int nr_irqs`` number of IRQs to freeh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMghjubj))}(hhh](j.)}(h&``unsigned int virq`` base IRQ number h](j4)}(h``unsigned int virq``h]jw)}(hjh]hunsigned int virq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMdhjubjN)}(hhh]h)}(hbase IRQ numberh]hbase IRQ number}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMdhj3ubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hj2hMdhjubj.)}(h/``unsigned int nr_irqs`` number of IRQs to freeh](j4)}(h``unsigned int nr_irqs``h]jw)}(hjVh]hunsigned int nr_irqs}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjTubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMfhjPubjN)}(hhh]h)}(hnumber of IRQs to freeh]hnumber of IRQs to free}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMehjlubah}(h]h ]h"]h$]h&]uh1jMhjPubeh}(h]h ]h"]h$]h&]uh1j-hjkhMfhjubeh}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK)irq_domain_alloc_irqs_parent (C function)c.irq_domain_alloc_irqs_parenthNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(htint irq_domain_alloc_irqs_parent (struct irq_domain *domain, unsigned int irq_base, unsigned int nr_irqs, void *arg)h]j[)}(hsint irq_domain_alloc_irqs_parent(struct irq_domain *domain, unsigned int irq_base, unsigned int nr_irqs, void *arg)h](jm)}(hinth]hint}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjhhhjhMubj)}(hirq_domain_alloc_irqs_parenth]j)}(hirq_domain_alloc_irqs_parenth]hirq_domain_alloc_irqs_parent}(hjсhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj́ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hS(struct irq_domain *domain, unsigned int irq_base, unsigned int nr_irqs, void *arg)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hjhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jjӁsbc.irq_domain_alloc_irqs_parentasbuh1hhjubjs)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(hjh]h*}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdomainh]hdomain}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int irq_baseh](jm)}(hunsignedh]hunsigned}(hj_hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj[ubjs)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj[ubjm)}(hinth]hint}(hj{hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj[ubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj[ubj)}(hirq_baseh]hirq_base}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(hunsigned int nr_irqsh](jm)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubjm)}(hinth]hint}(hĵhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjubjs)}(h h]h }(hjڂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(hnr_irqsh]hnr_irqs}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubj)}(h void *argh](jm)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hargh]harg}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jThjhMhjhhubj)}(hhh]h)}(h&Allocate interrupts from parent domainh]h&Allocate interrupts from parent domain}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjQhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjljjljjjuh1jOhhhjhNhNubj)}(h**Parameters** ``struct irq_domain *domain`` Domain below which interrupts must be allocated ``unsigned int irq_base`` Base IRQ number ``unsigned int nr_irqs`` Number of IRQs to allocate ``void *arg`` Allocation data (arch/domain specific)h](h)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjpubj))}(hhh](j.)}(hN``struct irq_domain *domain`` Domain below which interrupts must be allocated h](j4)}(h``struct irq_domain *domain``h]jw)}(hjh]hstruct irq_domain *domain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjubjN)}(hhh]h)}(h/Domain below which interrupts must be allocatedh]h/Domain below which interrupts must be allocated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhMhjubj.)}(h*``unsigned int irq_base`` Base IRQ number h](j4)}(h``unsigned int irq_base``h]jw)}(hj΃h]hunsigned int irq_base}(hjЃhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj̃ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjȃubjN)}(hhh]h)}(hBase IRQ numberh]hBase IRQ number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jMhjȃubeh}(h]h ]h"]h$]h&]uh1j-hjhMhjubj.)}(h4``unsigned int nr_irqs`` Number of IRQs to allocate h](j4)}(h``unsigned int nr_irqs``h]jw)}(hjh]hunsigned int nr_irqs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjubjN)}(hhh]h)}(hNumber of IRQs to allocateh]hNumber of IRQs to allocate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhMhjubj.)}(h4``void *arg`` Allocation data (arch/domain specific)h](j4)}(h ``void *arg``h]jw)}(hj@h]h void *arg}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj>ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj:ubjN)}(hhh]h)}(h&Allocation data (arch/domain specific)h]h&Allocation data (arch/domain specific)}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjVubah}(h]h ]h"]h$]h&]uh1jMhj:ubeh}(h]h ]h"]h$]h&]uh1j-hjUhMhjubeh}(h]h ]h"]h$]h&]uh1j(hjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK(irq_domain_free_irqs_parent (C function)c.irq_domain_free_irqs_parenthNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hivoid irq_domain_free_irqs_parent (struct irq_domain *domain, unsigned int irq_base, unsigned int nr_irqs)h]j[)}(hhvoid irq_domain_free_irqs_parent(struct irq_domain *domain, unsigned int irq_base, unsigned int nr_irqs)h](jm)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjhhhjhMubj)}(hirq_domain_free_irqs_parenth]j)}(hirq_domain_free_irqs_parenth]hirq_domain_free_irqs_parent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj)}(hH(struct irq_domain *domain, unsigned int irq_base, unsigned int nr_irqs)h](j)}(hstruct irq_domain *domainh](ja)}(hjdh]hstruct}(hjׄhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjӄubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjӄubh)}(hhh]j)}(h irq_domainh]h irq_domain}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjsbc.irq_domain_free_irqs_parentasbuh1hhjӄubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjӄubj)}(hjh]h*}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӄubj)}(hdomainh]hdomain}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӄubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjτubj)}(hunsigned int irq_baseh](jm)}(hunsignedh]hunsigned}(hjIhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjEubjs)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjEubjm)}(hinth]hint}(hjehhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjEubjs)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjEubj)}(hirq_baseh]hirq_base}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjτubj)}(hunsigned int nr_irqsh](jm)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubjm)}(hinth]hint}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjubjs)}(h h]h }(hjąhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(hnr_irqsh]hnr_irqs}(hj҅hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjτubeh}(h]h ]h"]h$]h&]jjuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jThjhMhjhhubj)}(hhh]h)}(h"Free interrupts from parent domainh]h"Free interrupts from parent domain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jOhhhjhNhNubj)}(h**Parameters** ``struct irq_domain *domain`` Domain below which interrupts must be freed ``unsigned int irq_base`` Base IRQ number ``unsigned int nr_irqs`` Number of IRQs to freeh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjubj))}(hhh](j.)}(hJ``struct irq_domain *domain`` Domain below which interrupts must be freed h](j4)}(h``struct irq_domain *domain``h]jw)}(hj=h]hstruct irq_domain *domain}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhj;ubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhj7ubjN)}(hhh]h)}(h+Domain below which interrupts must be freedh]h+Domain below which interrupts must be freed}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhMhjSubah}(h]h ]h"]h$]h&]uh1jMhj7ubeh}(h]h ]h"]h$]h&]uh1j-hjRhMhj4ubj.)}(h*``unsigned int irq_base`` Base IRQ number h](j4)}(h``unsigned int irq_base``h]jw)}(hjvh]hunsigned int irq_base}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjtubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjpubjN)}(hhh]h)}(hBase IRQ numberh]hBase IRQ number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jMhjpubeh}(h]h ]h"]h$]h&]uh1j-hjhMhj4ubj.)}(h/``unsigned int nr_irqs`` Number of IRQs to freeh](j4)}(h``unsigned int nr_irqs``h]jw)}(hjh]hunsigned int nr_irqs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjubjN)}(hhh]h)}(hNumber of IRQs to freeh]hNumber of IRQs to free}(hjȆhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:310: ./kernel/irq/irqdomain.chMhjņubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjĆhMhj4ubeh}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h](structures-and-public-functions-providedah ]h"](structures and public functions providedah$]h&]uh1hhhhhhhhM/ubh)}(hhh](h)}(hInternal Functions Providedh]hInternal Functions Provided}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM:ubh)}(hPThis chapter contains the autogenerated documentation of the internal functions.h]hPThis chapter contains the autogenerated documentation of the internal functions.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM<hjhhubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK$irq_domain_activate_irq (C function)c.irq_domain_activate_irqhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(hEint irq_domain_activate_irq (struct irq_data *irq_data, bool reserve)h]j[)}(hDint irq_domain_activate_irq(struct irq_data *irq_data, bool reserve)h](jm)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhj,hhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:319: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj,hhhj>hMubj)}(hirq_domain_activate_irqh]j)}(hirq_domain_activate_irqh]hirq_domain_activate_irq}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ](jjeh"]h$]h&]jjuh1jhj,hhhj>hMubj)}(h)(struct irq_data *irq_data, bool reserve)h](j)}(hstruct irq_data *irq_datah](ja)}(hjdh]hstruct}(hjmhhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjiubjs)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjiubh)}(hhh]j)}(hirq_datah]hirq_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjSsbc.irq_domain_activate_irqasbuh1hhjiubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjiubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hirq_datah]hirq_data}(hjƇhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubj)}(h bool reserveh](jm)}(hjxh]hbool}(hj߇hhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjۇubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjۇubj)}(hreserveh]hreserve}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjۇubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjeubeh}(h]h ]h"]h$]h&]jjuh1jhj,hhhj>hMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhj(hhhj>hMubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1jThj>hMhj%hhubj)}(hhh]h)}(h;Call domain_ops->activate recursively to activate interrupth]h;Call domain_ops->activate recursively to activate interrupt}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:319: ./kernel/irq/irqdomain.chMhj!hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj>hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj<jj<jjjuh1jOhhhjhNhNubj)}(hXI**Parameters** ``struct irq_data *irq_data`` Outermost irq_data associated with interrupt ``bool reserve`` If set only reserve an interrupt vector instead of assigning one **Description** This is the second step to call domain_ops->activate to program interrupt controllers, so the interrupt could actually get delivered.h](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:319: ./kernel/irq/irqdomain.chMhj@ubj))}(hhh](j.)}(hK``struct irq_data *irq_data`` Outermost irq_data associated with interrupt h](j4)}(h``struct irq_data *irq_data``h]jw)}(hjeh]hstruct irq_data *irq_data}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjcubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:319: ./kernel/irq/irqdomain.chMhj_ubjN)}(hhh]h)}(h,Outermost irq_data associated with interrupth]h,Outermost irq_data associated with interrupt}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhMhj{ubah}(h]h ]h"]h$]h&]uh1jMhj_ubeh}(h]h ]h"]h$]h&]uh1j-hjzhMhj\ubj.)}(hR``bool reserve`` If set only reserve an interrupt vector instead of assigning one h](j4)}(h``bool reserve``h]jw)}(hjh]h bool reserve}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:319: ./kernel/irq/irqdomain.chMhjubjN)}(hhh]h)}(h@If set only reserve an interrupt vector instead of assigning oneh]h@If set only reserve an interrupt vector instead of assigning one}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hjhMhj\ubeh}(h]h ]h"]h$]h&]uh1j(hj@ubh)}(h**Description**h]j)}(hjوh]h Description}(hjۈhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj׈ubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:319: ./kernel/irq/irqdomain.chMhj@ubh)}(hThis is the second step to call domain_ops->activate to program interrupt controllers, so the interrupt could actually get delivered.h]hThis is the second step to call domain_ops->activate to program interrupt controllers, so the interrupt could actually get delivered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:319: ./kernel/irq/irqdomain.chMhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj?)}(hhh]h}(h]h ]h"]h$]h&]entries](jK&irq_domain_deactivate_irq (C function)c.irq_domain_deactivate_irqhNtauh1j>hjhhhNhNubjP)}(hhh](jU)}(h:void irq_domain_deactivate_irq (struct irq_data *irq_data)h]j[)}(h9void irq_domain_deactivate_irq(struct irq_data *irq_data)h](jm)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jyah"]h$]h&]uh1jlhjhhh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:319: ./kernel/irq/irqdomain.chMubjs)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjhhhj,hMubj)}(hirq_domain_deactivate_irqh]j)}(hirq_domain_deactivate_irqh]hirq_domain_deactivate_irq}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj,hMubj)}(h(struct irq_data *irq_data)h]j)}(hstruct irq_data *irq_datah](ja)}(hjdh]hstruct}(hj[hhhNhNubah}(h]h ]jmah"]h$]h&]uh1j`hjWubjs)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjWubh)}(hhh]j)}(hirq_datah]hirq_data}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{modnameN classnameNjj)}j]j)}jjAsbc.irq_domain_deactivate_irqasbuh1hhjWubjs)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjWubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hirq_datah]hirq_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1jhjSubah}(h]h ]h"]h$]h&]jjuh1jhjhhhj,hMubeh}(h]h ]h"]h$]h&]jjjuh1jZjjhjhhhj,hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jThj,hMhjhhubj)}(hhh]h)}(h?Call domain_ops->deactivate recursively to deactivate interrupth]h?Call domain_ops->deactivate recursively to deactivate interrupt}(hjމhhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:319: ./kernel/irq/irqdomain.chMhjۉhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj,hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jOhhhjhNhNubj)}(h**Parameters** ``struct irq_data *irq_data`` outermost irq_data associated with interrupt **Description** It calls domain_ops->deactivate to program interrupt controllers to disable interrupt delivery.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:319: ./kernel/irq/irqdomain.chMhjubj))}(hhh]j.)}(hK``struct irq_data *irq_data`` outermost irq_data associated with interrupt h](j4)}(h``struct irq_data *irq_data``h]jw)}(hjh]hstruct irq_data *irq_data}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1j3h_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:319: ./kernel/irq/irqdomain.chMhjubjN)}(hhh]h)}(h,outermost irq_data associated with interrupth]h,outermost irq_data associated with interrupt}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jMhjubeh}(h]h ]h"]h$]h&]uh1j-hj4hMhjubah}(h]h ]h"]h$]h&]uh1j(hjubh)}(h**Description**h]j)}(hjZh]h Description}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:319: ./kernel/irq/irqdomain.chMhjubh)}(h_It calls domain_ops->deactivate to program interrupt controllers to disable interrupt delivery.h]h_It calls domain_ops->deactivate to program interrupt controllers to disable interrupt delivery.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh_/var/lib/git/docbuild/linux/Documentation/core-api/irq/irq-domain:319: ./kernel/irq/irqdomain.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]internal-functions-providedah ]h"]internal functions providedah$]h&]uh1hhhhhhhhM:ubeh}(h]/the-irq-domain-interrupt-number-mapping-libraryah ]h"]/the irq_domain interrupt number mapping libraryah$]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_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehʌ _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}(jjjljijjjjj1j.jtjqjj jjjjjjjjjju nametypes}(jjljjj1jtjjjjjjuh}(jhjij/jjojjj.jjqj4j jwjjjjjjjjjMjVj j$ j j j@jEjjjejjjjjRjWj!j!j#j#j(j(j+j+j/j/j31j81j 3j3j4j4j8j8j:j:j^<jc<j=j=j?j?jiBjnBjCjCjwFj|FjKjKjOjOj.Tj3TjXjXj\j#\ju_jz_jbjbj5dj:djfjfjhjhjljljqjqjbtjgtjvjvj{j{j}j}jjjjjjjjj#j(jju 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.