1.. include:: ../../disclaimer-zh_CN.rst 2 3:Original: Documentation/core-api/irq/irq-domain.rst 4 5:������: 6 7 ��������� Yanteng Si <siyanteng@loongson.cn> 8 ��������� Binbin Zhou <zhoubinbin@loongson.cn> 9 10.. _cn_irq-domain.rst: 11 12======================= 13irq_domain ������������������ 14======================= 15 16������Linux���������������������������������������������������������������������IRQ��������������������������� 17��������������� 18��������������������������������������������������������������������������������������������������������������������� 19������������������������������������������Linux IRQ������������������������ 20 21������������������irqchips���������������������������������������������������������GPIO������������������ 22���������������������������������������������������������������irqchips������������������������������������������ 23������������������������IRQ������������������������������������ 24 25���������������������������������������������������������������������������������������������IRQ������������������ 26������������������IRQ������������������������������������������CPU������������������������������������������ 27��������������������������������������� 28 29������������������������������������������������������������������������������������irq������������Linux IRQ 30������������ 31 32irq_alloc_desc*() ��� irq_free_desc*() API ������������irq��������������������������� 33������������������������������IRQ(hwirq)������Linux IRQ������������������������������������ 34 35irq_domain ������ irq_alloc_desc*() API ��������������������� hwirq ��� IRQ ������ 36������������������ ������������������������������������������������������������������������������������������ 37irq_domain������������������ 38 39irq_domain������������������������irq_fwspec������������hwirq��������������������������������� 40Device Tree���ACPI GSI���������������������������������������������������IRQ������������������ 41 42irq_domain��������� 43================ 44 45������������������������������������������������������������������irq_domain��������� 46irq_domain_add_*() ��� irq_domain_create_*()������������������������������������������ 47��������������������������������������������������� ������������������������������������irq_domain������������ 48���������������������������������������������irq_domain_ops������������ 49 50������������������������irq_domain������������������������������������hwirq���IRQ��������������������� 51������������irq_create_mapping()������������������irq_domain��������������������� 52irq_domain���������hwirq������������������ ������hwirq������������������������������������������ 53������������Linux irq_desc������������hwirq������������������������.map()��������������������� 54��������������������������������������������������� 55 56��������������������������������������������������������������������� 57 58- irq_resolve_mapping()������������������������������hwirq������irq_desc��������������� 59 ���������������������������NULL��� 60 61- irq_find_mapping()������������������hwirq���Linux IRQ���������������������������������0��� 62 63- irq_linear_revmap()������irq_find_mapping()������������������������ 64 65- generic_handle_domain_irq()���������������������hwirq��������������������� 66 67������������irq������������������������������RCU������������������������������������ 68 69���������irq_find_mapping()������������������������������irq_create_mapping()��������� 70��������������������������������� 71 72���������������������Linux���IRQ������irq_data������������������������������������hwirq��������� 73������irq_chip������������������������������������irq_data->hwirq������������ 74 75irq_domain��������������� 76==================== 77 78���hwirq���Linux irq��������������������������������������������������������������������������������� 79������������������������������������������������ ������������������������������������������ 80 81������������ 82-------- 83 84:: 85 86 irq_domain_add_linear() 87 irq_domain_create_linear() 88 89���������������������������������������������������������������hwirq��������������� ���������hwirq��������� 90������������hwirq������������irq_desc���������irq��������������������� 91 92������������hwirq������������������������������������������������������������������������~<256������ ������ 93������������������������������������IRQ������������irq_descs���������������������IRQ��� ��������������� 94���������������������hwirq������ 95 96irq_domain_add_linear()���irq_domain_create_linear()��������������������������� 97���������������������������--������������������Open Firmware��������� 'struct device_node' ��� 98������������������������������������ 'struct fwnode_handle' ��� 99 100��������������������������������������� 101 102������������ 103-------- 104 105:: 106 107 irq_domain_add_tree() 108 irq_domain_create_tree() 109 110irq_domain������������hwirq������Linux IRQ���radix������������������ ���������hwirq��������������� 111������irq_desc������������hwirq���������radix������������������ 112 113������hwirq���������������������������������������������������������������������������������������������������hwirq 114��������������������� ������������hwirq���IRQ��������������������������������������������� 115 116irq_domain_add_tree()���irq_domain_create_tree()��������������������������������������� 117���������������������������������������Open Firmware��������� 'struct device_node' ������������������ 118������������������������ 'struct fwnode_handle' ��� 119 120������������������������������������������ 121 122��������� 123------ 124 125:: 126 127 irq_domain_add_nomap() 128 129���������������hwirq������������������������������������������������������������ ������������������������������ 130Linux IRQ������������������������������������������������������ ������irq_create_direct_mapping() 131���������������Linux IRQ���������������.map()���������������������������������Linux IRQ��������������������� 132 133���������������������������������������������������������CONFIG_IRQ_DOMAIN_NOMAP��������������� 134������������������API��������������� 135 136������������������ 137------------ 138 139:: 140 141 irq_domain_add_simple() 142 irq_domain_add_legacy() 143 irq_domain_create_simple() 144 irq_domain_create_legacy() 145 146������������������������ hwirqs ������������������ irq_descs ��������������������������������� ������������ 147������������������������������������������������������������������ ������������������������������������������������������ 148������������IRQ���������������#define������������������������������struct��������������� ��������������������� 149������������������Linux IRQ��������������������������������� 150 151���������������\*_legacy()��������������������������������������������������������������������������������� 152���������������������������������\*_simple()������������������������������������������������������������������ 153 154������������������������������������������������������������IRQ���������������������������������hwirq������������ 155���������������������������IRQ��������������������� ������������������������������������IRQ��������������������������� 156���hwirq������������irq_desc������������������������������ 157 158������������������������������IRQ��������������������������������������� ���������ISA��������������������������������� 159������Linux IRQ 0-15������������������ISA���������������������������������IRQ������ 160 161������������������������������������������������irq_domain_add_simple()��� 162irq_domain_create_simple()������������������������IRQ������������������������������������������������ 163���������������������������������������������������������������������������IRQ��������������� ��������������������������� 164��������������������������������������������������������� irq_domain_add_linear() ��� 165irq_domain_create_linear()��������������� *no* irq ������������������������ 166 167������������������������������������irqchip������������������������������������IRQ��������� 168 169��������������������������������������������������������������������������������������������������������������������������� 170irq_find_mapping()������������irq_create_mapping()������������������������������������������ 171���������������IRQ��������������� 172 173irq_domain_add_simple()���irq_domain_create_simple()������ 174irq_domain_add_legacy()���irq_domain_create_legacy()������������������������������ 175������������������������--������������Open Firmware��������� 'struct device_node' ������������ 176������������������������������ 'struct fwnode_handle' ��� 177 178IRQ��������������� 179------------- 180 181������������������������������������������������������������������������������������������������CPU��� 182������������������x86��������������������������������������� 183:: 184 185 Device --> IOAPIC -> Interrupt remapping Controller -> Local APIC -> CPU 186 187������������������������������������: 188 1891) IOAPIC ��������� 1902) ������������������������ 1913) Local APIC ��������� 192 193��������������������������������������������������������������������������������������������������������������������� 194���irq_domain���������������������������irq_domain������������������������ 195 196���������irq_domain���������������������������������irq_domain������������������CPU��� 197irq_domain��������������������������������������������������������������������������� 198:: 199 200 CPU Vector irq_domain (root irq_domain to manage CPU vectors) 201 ^ 202 | 203 Interrupt Remapping irq_domain (manage irq_remapping entries) 204 ^ 205 | 206 IOAPIC irq_domain (manage IOAPIC delivery entries/pins) 207 208������irq_domain������������������������������������: 209 2101) irq_domain_alloc_irqs(): ������IRQ��������������������������������������������������������������������� 2112) irq_domain_free_irqs(): ������IRQ������������������������������������������������������������ 2123) irq_domain_activate_irq(): ��������������������������������������������� 2134) irq_domain_deactivate_irq(): ��������������������������������������������������� 214 215������������irq_domain������������������������������������: 216 2171) ������������������ 'parent' ������������irq_domain���������������������������irq_domain������������������ 2182) ������������������ 'parent_data' ������������irq_data���������������������������������������irq_data��� 219 ������irq_domain���������������irq_data������������irq_domain���������������irq������ 2203) ������������������������irq_domain_ops������������������������������������irq_domain��������� 221 222���������������irq_domain���������irq_data������������������������������������������������������irq_domain��� 223���������������������IRQ������������irq_domain������������irq_data������������������������������������������������ 224������(������������)���irq_chip������������������������irq_chip���������������������������irq_data������������ 225���������irq_chip���������������������������������irq_chip��������������������������������������� 226 227������������������irq_chip������������������������������������������������������������������������������������������������ 228irq_chip������������������������������������������������������������������ 229 230������������������������������������������irq_domain������������������������������������������: 231 2321) ������ irq_domain_ops.alloc ��� irq_domain_ops.free 2332) ������������������ irq_domain_ops.activate ��� irq_domain_ops.deactivate. 2343) ������������������������irq_chip��������������������������������� 2354) ���������������irq_domain_ops.map���irq_domain_ops.unmap������������������������ 236 irq_domain������������������ 237 238irq_domain���������������������x86������������������������������������������������ARM���ARM64������ 239 240������������ 241======== 242 243������CONFIG_GENERIC_IRQ_DEBUGFS���������IRQ���������������������������������������debugfs������������������ 244