diff options
Diffstat (limited to 'core/riscv-rv32i/irq_chip.h')
-rw-r--r-- | core/riscv-rv32i/irq_chip.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/core/riscv-rv32i/irq_chip.h b/core/riscv-rv32i/irq_chip.h new file mode 100644 index 0000000000..916de4ed57 --- /dev/null +++ b/core/riscv-rv32i/irq_chip.h @@ -0,0 +1,59 @@ +/* Copyright 2019 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Chip-specific part of the IRQ handling. + */ + +#ifndef __CROS_EC_IRQ_CHIP_H +#define __CROS_EC_IRQ_CHIP_H + +/** + * Enable an IRQ in the chip interrupt controller. + * + * @param irq interrupt request index. + * @return CPU interrupt number to enable if any, -1 else. + */ +int chip_enable_irq(int irq); + +/** + * Disable an IRQ in the chip interrupt controller. + * + * @param irq interrupt request index. + * @return CPU interrupt number to disable if any, -1 else. + */ +int chip_disable_irq(int irq); + +/** + * Clear a pending IRQ in the chip interrupt controller. + * + * @param irq interrupt request index. + * @return CPU interrupt number to clear if any, -1 else. + * + * Note that most interrupts can be removed from the pending state simply by + * handling whatever caused the interrupt in the first place. This only needs + * to be called if an interrupt handler disables itself without clearing the + * reason for the interrupt, and then the interrupt is re-enabled from a + * different context. + */ +int chip_clear_pending_irq(int irq); + +/** + * Software-trigger an IRQ in the chip interrupt controller. + * + * @param irq interrupt request index. + * @return CPU interrupt number to trigger if any, -1 else. + */ +int chip_trigger_irq(int irq); + +/** + * Initialize chip interrupt controller. + */ +void chip_init_irqs(void); + +/** + * Return interrupt number of software interrupt. + */ +int get_sw_int(void); + +#endif /* __CROS_EC_IRQ_CHIP_H */ |