3 * \author John Hodge (thePowersGang)
5 #include <acess.h> // EXPORT
7 #include <udi_internal.h> // tUDI_MetaLang
10 EXPORT(udi_gio_bind_req);
11 EXPORT(udi_gio_bind_ack);
12 EXPORT(udi_gio_unbind_req);
13 EXPORT(udi_gio_unbind_ack);
14 EXPORT(udi_gio_xfer_req);
15 EXPORT(udi_gio_xfer_ack);
16 EXPORT(udi_gio_xfer_nak);
17 EXPORT(udi_gio_event_res);
18 EXPORT(udi_gio_event_ind);
19 EXPORT(udi_gio_event_res_unused);
21 extern udi_mei_init_t udi_mei_info__gio;
22 #define udi_mei_info udi_mei_info__gio
25 UDI_MEI_STUBS(udi_gio_bind_req, udi_gio_bind_cb_t,
27 UDI_GIO_PROVIDER_OPS_NUM, 1)
28 udi_layout_t _udi_gio_bind_req_marshal_layout[] = { UDI_DL_END };
30 UDI_MEI_STUBS(udi_gio_bind_ack, udi_gio_bind_cb_t,
31 3, (device_size_lo, device_size_hi, status), (udi_ubit32_t, udi_ubit32_t, udi_status_t), (UDI_VA_UBIT32_T, UDI_VA_UBIT32_T, UDI_VA_STATUS_T),
32 UDI_GIO_CLIENT_OPS_NUM, 1)
33 udi_layout_t _udi_gio_bind_ack_marshal_layout[] = { UDI_DL_UBIT32_T, UDI_DL_UBIT32_T, UDI_DL_INDEX_T, UDI_DL_END };
37 UDI_MEI_STUBS(udi_gio_unbind_req, udi_gio_bind_cb_t,
39 UDI_GIO_PROVIDER_OPS_NUM, 2)
40 udi_layout_t _udi_gio_unbind_req_marshal_layout[] = { UDI_DL_END };
42 UDI_MEI_STUBS(udi_gio_unbind_ack, udi_gio_bind_cb_t,
44 UDI_GIO_CLIENT_OPS_NUM, 2)
45 udi_layout_t _udi_gio_unbind_ack_marshal_layout[] = { UDI_DL_END };
48 UDI_MEI_STUBS(udi_gio_xfer_req, udi_gio_xfer_cb_t,
50 UDI_GIO_PROVIDER_OPS_NUM, 3)
51 udi_layout_t _udi_gio_xfer_req_marshal_layout[] = { UDI_DL_END };
53 UDI_MEI_STUBS(udi_gio_xfer_ack, udi_gio_xfer_cb_t,
55 UDI_GIO_CLIENT_OPS_NUM, 3)
56 udi_layout_t _udi_gio_xfer_ack_marshal_layout[] = { UDI_DL_END };
58 UDI_MEI_STUBS(udi_gio_xfer_nak, udi_gio_xfer_cb_t,
59 1, (status), (udi_status_t), (UDI_VA_STATUS_T),
60 UDI_GIO_CLIENT_OPS_NUM, 4)
61 udi_layout_t _udi_gio_xfer_nak_marshal_layout[] = { UDI_DL_STATUS_T, UDI_DL_END };
64 UDI_MEI_STUBS(udi_gio_event_res, udi_gio_event_cb_t,
66 UDI_GIO_PROVIDER_OPS_NUM, 4)
67 udi_layout_t _udi_gio_event_res_marshal_layout[] = { UDI_DL_END };
69 void udi_gio_event_ind_unused(udi_gio_event_cb_t *cb)
74 UDI_MEI_STUBS(udi_gio_event_ind, udi_gio_event_cb_t,
76 UDI_GIO_CLIENT_OPS_NUM, 5)
77 udi_layout_t _udi_gio_event_ind_marshal_layout[] = { UDI_DL_END };
79 void udi_gio_event_res_unused(udi_gio_event_cb_t *cb)
85 // 1: UDI_GIO_BIND_CB_NUM
86 udi_layout_t _GIO_BIND_cb_layout[] = {
87 //UDI_DL_XFER_CONSTRAINTS,
96 // 2: UDI_GIO_XFER_CB_NUM
97 udi_layout_t _GIO_XFER_cb_layout[] = {
98 UDI_DL_UBIT8_T, // udi_gio_op_t
99 UDI_DL_INLINE_DRIVER_TYPED,
101 offsetof(udi_gio_xfer_cb_t, op),
106 // 3: UDI_GIO_EVENT_CB_NUM
107 udi_layout_t _GIO_EVENT_cb_layout[] = {
109 UDI_DL_INLINE_DRIVER_TYPED,
114 #define UDI__OPS_NUM 0
115 #define MEI_OPINFO(name,cat,flags,cbtype,rsp_ops,rsp_idx,err_ops,err_idx) \
116 {#name, UDI_MEI_OPCAT_##cat,flags,UDI_##cbtype##_CB_NUM, \
117 UDI_##rsp_ops##_OPS_NUM,rsp_idx,UDI_##err_ops##_OPS_NUM,err_idx, \
118 name##_direct, name##_backend, _##cbtype##_cb_layout, _##name##_marshal_layout }
119 udi_mei_op_template_t udi_mei_info__gio__prov_ops[] = {
120 MEI_OPINFO(udi_gio_bind_req, REQ, 0, GIO_BIND, GIO_CLIENT,1, ,0),
121 MEI_OPINFO(udi_gio_unbind_req, REQ, 0, GIO_BIND, GIO_CLIENT,2, ,0),
122 MEI_OPINFO(udi_gio_xfer_req, REQ, UDI_MEI_OP_ABORTABLE, GIO_XFER, GIO_CLIENT,3, GIO_CLIENT,4),
123 MEI_OPINFO(udi_gio_event_res, RES, 0, GIO_EVENT, ,0, ,0),
126 udi_mei_op_template_t udi_mei_info__gio__client_ops[] = {
127 MEI_OPINFO(udi_gio_bind_ack, ACK, 0, GIO_BIND, ,0, ,0),
128 MEI_OPINFO(udi_gio_unbind_ack, ACK, 0, GIO_BIND, ,0, ,0),
129 MEI_OPINFO(udi_gio_xfer_ack, ACK, 0, GIO_XFER, ,0, ,0),
130 MEI_OPINFO(udi_gio_xfer_nak, ACK, 0, GIO_XFER, ,0, ,0),
131 MEI_OPINFO(udi_gio_event_ind, IND, 0, GIO_EVENT, GIO_PROVIDER,4, ,0),
134 udi_mei_ops_vec_template_t udi_mei_info__gio_ops[] = {
135 {UDI_GIO_PROVIDER_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_BIND|UDI_MEI_REL_INITIATOR, udi_mei_info__gio__prov_ops},
136 {UDI_GIO_CLIENT_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_BIND, udi_mei_info__gio__client_ops},
139 udi_mei_init_t udi_mei_info__gio = {
140 udi_mei_info__gio_ops,
143 tUDI_MetaLang cMetaLang_GIO = {
149 {sizeof(udi_gio_bind_cb_t), 0, _GIO_BIND_cb_layout},
150 {sizeof(udi_gio_xfer_cb_t), 0, _GIO_XFER_cb_layout},
151 {sizeof(udi_gio_event_cb_t), 0, _GIO_EVENT_cb_layout},