4 #ifndef _UDI_META_GIO_H_
5 #define _UDI_META_GIO_H_
7 typedef const struct udi_gio_provider_ops_s udi_gio_provider_ops_t;
8 typedef const struct udi_gio_client_ops_s udi_gio_client_ops_t;
9 typedef struct udi_gio_bind_cb_s udi_gio_bind_cb_t;
10 typedef struct udi_gio_xfer_cb_s udi_gio_xfer_cb_t;
11 typedef struct udi_gio_rw_params_s udi_gio_rw_params_t;
12 typedef struct udi_gio_event_cb_s udi_gio_event_cb_t;
14 typedef void udi_gio_bind_req_op_t(udi_gio_bind_cb_t *cb);
15 typedef void udi_gio_unbind_req_op_t(udi_gio_bind_cb_t *cb);
16 typedef void udi_gio_xfer_req_op_t(udi_gio_bind_cb_t *cb);
17 typedef void udi_gio_event_res_op_t(udi_gio_bind_cb_t *cb);
19 typedef void udi_gio_bind_ack_op_t(
20 udi_gio_bind_cb_t *cb,
21 udi_ubit32_t device_size_lo,
22 udi_ubit32_t device_size_hi,
25 typedef void udi_gio_unbind_ack_op_t(udi_gio_bind_cb_t *cb);
26 typedef void udi_gio_xfer_ack_op_t(udi_gio_bind_cb_t *cb);
27 typedef void udi_gio_xfer_nak_op_t(udi_gio_bind_cb_t *cb, udi_status_t status);
28 typedef void udi_gio_event_ind_op_t(udi_gio_bind_cb_t *cb);
30 typedef udi_ubit8_t udi_gio_op_t;
31 /* Limit values for udi_gio_op_t */
32 #define UDI_GIO_OP_CUSTOM 16
33 #define UDI_GIO_OP_MAX 64
34 /* Direction flag values for op */
35 #define UDI_GIO_DIR_READ (1U<<6)
36 #define UDI_GIO_DIR_WRITE (1U<<7)
37 /* Standard Operation Codes */
38 #define UDI_GIO_OP_READ UDI_GIO_DIR_READ
39 #define UDI_GIO_OP_WRITE UDI_GIO_DIR_WRITE
43 struct udi_gio_provider_ops_s
45 udi_channel_event_ind_op_t *channel_event_ind_op;
46 udi_gio_bind_req_op_t *gio_bind_req_op;
47 udi_gio_unbind_req_op_t *gio_unbind_req_op;
48 udi_gio_xfer_req_op_t *gio_xfer_req_op;
49 udi_gio_event_res_op_t *gio_event_res_op;
51 /* Ops Vector Number */
52 #define UDI_GIO_PROVIDER_OPS_NUM 1
54 struct udi_gio_client_ops_s
56 udi_channel_event_ind_op_t *channel_event_ind_op;
57 udi_gio_bind_ack_op_t *gio_bind_ack_op;
58 udi_gio_unbind_ack_op_t *gio_unbind_ack_op;
59 udi_gio_xfer_ack_op_t *gio_xfer_ack_op;
60 udi_gio_xfer_nak_op_t *gio_xfer_nak_op;
61 udi_gio_event_ind_op_t *gio_event_ind_op;
63 /* Ops Vector Number */
64 #define UDI_GIO_CLIENT_OPS_NUM 2
66 struct udi_gio_bind_cb_s
69 udi_xfer_constraints_t xfer_constraints;
71 /* Control Block Group Number */
72 #define UDI_GIO_BIND_CB_NUM 1
75 struct udi_gio_xfer_cb_s
82 /* Control Block Group Number */
83 #define UDI_GIO_XFER_CB_NUM 2
85 struct udi_gio_rw_params_s
87 udi_ubit32_t offset_lo;
88 udi_ubit32_t offset_hi;
91 struct udi_gio_event_cb_s
94 udi_ubit8_t event_code;
97 /* Control Block Group Number */
98 #define UDI_GIO_EVENT_CB_NUM 3
101 extern void udi_gio_bind_req(udi_gio_bind_cb_t *cb);
102 extern void udi_gio_bind_ack(
103 udi_gio_bind_cb_t *cb,
104 udi_ubit32_t device_size_lo,
105 udi_ubit32_t device_size_hi,
109 extern void udi_gio_unbind_req(udi_gio_bind_cb_t *cb);
110 extern void udi_gio_unbind_ack(udi_gio_bind_cb_t *cb);
112 extern void udi_gio_xfer_req(udi_gio_xfer_cb_t *cb);
113 extern void udi_gio_xfer_ack(udi_gio_xfer_cb_t *cb);
114 extern void udi_gio_xfer_nak(udi_gio_xfer_cb_t *cb, udi_status_t status);
116 extern void udi_gio_event_res(udi_gio_event_cb_t *cb);
117 extern void udi_gio_event_ind(udi_gio_event_cb_t *cb);
118 extern void udi_gio_event_res_unused(udi_gio_event_cb_t *cb);