More UDI work
[tpg/acess2.git] / Modules / UDI / include / udi_meta_gio.h
1 /**
2  * \file udi_meta_gio.h
3  */
4 #ifndef _UDI_META_GIO_H_
5 #define _UDI_META_GIO_H_
6
7 #include <udi_imc.h>
8 #include <udi_buf.h>
9
10 typedef const struct udi_gio_provider_ops_s     udi_gio_provider_ops_t;
11 typedef const struct udi_gio_client_ops_s       udi_gio_client_ops_t;
12 typedef struct udi_gio_bind_cb_s        udi_gio_bind_cb_t;
13 typedef struct udi_gio_xfer_cb_s        udi_gio_xfer_cb_t;
14 typedef struct udi_gio_rw_params_s      udi_gio_rw_params_t;
15 typedef struct udi_gio_event_cb_s       udi_gio_event_cb_t;
16
17 typedef void    udi_gio_bind_req_op_t(udi_gio_bind_cb_t *cb);
18 typedef void    udi_gio_unbind_req_op_t(udi_gio_bind_cb_t *cb);
19 typedef void    udi_gio_xfer_req_op_t(udi_gio_bind_cb_t *cb);
20 typedef void    udi_gio_event_res_op_t(udi_gio_bind_cb_t *cb);
21
22 typedef void    udi_gio_bind_ack_op_t(
23         udi_gio_bind_cb_t *cb,
24         udi_ubit32_t    device_size_lo,
25         udi_ubit32_t    device_size_hi,
26         udi_status_t    status
27         );
28 typedef void    udi_gio_unbind_ack_op_t(udi_gio_bind_cb_t *cb);
29 typedef void    udi_gio_xfer_ack_op_t(udi_gio_bind_cb_t *cb);
30 typedef void    udi_gio_xfer_nak_op_t(udi_gio_bind_cb_t *cb, udi_status_t status);
31 typedef void    udi_gio_event_ind_op_t(udi_gio_bind_cb_t *cb);
32
33 typedef udi_ubit8_t     udi_gio_op_t;
34 /* Limit values for udi_gio_op_t */
35 #define UDI_GIO_OP_CUSTOM                 16
36 #define UDI_GIO_OP_MAX                    64
37 /* Direction flag values for op */
38 #define UDI_GIO_DIR_READ                  (1U<<6)
39 #define UDI_GIO_DIR_WRITE                 (1U<<7)
40 /* Standard Operation Codes */
41 #define UDI_GIO_OP_READ       UDI_GIO_DIR_READ
42 #define UDI_GIO_OP_WRITE      UDI_GIO_DIR_WRITE
43
44
45
46 struct udi_gio_provider_ops_s
47 {
48         udi_channel_event_ind_op_t      *channel_event_ind_op;
49         udi_gio_bind_req_op_t   *gio_bind_req_op;
50         udi_gio_unbind_req_op_t *gio_unbind_req_op;
51         udi_gio_xfer_req_op_t   *gio_xfer_req_op;
52         udi_gio_event_res_op_t  *gio_event_res_op;
53 };
54 /* Ops Vector Number */
55 #define UDI_GIO_PROVIDER_OPS_NUM          1
56
57 struct udi_gio_client_ops_s
58 {
59         udi_channel_event_ind_op_t      *channel_event_ind_op;
60         udi_gio_bind_ack_op_t   *gio_bind_ack_op;
61         udi_gio_unbind_ack_op_t *gio_unbind_ack_op;
62         udi_gio_xfer_ack_op_t   *gio_xfer_ack_op;
63         udi_gio_xfer_nak_op_t   *gio_xfer_nak_op;
64         udi_gio_event_ind_op_t  *gio_event_ind_op;
65 };
66 /* Ops Vector Number */
67 #define UDI_GIO_CLIENT_OPS_NUM            2
68
69 struct udi_gio_bind_cb_s
70 {
71         udi_cb_t        gcb;
72         udi_xfer_constraints_t  xfer_constraints;
73 };
74 /* Control Block Group Number */
75 #define UDI_GIO_BIND_CB_NUM      1
76
77
78 struct udi_gio_xfer_cb_s
79 {
80         udi_cb_t        gcb;
81         udi_gio_op_t    op;
82         void    *tr_params;
83         udi_buf_t       *data_buf;
84 };
85 /* Control Block Group Number */
86 #define UDI_GIO_XFER_CB_NUM      2
87
88 struct udi_gio_rw_params_s
89 {
90         udi_ubit32_t offset_lo;
91         udi_ubit32_t offset_hi;
92 };
93
94 struct udi_gio_event_cb_s
95 {
96         udi_cb_t        gcb;
97         udi_ubit8_t     event_code;
98         void    *event_params;
99 };
100 /* Control Block Group Number */
101 #define UDI_GIO_EVENT_CB_NUM     3
102
103
104 extern void udi_gio_bind_req(udi_gio_bind_cb_t *cb);
105 extern void udi_gio_bind_ack(
106         udi_gio_bind_cb_t       *cb,
107         udi_ubit32_t    device_size_lo,
108         udi_ubit32_t    device_size_hi,
109         udi_status_t    status
110         );
111
112 extern void udi_gio_unbind_req(udi_gio_bind_cb_t *cb);
113 extern void udi_gio_unbind_ack(udi_gio_bind_cb_t *cb);
114
115 extern void udi_gio_xfer_req(udi_gio_xfer_cb_t *cb);
116 extern void udi_gio_xfer_ack(udi_gio_xfer_cb_t *cb);
117 extern void udi_gio_xfer_nak(udi_gio_xfer_cb_t *cb, udi_status_t status);
118
119 extern void udi_gio_event_res(udi_gio_event_cb_t *cb);
120 extern void udi_gio_event_ind(udi_gio_event_cb_t *cb);
121 extern void udi_gio_event_res_unused(udi_gio_event_cb_t *cb);
122
123 #endif

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