--- /dev/null
+/**
+ * \file udi_meta_gio.h
+ */
+#ifndef _UDI_META_GIO_H_
+#define _UDI_META_GIO_H_
+
+typedef const struct udi_gio_provider_ops_s udi_gio_provider_ops_t;
+typedef const struct udi_gio_client_ops_s udi_gio_client_ops_t;
+typedef struct udi_gio_bind_cb_s udi_gio_bind_cb_t;
+typedef struct udi_gio_xfer_cb_s udi_gio_xfer_cb_t;
+typedef struct udi_gio_rw_params_s udi_gio_rw_params_t;
+typedef struct udi_gio_event_cb_s udi_gio_event_cb_t;
+
+typedef void udi_gio_bind_req_op_t(udi_gio_bind_cb_t *cb);
+typedef void udi_gio_unbind_req_op_t(udi_gio_bind_cb_t *cb);
+typedef void udi_gio_xfer_req_op_t(udi_gio_bind_cb_t *cb);
+typedef void udi_gio_event_res_op_t(udi_gio_bind_cb_t *cb);
+
+typedef void udi_gio_bind_ack_op_t(
+ udi_gio_bind_cb_t *cb,
+ udi_ubit32_t device_size_lo,
+ udi_ubit32_t device_size_hi,
+ udi_status_t status
+ );
+typedef void udi_gio_unbind_ack_op_t(udi_gio_bind_cb_t *cb);
+typedef void udi_gio_xfer_ack_op_t(udi_gio_bind_cb_t *cb);
+typedef void udi_gio_xfer_nak_op_t(udi_gio_bind_cb_t *cb, udi_status_t status);
+typedef void udi_gio_event_ind_op_t(udi_gio_bind_cb_t *cb);
+
+typedef udi_ubit8_t udi_gio_op_t;
+/* Limit values for udi_gio_op_t */
+#define UDI_GIO_OP_CUSTOM 16
+#define UDI_GIO_OP_MAX 64
+/* Direction flag values for op */
+#define UDI_GIO_DIR_READ (1U<<6)
+#define UDI_GIO_DIR_WRITE (1U<<7)
+/* Standard Operation Codes */
+#define UDI_GIO_OP_READ UDI_GIO_DIR_READ
+#define UDI_GIO_OP_WRITE UDI_GIO_DIR_WRITE
+
+
+
+struct udi_gio_provider_ops_s
+{
+ udi_channel_event_ind_op_t *channel_event_ind_op;
+ udi_gio_bind_req_op_t *gio_bind_req_op;
+ udi_gio_unbind_req_op_t *gio_unbind_req_op;
+ udi_gio_xfer_req_op_t *gio_xfer_req_op;
+ udi_gio_event_res_op_t *gio_event_res_op;
+};
+/* Ops Vector Number */
+#define UDI_GIO_PROVIDER_OPS_NUM 1
+
+struct udi_gio_client_ops_s
+{
+ udi_channel_event_ind_op_t *channel_event_ind_op;
+ udi_gio_bind_ack_op_t *gio_bind_ack_op;
+ udi_gio_unbind_ack_op_t *gio_unbind_ack_op;
+ udi_gio_xfer_ack_op_t *gio_xfer_ack_op;
+ udi_gio_xfer_nak_op_t *gio_xfer_nak_op;
+ udi_gio_event_ind_op_t *gio_event_ind_op;
+};
+/* Ops Vector Number */
+#define UDI_GIO_CLIENT_OPS_NUM 2
+
+struct udi_gio_bind_cb_s
+{
+ udi_cb_t gcb;
+ udi_xfer_constraints_t xfer_constraints;
+};
+/* Control Block Group Number */
+#define UDI_GIO_BIND_CB_NUM 1
+
+
+struct udi_gio_xfer_cb_s
+{
+ udi_cb_t gcb;
+ udi_gio_op_t op;
+ void *tr_params;
+ udi_buf_t *data_buf;
+};
+/* Control Block Group Number */
+#define UDI_GIO_XFER_CB_NUM 2
+
+struct udi_gio_rw_params_s
+{
+ udi_ubit32_t offset_lo;
+ udi_ubit32_t offset_hi;
+};
+
+struct udi_gio_event_cb_s
+{
+ udi_cb_t gcb;
+ udi_ubit8_t event_code;
+ void *event_params;
+};
+/* Control Block Group Number */
+#define UDI_GIO_EVENT_CB_NUM 3
+
+
+extern void udi_gio_bind_req(udi_gio_bind_cb_t *cb);
+extern void udi_gio_bind_ack(
+ udi_gio_bind_cb_t *cb,
+ udi_ubit32_t device_size_lo,
+ udi_ubit32_t device_size_hi,
+ udi_status_t status
+ );
+
+extern void udi_gio_unbind_req(udi_gio_bind_cb_t *cb);
+extern void udi_gio_unbind_ack(udi_gio_bind_cb_t *cb);
+
+extern void udi_gio_xfer_req(udi_gio_xfer_cb_t *cb);
+extern void udi_gio_xfer_ack(udi_gio_xfer_cb_t *cb);
+extern void udi_gio_xfer_nak(udi_gio_xfer_cb_t *cb, udi_status_t status);
+
+extern void udi_gio_event_res(udi_gio_event_cb_t *cb);
+extern void udi_gio_event_ind(udi_gio_event_cb_t *cb);
+extern void udi_gio_event_res_unused(udi_gio_event_cb_t *cb);
+
+#endif