4 #ifndef _UDI_META_GIO_H_
5 #define _UDI_META_GIO_H_
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;
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);
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,
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);
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
46 struct udi_gio_provider_ops_s
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;
54 /* Ops Vector Number */
55 #define UDI_GIO_PROVIDER_OPS_NUM 1
57 struct udi_gio_client_ops_s
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;
66 /* Ops Vector Number */
67 #define UDI_GIO_CLIENT_OPS_NUM 2
69 struct udi_gio_bind_cb_s
72 udi_xfer_constraints_t xfer_constraints;
74 /* Control Block Group Number */
75 #define UDI_GIO_BIND_CB_NUM 1
78 struct udi_gio_xfer_cb_s
85 /* Control Block Group Number */
86 #define UDI_GIO_XFER_CB_NUM 2
88 struct udi_gio_rw_params_s
90 udi_ubit32_t offset_lo;
91 udi_ubit32_t offset_hi;
94 struct udi_gio_event_cb_s
97 udi_ubit8_t event_code;
100 /* Control Block Group Number */
101 #define UDI_GIO_EVENT_CB_NUM 3
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,
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);
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);
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);