506eb0c818b662aa4d86b37a57f8f85e91ed260e
[tpg/acess2.git] / UDI / include / physio / meta_intr.h
1 /**
2  * \file physio/meta_intr.h
3  */
4 #ifndef _PHYSIO_META_INTR_H_
5 #define _PHYSIO_META_INTR_H_
6
7 #include <udi.h>
8 #include <udi_physio.h>
9 #include "pio.h"
10
11 typedef struct udi_intr_attach_cb_s     udi_intr_attach_cb_t;
12 typedef void    udi_intr_attach_req_op_t(udi_intr_attach_cb_t *intr_attach_cb);
13 typedef void    udi_intr_attach_ack_op_t(
14         udi_intr_attach_cb_t *intr_attach_cb,
15         udi_status_t status
16         );
17 typedef struct udi_intr_detach_cb_s     udi_intr_detach_cb_t;
18 typedef void    udi_intr_detach_req_op_t(udi_intr_detach_cb_t *intr_detach_cb);
19 typedef void    udi_intr_detach_ack_op_t(udi_intr_detach_cb_t *intr_detach_cb);
20 typedef const struct udi_intr_handler_ops_s     udi_intr_handler_ops_t;
21 typedef const struct udi_intr_dispatcher_ops_s  udi_intr_dispatcher_ops_t;
22 typedef struct udi_intr_event_cb_s      udi_intr_event_cb_t;
23 typedef void    udi_intr_event_ind_op_t(udi_intr_event_cb_t *intr_event_cb, udi_ubit8_t flags);
24 typedef void    udi_intr_event_rdy_op_t(udi_intr_event_cb_t *intr_event_cb);
25
26
27 struct udi_intr_attach_cb_s
28 {
29         udi_cb_t        gcb;
30         udi_index_t     interrupt_idx;
31         udi_ubit8_t     min_event_pend;
32         udi_pio_handle_t        preprocessing_handle;
33 };
34 /* Bridge Attach Control Block Group Number */
35 #define UDI_BUS_INTR_ATTACH_CB_NUM        2
36
37 struct udi_intr_detach_cb_s
38 {
39         udi_cb_t        gcb;
40         udi_index_t     interrupt_idx;
41 };
42 /* Bridge Detach Control Block Group Number */
43 #define UDI_BUS_INTR_DETACH_CB_NUM       3
44
45 struct udi_intr_handler_ops_s
46 {
47         udi_channel_event_ind_op_t      *channel_event_ind_op;
48         udi_intr_event_ind_op_t *intr_event_ind_op;
49 };
50 /* Interrupt Handler Ops Vector Number */
51 #define UDI_BUS_INTR_HANDLER_OPS_NUM      3
52
53 struct udi_intr_dispatcher_ops_s
54 {
55         udi_channel_event_ind_op_t      *channel_event_ind_op;
56         udi_intr_event_rdy_op_t *intr_event_rdy_op;
57 };
58 /* Interrupt Dispatcher Ops Vector Number */
59 #define UDI_BUS_INTR_DISPATCH_OPS_NUM     4
60
61 struct udi_intr_event_cb_s
62 {
63         udi_cb_t        gcb;
64         udi_buf_t       *event_buf;
65         udi_ubit16_t    intr_result;
66 };
67 /* Flag values for interrupt handling */
68 #define UDI_INTR_UNCLAIMED               (1U<<0)
69 #define UDI_INTR_NO_EVENT                (1U<<1)
70 /* Bus Interrupt Event Control Block Group Number */
71 #define UDI_BUS_INTR_EVENT_CB_NUM        4
72
73
74
75 extern void udi_intr_attach_req(udi_intr_attach_cb_t *intr_attach_cb);
76 extern void udi_intr_attach_ack(udi_intr_attach_cb_t *intr_attach_cb, udi_status_t status);
77 //extern void udi_intr_attach_ack_unused(udi_intr_attach_cb_t *intr_attach_cb, udi_status_t status);
78
79 extern void udi_intr_detach_req(udi_intr_detach_cb_t *intr_detach_cb);
80 extern void udi_intr_detach_ack(udi_intr_detach_cb_t *intr_detach_cb);
81 //extern void udi_intr_detach_ack_unused(udi_intr_detach_cb_t *intr_detach_cb);
82
83
84 extern void udi_intr_event_ind(udi_intr_event_cb_t *intr_event_cb, udi_ubit8_t flags);
85 /**
86  * \brief Values for ::udi_intr_event_ind \a flags
87  * \{
88  */
89 #define UDI_INTR_MASKING_NOT_REQUIRED    (1U<<0)
90 #define UDI_INTR_OVERRUN_OCCURRED        (1U<<1)
91 #define UDI_INTR_PREPROCESSED            (1U<<2)
92 /**
93  * \}
94  */
95
96 extern void udi_intr_event_rdy(udi_intr_event_cb_t *intr_event_cb);
97
98
99
100 #endif

UCC git Repository :: git.ucc.asn.au