libmetal
Loading...
Searching...
No Matches
irq_controller.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7/*
8 * @file irq.h
9 * @brief Interrupt handling primitives for libmetal.
10 */
11
12#ifndef __METAL_IRQ_CONTROLLER__H__
13#define __METAL_IRQ_CONTROLLER__H__
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
23#include <metal/irq.h>
24#include <metal/list.h>
25#include <stdlib.h>
26
28#define METAL_IRQ_ANY (-1)
29
33#define METAL_IRQ_DISABLE 0U
34#define METAL_IRQ_ENABLE 1U
35
37
44typedef void (*metal_irq_set_enable) (struct metal_irq_controller *irq_cntr,
45 int irq, unsigned int enable);
46
55typedef int (*metal_cntr_irq_register) (struct metal_irq_controller *irq_cntr,
56 int irq, metal_irq_handler hd,
57 void *arg);
58
60struct metal_irq {
62 void *arg;
63};
64
70 int irq_num;
71 void *arg;
77 struct metal_irq *irqs;
78};
79
80#define METAL_IRQ_CONTROLLER_DECLARE(_irq_controller, \
81 _irq_base, _irq_num, \
82 _arg, \
83 _irq_set_enable, \
84 _irq_register, \
85 _irqs) \
86 struct metal_irq_controller _irq_controller = { \
87 .irq_base = _irq_base, \
88 .irq_num = _irq_num, \
89 .arg = _arg, \
90 .irq_set_enable = _irq_set_enable, \
91 .irq_register = _irq_register, \
92 .irqs = _irqs,\
93 }
94
108
118static inline
119int metal_irq_handle(struct metal_irq *irq_data, int irq)
120{
121 if (irq_data && irq_data->hd) {
122 return irq_data->hd(irq, irq_data->arg);
123 } else {
125 }
126}
127
130#ifdef __cplusplus
131}
132#endif
133
134#endif /* __METAL_IRQ__H__ */
void(* metal_irq_set_enable)(struct metal_irq_controller *irq_cntr, int irq, unsigned int enable)
type of interrupt controller to set irq enable
Definition: irq_controller.h:44
int(* metal_cntr_irq_register)(struct metal_irq_controller *irq_cntr, int irq, metal_irq_handler hd, void *arg)
type of controller specific registering interrupt function
Definition: irq_controller.h:55
#define METAL_IRQ_NOT_HANDLED
Definition: irq.h:27
int(* metal_irq_handler)(int irq, void *arg)
type of interrupt handler
Definition: irq.h:36
static int metal_irq_handle(struct metal_irq *irq_data, int irq)
metal_irq_handle
Definition: irq_controller.h:119
int metal_irq_register_controller(struct metal_irq_controller *cntr)
metal_irq_register_controller
Definition: irq.c:50
Definition: irq_controller.h:66
metal_cntr_irq_register irq_register
Definition: irq_controller.h:73
struct metal_list node
Definition: irq_controller.h:76
metal_irq_set_enable irq_set_enable
Definition: irq_controller.h:72
void * arg
Definition: irq_controller.h:71
struct metal_irq * irqs
Definition: irq_controller.h:77
int irq_num
Definition: irq_controller.h:70
int irq_base
Definition: irq_controller.h:67
Definition: irq_controller.h:60
void * arg
Definition: irq_controller.h:62
metal_irq_handler hd
Definition: irq_controller.h:61
Definition: list.h:25