Line data Source code
1 0 : /* shared_irq - Shared interrupt driver */ 2 : 3 : /* 4 : * Copyright (c) 2015 - 2023 Intel corporation 5 : * 6 : * SPDX-License-Identifier: Apache-2.0 7 : */ 8 : 9 : #ifndef ZEPHYR_INCLUDE_SHARED_IRQ_H_ 10 : #define ZEPHYR_INCLUDE_SHARED_IRQ_H_ 11 : 12 : #include <zephyr/device.h> 13 : 14 : #ifdef __cplusplus 15 : extern "C" { 16 : #endif 17 : 18 0 : typedef int (*isr_t)(const struct device *dev, unsigned int irq_number); 19 : 20 : /* driver API definition */ 21 0 : typedef int (*shared_irq_register_t)(const struct device *dev, 22 : isr_t isr_func, 23 : const struct device *isr_dev); 24 0 : typedef int (*shared_irq_enable_t)(const struct device *dev, 25 : const struct device *isr_dev); 26 0 : typedef int (*shared_irq_disable_t)(const struct device *dev, 27 : const struct device *isr_dev); 28 : 29 0 : __subsystem struct shared_irq_driver_api { 30 0 : shared_irq_register_t isr_register; 31 0 : shared_irq_enable_t enable; 32 0 : shared_irq_disable_t disable; 33 : }; 34 : 35 : /** 36 : * @brief Register a device ISR 37 : * @param dev Pointer to device structure for SHARED_IRQ driver instance. 38 : * @param isr_func Pointer to the ISR function for the device. 39 : * @param isr_dev Pointer to the device that will service the interrupt. 40 : */ 41 1 : static inline int shared_irq_isr_register(const struct device *dev, 42 : isr_t isr_func, 43 : const struct device *isr_dev) 44 : { 45 : const struct shared_irq_driver_api *api = 46 : (const struct shared_irq_driver_api *)dev->api; 47 : 48 : return api->isr_register(dev, isr_func, isr_dev); 49 : } 50 : 51 : /** 52 : * @brief Enable ISR for device 53 : * @param dev Pointer to device structure for SHARED_IRQ driver instance. 54 : * @param isr_dev Pointer to the device that will service the interrupt. 55 : */ 56 1 : static inline int shared_irq_enable(const struct device *dev, 57 : const struct device *isr_dev) 58 : { 59 : const struct shared_irq_driver_api *api = 60 : (const struct shared_irq_driver_api *)dev->api; 61 : 62 : return api->enable(dev, isr_dev); 63 : } 64 : 65 : /** 66 : * @brief Disable ISR for device 67 : * @param dev Pointer to device structure for SHARED_IRQ driver instance. 68 : * @param isr_dev Pointer to the device that will service the interrupt. 69 : */ 70 1 : static inline int shared_irq_disable(const struct device *dev, 71 : const struct device *isr_dev) 72 : { 73 : const struct shared_irq_driver_api *api = 74 : (const struct shared_irq_driver_api *)dev->api; 75 : 76 : return api->disable(dev, isr_dev); 77 : } 78 : 79 : #ifdef __cplusplus 80 : } 81 : #endif 82 : 83 : #endif /* ZEPHYR_INCLUDE_SHARED_IRQ_H_ */