2 * \file physio/meta_intr.h
4 #ifndef _PHYSIO_META_INTR_H_
5 #define _PHYSIO_META_INTR_H_
8 #include <udi_physio.h>
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,
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);
27 struct udi_intr_attach_cb_s
30 udi_index_t interrupt_idx;
31 udi_ubit8_t min_event_pend;
32 udi_pio_handle_t preprocessing_handle;
34 /* Bridge Attach Control Block Group Number */
35 #define UDI_BUS_INTR_ATTACH_CB_NUM 2
37 struct udi_intr_detach_cb_s
40 udi_index_t interrupt_idx;
42 /* Bridge Detach Control Block Group Number */
43 #define UDI_BUS_INTR_DETACH_CB_NUM 3
45 struct udi_intr_handler_ops_s
47 udi_channel_event_ind_op_t *channel_event_ind_op;
48 udi_intr_event_ind_op_t *intr_event_ind_op;
50 /* Interrupt Handler Ops Vector Number */
51 #define UDI_BUS_INTR_HANDLER_OPS_NUM 3
53 struct udi_intr_dispatcher_ops_s
55 udi_channel_event_ind_op_t *channel_event_ind_op;
56 udi_intr_event_rdy_op_t *intr_event_rdy_op;
58 /* Interrupt Dispatcher Ops Vector Number */
59 #define UDI_BUS_INTR_DISPATCH_OPS_NUM 4
61 struct udi_intr_event_cb_s
65 udi_ubit16_t intr_result;
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
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);
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);
84 extern void udi_intr_event_ind(udi_intr_event_cb_t *intr_event_cb, udi_ubit8_t flags);
86 * \brief Values for ::udi_intr_event_ind \a flags
89 #define UDI_INTR_MASKING_NOT_REQUIRED (1U<<0)
90 #define UDI_INTR_OVERRUN_OCCURRED (1U<<1)
91 #define UDI_INTR_PREPROCESSED (1U<<2)
96 extern void udi_intr_event_rdy(udi_intr_event_cb_t *intr_event_cb);