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