123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- /*
- * Copyright (c) 2017 Intel corporation
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- /**
- * @file
- * @brief Public interface for configuring interrupts
- */
- #ifndef ZEPHYR_INCLUDE_IRQ_NEXTLEVEL_H_
- #define ZEPHYR_INCLUDE_IRQ_NEXTLEVEL_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * @cond INTERNAL_HIDDEN
- *
- * These are for internal use only, so skip these in
- * public documentation.
- */
- typedef void (*irq_next_level_func_t)(const struct device *dev,
- unsigned int irq);
- typedef unsigned int (*irq_next_level_get_state_t)(const struct device *dev);
- typedef void (*irq_next_level_priority_t)(const struct device *dev,
- unsigned int irq, unsigned int prio,
- uint32_t flags);
- typedef int (*irq_next_level_get_line_state_t)(const struct device *dev,
- unsigned int irq);
- struct irq_next_level_api {
- irq_next_level_func_t intr_enable;
- irq_next_level_func_t intr_disable;
- irq_next_level_get_state_t intr_get_state;
- irq_next_level_priority_t intr_set_priority;
- irq_next_level_get_line_state_t intr_get_line_state;
- };
- /**
- * @endcond
- */
- /**
- * @brief Enable an IRQ in the next level.
- *
- * This routine enables interrupts present in the interrupt controller.
- *
- * @param dev Pointer to the device structure for the driver instance.
- * @param irq IRQ to be enabled.
- *
- * @return N/A
- */
- static inline void irq_enable_next_level(const struct device *dev,
- uint32_t irq)
- {
- const struct irq_next_level_api *api =
- (const struct irq_next_level_api *)dev->api;
- api->intr_enable(dev, irq);
- }
- /**
- * @brief Disable an IRQ in the next level.
- *
- * This routine disables interrupts present in the interrupt controller.
- *
- * @param dev Pointer to the device structure for the driver instance.
- * @param irq IRQ to be disabled.
- *
- * @return N/A
- */
- static inline void irq_disable_next_level(const struct device *dev,
- uint32_t irq)
- {
- const struct irq_next_level_api *api =
- (const struct irq_next_level_api *)dev->api;
- api->intr_disable(dev, irq);
- }
- /**
- * @brief Get IRQ enable state.
- *
- * This routine indicates if any interrupts are enabled in the interrupt
- * controller.
- *
- * @param dev Pointer to the device structure for the driver instance.
- *
- * @return interrupt enable state, true or false
- */
- static inline unsigned int irq_is_enabled_next_level(const struct device *dev)
- {
- const struct irq_next_level_api *api =
- (const struct irq_next_level_api *)dev->api;
- return api->intr_get_state(dev);
- }
- /**
- * @brief Set IRQ priority.
- *
- * This routine indicates if any interrupts are enabled in the interrupt
- * controller.
- *
- * @param dev Pointer to the device structure for the driver instance.
- * @param irq IRQ to be disabled.
- * @param prio priority for irq in the interrupt controller.
- * @param flags controller specific flags.
- *
- * @return N/A
- */
- static inline void irq_set_priority_next_level(const struct device *dev,
- uint32_t irq,
- uint32_t prio, uint32_t flags)
- {
- const struct irq_next_level_api *api =
- (const struct irq_next_level_api *)dev->api;
- if (api->intr_set_priority)
- api->intr_set_priority(dev, irq, prio, flags);
- }
- /**
- * @brief Get IRQ line enable state.
- *
- * Query if a particular IRQ line is enabled.
- *
- * @param dev Pointer to the device structure for the driver instance.
- * @param irq IRQ line to be queried.
- *
- * @return interrupt enable state, true or false
- */
- static inline unsigned int irq_line_is_enabled_next_level(const struct device *dev,
- unsigned int irq)
- {
- const struct irq_next_level_api *api =
- (const struct irq_next_level_api *)dev->api;
- return api->intr_get_line_state(dev, irq);
- }
- #ifdef __cplusplus
- }
- #endif
- #endif /* ZEPHYR_INCLUDE_IRQ_NEXTLEVEL_H_ */
|