1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2012 Regents of the University of California 4 * Copyright (C) 2017 SiFive 5 */ 6 7 #ifndef _ASM_RISCV_IRQ_H 8 #define _ASM_RISCV_IRQ_H 9 10 #include <linux/interrupt.h> 11 #include <linux/linkage.h> 12 13 #include <asm-generic/irq.h> 14 15 #define INVALID_CONTEXT UINT_MAX 16 17 void riscv_set_intc_hwnode_fn(struct fwnode_handle *(*fn)(void)); 18 19 struct fwnode_handle *riscv_get_intc_hwnode(void); 20 21 #ifdef CONFIG_ACPI 22 23 enum riscv_irqchip_type { 24 ACPI_RISCV_IRQCHIP_INTC = 0x00, 25 ACPI_RISCV_IRQCHIP_IMSIC = 0x01, 26 ACPI_RISCV_IRQCHIP_PLIC = 0x02, 27 ACPI_RISCV_IRQCHIP_APLIC = 0x03, 28 }; 29 30 int riscv_acpi_get_gsi_info(struct fwnode_handle *fwnode, u32 *gsi_base, 31 u32 *id, u32 *nr_irqs, u32 *nr_idcs); 32 struct fwnode_handle *riscv_acpi_get_gsi_domain_id(u32 gsi); 33 unsigned long acpi_rintc_index_to_hartid(u32 index); 34 unsigned long acpi_rintc_ext_parent_to_hartid(unsigned int plic_id, unsigned int ctxt_idx); 35 unsigned int acpi_rintc_get_plic_nr_contexts(unsigned int plic_id); 36 unsigned int acpi_rintc_get_plic_context(unsigned int plic_id, unsigned int ctxt_idx); 37 int __init acpi_rintc_get_imsic_mmio_info(u32 index, struct resource *res); 38 39 #else 40 static inline int riscv_acpi_get_gsi_info(struct fwnode_handle *fwnode, u32 *gsi_base, 41 u32 *id, u32 *nr_irqs, u32 *nr_idcs) 42 { 43 return 0; 44 } 45 46 static inline unsigned long acpi_rintc_index_to_hartid(u32 index) 47 { 48 return INVALID_HARTID; 49 } 50 51 static inline unsigned long acpi_rintc_ext_parent_to_hartid(unsigned int plic_id, 52 unsigned int ctxt_idx) 53 { 54 return INVALID_HARTID; 55 } 56 57 static inline unsigned int acpi_rintc_get_plic_nr_contexts(unsigned int plic_id) 58 { 59 return INVALID_CONTEXT; 60 } 61 62 static inline unsigned int acpi_rintc_get_plic_context(unsigned int plic_id, unsigned int ctxt_idx) 63 { 64 return INVALID_CONTEXT; 65 } 66 67 static inline int __init acpi_rintc_get_imsic_mmio_info(u32 index, struct resource *res) 68 { 69 return 0; 70 } 71 72 #endif /* CONFIG_ACPI */ 73 74 #endif /* _ASM_RISCV_IRQ_H */ 75