/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (C) 2021 Western Digital Corporation or its affiliates. * Copyright (C) 2022 Ventana Micro Systems Inc. */ #ifndef _IRQ_RISCV_APLIC_MAIN_H #define _IRQ_RISCV_APLIC_MAIN_H #include <linux/device.h> #include <linux/io.h> #include <linux/irq.h> #include <linux/irqdomain.h> #include <linux/fwnode.h> #define APLIC_DEFAULT_PRIORITY 1 struct aplic_msicfg { phys_addr_t base_ppn; u32 hhxs; u32 hhxw; u32 lhxs; u32 lhxw; }; struct aplic_priv { struct device *dev; u32 gsi_base; u32 nr_irqs; u32 nr_idcs; void __iomem *regs; struct aplic_msicfg msicfg; }; void aplic_irq_unmask(struct irq_data *d); void aplic_irq_mask(struct irq_data *d); int aplic_irq_set_type(struct irq_data *d, unsigned int type); int aplic_irqdomain_translate(struct irq_fwspec *fwspec, u32 gsi_base, unsigned long *hwirq, unsigned int *type); void aplic_init_hw_global(struct aplic_priv *priv, bool msi_mode); int aplic_setup_priv(struct aplic_priv *priv, struct device *dev, void __iomem *regs); int aplic_direct_setup(struct device *dev, void __iomem *regs); #ifdef CONFIG_RISCV_APLIC_MSI int aplic_msi_setup(struct device *dev, void __iomem *regs); #else static inline int aplic_msi_setup(struct device *dev, void __iomem *regs) { return -ENODEV; } #endif #endif