18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef _ASM_IRQDOMAIN_H 38c2ecf20Sopenharmony_ci#define _ASM_IRQDOMAIN_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#include <linux/irqdomain.h> 68c2ecf20Sopenharmony_ci#include <asm/hw_irq.h> 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#ifdef CONFIG_X86_LOCAL_APIC 98c2ecf20Sopenharmony_cienum { 108c2ecf20Sopenharmony_ci /* Allocate contiguous CPU vectors */ 118c2ecf20Sopenharmony_ci X86_IRQ_ALLOC_CONTIGUOUS_VECTORS = 0x1, 128c2ecf20Sopenharmony_ci X86_IRQ_ALLOC_LEGACY = 0x2, 138c2ecf20Sopenharmony_ci}; 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ciextern struct irq_domain *x86_vector_domain; 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ciextern void init_irq_alloc_info(struct irq_alloc_info *info, 188c2ecf20Sopenharmony_ci const struct cpumask *mask); 198c2ecf20Sopenharmony_ciextern void copy_irq_alloc_info(struct irq_alloc_info *dst, 208c2ecf20Sopenharmony_ci struct irq_alloc_info *src); 218c2ecf20Sopenharmony_ci#endif /* CONFIG_X86_LOCAL_APIC */ 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci#ifdef CONFIG_X86_IO_APIC 248c2ecf20Sopenharmony_cistruct device_node; 258c2ecf20Sopenharmony_cistruct irq_data; 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_cienum ioapic_domain_type { 288c2ecf20Sopenharmony_ci IOAPIC_DOMAIN_INVALID, 298c2ecf20Sopenharmony_ci IOAPIC_DOMAIN_LEGACY, 308c2ecf20Sopenharmony_ci IOAPIC_DOMAIN_STRICT, 318c2ecf20Sopenharmony_ci IOAPIC_DOMAIN_DYNAMIC, 328c2ecf20Sopenharmony_ci}; 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_cistruct ioapic_domain_cfg { 358c2ecf20Sopenharmony_ci enum ioapic_domain_type type; 368c2ecf20Sopenharmony_ci const struct irq_domain_ops *ops; 378c2ecf20Sopenharmony_ci struct device_node *dev; 388c2ecf20Sopenharmony_ci}; 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ciextern const struct irq_domain_ops mp_ioapic_irqdomain_ops; 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ciextern int mp_irqdomain_alloc(struct irq_domain *domain, unsigned int virq, 438c2ecf20Sopenharmony_ci unsigned int nr_irqs, void *arg); 448c2ecf20Sopenharmony_ciextern void mp_irqdomain_free(struct irq_domain *domain, unsigned int virq, 458c2ecf20Sopenharmony_ci unsigned int nr_irqs); 468c2ecf20Sopenharmony_ciextern int mp_irqdomain_activate(struct irq_domain *domain, 478c2ecf20Sopenharmony_ci struct irq_data *irq_data, bool reserve); 488c2ecf20Sopenharmony_ciextern void mp_irqdomain_deactivate(struct irq_domain *domain, 498c2ecf20Sopenharmony_ci struct irq_data *irq_data); 508c2ecf20Sopenharmony_ciextern int mp_irqdomain_ioapic_idx(struct irq_domain *domain); 518c2ecf20Sopenharmony_ci#endif /* CONFIG_X86_IO_APIC */ 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci#ifdef CONFIG_PCI_MSI 548c2ecf20Sopenharmony_civoid x86_create_pci_msi_domain(void); 558c2ecf20Sopenharmony_cistruct irq_domain *native_create_pci_msi_domain(void); 568c2ecf20Sopenharmony_ciextern struct irq_domain *x86_pci_msi_default_domain; 578c2ecf20Sopenharmony_ci#else 588c2ecf20Sopenharmony_cistatic inline void x86_create_pci_msi_domain(void) { } 598c2ecf20Sopenharmony_ci#define native_create_pci_msi_domain NULL 608c2ecf20Sopenharmony_ci#define x86_pci_msi_default_domain NULL 618c2ecf20Sopenharmony_ci#endif 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci#endif 64