1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #ifndef __DAL_IRQ_SERVICE_H__
27 #define __DAL_IRQ_SERVICE_H__
28
29 #include "include/irq_service_interface.h"
30
31 #include "irq_types.h"
32
33 struct irq_service;
34 struct irq_source_info;
35
36 struct irq_source_info_funcs {
37 bool (*set)(
38 struct irq_service *irq_service,
39 const struct irq_source_info *info,
40 bool enable);
41 bool (*ack)(
42 struct irq_service *irq_service,
43 const struct irq_source_info *info);
44 };
45
46 struct irq_source_info {
47 uint32_t src_id;
48 uint32_t ext_id;
49 uint32_t enable_reg;
50 uint32_t enable_mask;
51 uint32_t enable_value[2];
52 uint32_t ack_reg;
53 uint32_t ack_mask;
54 uint32_t ack_value;
55 uint32_t status_reg;
56 const struct irq_source_info_funcs *funcs;
57 };
58
59 struct irq_service_funcs {
60 enum dc_irq_source (*to_dal_irq_source)(
61 struct irq_service *irq_service,
62 uint32_t src_id,
63 uint32_t ext_id);
64 };
65
66 struct irq_service {
67 struct dc_context *ctx;
68 const struct irq_source_info *info;
69 const struct irq_service_funcs *funcs;
70 };
71
72 void dal_irq_service_construct(
73 struct irq_service *irq_service,
74 struct irq_service_init_data *init_data);
75
76 void dal_irq_service_ack_generic(
77 struct irq_service *irq_service,
78 const struct irq_source_info *info);
79
80 void dal_irq_service_set_generic(
81 struct irq_service *irq_service,
82 const struct irq_source_info *info,
83 bool enable);
84
85 #endif