libmetal
Toggle main menu visibility
Loading...
Searching...
No Matches
lib
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
11
12
#ifndef __METAL_IRQ_CONTROLLER__H__
13
#define __METAL_IRQ_CONTROLLER__H__
14
15
#ifdef __cplusplus
16
extern
"C"
{
17
#endif
18
22
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
36
struct
metal_irq_controller
;
37
44
typedef
void (*
metal_irq_set_enable
) (
struct
metal_irq_controller
*irq_cntr,
45
int
irq,
unsigned
int
enable);
46
55
typedef
int (*
metal_cntr_irq_register
) (
struct
metal_irq_controller
*irq_cntr,
56
int
irq,
metal_irq_handler
hd,
57
void
*
arg
);
58
60
struct
metal_irq
{
61
metal_irq_handler
hd
;
62
void
*
arg
;
63
};
64
66
struct
metal_irq_controller
{
67
int
irq_base
;
70
int
irq_num
;
71
void
*
arg
;
72
metal_irq_set_enable
irq_set_enable
;
73
metal_cntr_irq_register
irq_register
;
76
struct
metal_list
node
;
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
107
int
metal_irq_register_controller
(
struct
metal_irq_controller
*cntr);
108
118
static
inline
119
int
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
{
124
return
METAL_IRQ_NOT_HANDLED
;
125
}
126
}
127
129
130
#ifdef __cplusplus
131
}
132
#endif
133
134
#endif
/* __METAL_IRQ__H__ */
metal_irq_set_enable
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
metal_cntr_irq_register
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
METAL_IRQ_NOT_HANDLED
#define METAL_IRQ_NOT_HANDLED
Definition
irq.h:27
metal_irq_handler
int(* metal_irq_handler)(int irq, void *arg)
type of interrupt handler
Definition
irq.h:36
metal_irq_handle
static int metal_irq_handle(struct metal_irq *irq_data, int irq)
metal_irq_handle
Definition
irq_controller.h:119
metal_irq_register_controller
int metal_irq_register_controller(struct metal_irq_controller *cntr)
metal_irq_register_controller
Definition
irq.c:55
metal_irq_controller
Definition
irq_controller.h:66
metal_irq_controller::irq_register
metal_cntr_irq_register irq_register
Definition
irq_controller.h:73
metal_irq_controller::node
struct metal_list node
Definition
irq_controller.h:76
metal_irq_controller::irq_set_enable
metal_irq_set_enable irq_set_enable
Definition
irq_controller.h:72
metal_irq_controller::arg
void * arg
Definition
irq_controller.h:71
metal_irq_controller::irqs
struct metal_irq * irqs
Definition
irq_controller.h:77
metal_irq_controller::irq_num
int irq_num
Definition
irq_controller.h:70
metal_irq_controller::irq_base
int irq_base
Definition
irq_controller.h:67
metal_irq
Definition
irq_controller.h:60
metal_irq::arg
void * arg
Definition
irq_controller.h:62
metal_irq::hd
metal_irq_handler hd
Definition
irq_controller.h:61
metal_list
Definition
list.h:26
Generated on
for libmetal by
1.17.0