Line data Source code
1 1 : /* 2 : * Copyright (c) 2022 Carlo Caione <ccaione@baylibre.com> 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : /** 8 : * @file 9 : * @brief Driver for Platform Level Interrupt Controller (PLIC) 10 : */ 11 : 12 : #ifndef ZEPHYR_INCLUDE_DRIVERS_RISCV_PLIC_H_ 13 : #define ZEPHYR_INCLUDE_DRIVERS_RISCV_PLIC_H_ 14 : 15 : #include <zephyr/device.h> 16 : 17 : /** 18 : * @brief Enable interrupt 19 : * 20 : * @param irq Multi-level encoded interrupt ID 21 : */ 22 1 : void riscv_plic_irq_enable(uint32_t irq); 23 : 24 : /** 25 : * @brief Disable interrupt 26 : * 27 : * @param irq Multi-level encoded interrupt ID 28 : */ 29 1 : void riscv_plic_irq_disable(uint32_t irq); 30 : 31 : /** 32 : * @brief Check if an interrupt is enabled 33 : * 34 : * @param irq Multi-level encoded interrupt ID 35 : * @return Returns true if interrupt is enabled, false otherwise 36 : */ 37 1 : int riscv_plic_irq_is_enabled(uint32_t irq); 38 : 39 : /** 40 : * @brief Set interrupt priority 41 : * 42 : * @param irq Multi-level encoded interrupt ID 43 : * @param prio interrupt priority 44 : */ 45 1 : void riscv_plic_set_priority(uint32_t irq, uint32_t prio); 46 : 47 : /** 48 : * @brief Set IRQ affinity. 49 : * 50 : * @param irq IRQ line. 51 : * @param cpumask CPU bit mask. 52 : * 53 : * @return 0 if success, negative errno value otherwise 54 : */ 55 1 : int riscv_plic_irq_set_affinity(uint32_t irq, uint32_t cpumask); 56 : 57 : /** 58 : * @brief Set interrupt as pending 59 : * 60 : * @param irq Multi-level encoded interrupt ID 61 : */ 62 1 : void riscv_plic_irq_set_pending(uint32_t irq); 63 : 64 : /** 65 : * @brief Get active interrupt ID 66 : * 67 : * @note Should be called with interrupt locked 68 : * 69 : * @return Returns the ID of an active interrupt 70 : */ 71 1 : unsigned int riscv_plic_get_irq(void); 72 : 73 : /** 74 : * @brief Get active interrupt controller device 75 : * 76 : * @note Should be called with interrupt locked 77 : * 78 : * @return Returns device pointer of the active interrupt device 79 : */ 80 1 : const struct device *riscv_plic_get_dev(void); 81 : 82 : #endif /* ZEPHYR_INCLUDE_DRIVERS_RISCV_PLIC_H_ */