+
+void udi_intr_attach_req(udi_intr_attach_cb_t *cb)
+{
+ LOG("cb=%p", cb);
+ PREP_OPS(udi_bus_bridge_ops_t, &cMetaLang_BusBridge, UDI_BUS_BRIDGE_OPS_NUM)
+ UDI_int_MakeDeferredCb( UDI_GCB(cb), (udi_op_t*)ops->intr_attach_req_op );
+}
+void udi_intr_attach_ack(udi_intr_attach_cb_t *cb, udi_status_t status)
+{
+ LOG("cb=%p,status=%i", cb, status);
+ PREP_OPS(udi_bus_device_ops_t, &cMetaLang_BusBridge, UDI_BUS_DEVICE_OPS_NUM)
+ UDI_int_MakeDeferredCbS( UDI_GCB(cb), (udi_op_t*)ops->intr_attach_ack_op, status );
+}
+
+void udi_intr_detach_req(udi_intr_detach_cb_t *cb)
+{
+ LOG("cb=%p", cb);
+ PREP_OPS(udi_bus_bridge_ops_t, &cMetaLang_BusBridge, UDI_BUS_BRIDGE_OPS_NUM)
+ UDI_int_MakeDeferredCb( UDI_GCB(cb), (udi_op_t*)ops->intr_detach_req_op );
+}
+void udi_intr_detach_ack(udi_intr_detach_cb_t *cb)
+{
+ LOG("cb=%p", cb);
+ PREP_OPS(udi_bus_device_ops_t, &cMetaLang_BusBridge, UDI_BUS_DEVICE_OPS_NUM)
+ UDI_int_MakeDeferredCb( UDI_GCB(cb), (udi_op_t*)ops->intr_detach_ack_op );
+}
+#endif
+
+void udi_intr_event_ind(udi_intr_event_cb_t *cb, udi_ubit8_t flags)
+{
+ LOG("cb=%p,flags=0x%x", cb, flags);
+ PREP_OPS(udi_intr_handler_ops_t, &cMetaLang_BusBridge, UDI_BUS_INTR_HANDLER_OPS_NUM)
+ UDI_int_MakeDeferredCbU8( UDI_GCB(cb), (udi_op_t*)ops->intr_event_ind_op, flags );
+}
+
+void udi_intr_event_rdy(udi_intr_event_cb_t *cb)
+{
+ LOG("cb=%p", cb);
+ PREP_OPS(udi_intr_dispatcher_ops_t, &cMetaLang_BusBridge, UDI_BUS_INTR_DISPATCH_OPS_NUM)
+ UDI_int_MakeDeferredCb( UDI_GCB(cb), (udi_op_t*)ops->intr_event_rdy_op );
+}
+
+void udi_intr_attach_ack_unused(udi_intr_attach_cb_t *intr_attach_cb, udi_status_t status)
+{
+ Log_Error("UDI", "Driver %s caused %s to be called",
+ UDI_int_ChannelGetInstance(UDI_GCB(intr_attach_cb), false, NULL)->Module->ModuleName,
+ __func__);
+}
+void udi_intr_detach_ack_unused(udi_intr_detach_cb_t *intr_detach_cb)
+{
+ Log_Error("UDI", "Driver %s caused %s to be called",
+ UDI_int_ChannelGetInstance(UDI_GCB(intr_detach_cb), false, NULL)->Module->ModuleName,
+ __func__);
+}
+
+#if USE_MEI
+UDI_MEI_STUBS(udi_bus_bind_ack, udi_bus_bind_cb_t, 3,
+ (dma_constraints, preferred_endianness, status ),
+ (udi_dma_constraints_t, udi_ubit8_t, udi_status_t),
+ (UDI_VA_POINTER, UDI_VA_UBIT8_T, UDI_VA_STATUS_T),
+ UDI_BUS_DEVICE_OPS_NUM, 1)
+UDI_MEI_STUBS(udi_bus_unbind_ack, udi_bus_bind_cb_t, 0,
+ (), (), (),
+ UDI_BUS_DEVICE_OPS_NUM, 2)
+UDI_MEI_STUBS(udi_intr_attach_ack, udi_intr_attach_cb_t, 1,
+ (status), (udi_status_t), (UDI_VA_STATUS_T),
+ UDI_BUS_DEVICE_OPS_NUM, 3)
+UDI_MEI_STUBS(udi_intr_detach_ack, udi_intr_detach_cb_t, 0,
+ (), (), (),
+ UDI_BUS_DEVICE_OPS_NUM, 4)
+
+UDI_MEI_STUBS(udi_bus_bind_req, udi_bus_bind_cb_t, 0,
+ (), (), (),
+ UDI_BUS_BRIDGE_OPS_NUM, 1)
+UDI_MEI_STUBS(udi_bus_unbind_req, udi_bus_bind_cb_t, 0,
+ (), (), (),
+ UDI_BUS_BRIDGE_OPS_NUM, 2)
+UDI_MEI_STUBS(udi_intr_attach_req, udi_intr_attach_cb_t, 0,
+ (), (), (),
+ UDI_BUS_BRIDGE_OPS_NUM, 3)
+UDI_MEI_STUBS(udi_intr_detach_req, udi_intr_detach_cb_t, 0,
+ (), (), (),
+ UDI_BUS_BRIDGE_OPS_NUM, 4)
+
+#endif
+
+// === GLOBALS ==
+udi_layout_t udi_meta_info__bridge__bus_bind_cb[] = {
+ UDI_DL_END
+};
+udi_layout_t udi_meta_info__bridge__intr_attach_cb[] = {
+ UDI_DL_STATUS_T,
+ UDI_DL_UBIT8_T,
+ UDI_DL_PIO_HANDLE_T,
+ UDI_DL_END
+};
+udi_layout_t udi_meta_info__bridge__intr_detach_cb[] = {
+ UDI_DL_INDEX_T,
+ UDI_DL_END
+};
+udi_layout_t udi_meta_info__bridge__intr_event_cb[] = {
+ UDI_DL_END
+};
+
+#if USE_MEI
+udi_layout_t _noargs_marshal[] = {
+ UDI_DL_END
+};
+udi_layout_t _bus_bind_ack_marshal[] = {
+ UDI_DL_DMA_CONSTRAINTS_T,
+ UDI_DL_UBIT8_T,
+ UDI_DL_STATUS_T,
+ UDI_DL_END
+};
+udi_layout_t _udi_intr_attach_ack_marshal[] = {
+ UDI_DL_STATUS_T,
+ UDI_DL_END
+};
+
+udi_mei_op_template_t udi_meta_info__bridge__bus_ops[] = {
+ {"udi_bus_bind_req", UDI_MEI_OPCAT_REQ, 0, UDI_BUS_BIND_CB_NUM, UDI_BUS_DEVICE_OPS_NUM,1, 0,0,
+ udi_bus_bind_req_direct, udi_bus_bind_req_backend, udi_meta_info__bridge__bus_bind_cb,
+ _noargs_marshal},
+ {"udi_bus_unbind_req", UDI_MEI_OPCAT_REQ, 0, UDI_BUS_BIND_CB_NUM, UDI_BUS_DEVICE_OPS_NUM,2, 0,0,
+ udi_bus_unbind_req_direct, udi_bus_unbind_req_backend, udi_meta_info__bridge__bus_bind_cb,
+ _noargs_marshal},
+ {"udi_intr_attach_req", UDI_MEI_OPCAT_REQ, 0, UDI_BUS_INTR_ATTACH_CB_NUM, UDI_BUS_DEVICE_OPS_NUM,3, 0,0,
+ udi_intr_attach_req_direct, udi_intr_attach_req_backend, udi_meta_info__bridge__intr_attach_cb,
+ _noargs_marshal},
+ {"udi_intr_detach_req", UDI_MEI_OPCAT_REQ, 0, UDI_BUS_INTR_DETACH_CB_NUM, UDI_BUS_DEVICE_OPS_NUM,4, 0,0,
+ udi_intr_detach_req_direct, udi_intr_detach_req_backend, udi_meta_info__bridge__intr_detach_cb,
+ _noargs_marshal},
+ {0}
+};
+udi_mei_op_template_t udi_meta_info__bridge__device_ops[] = {
+ {"udi_bus_bind_ack", UDI_MEI_OPCAT_ACK, 0, UDI_BUS_BIND_CB_NUM, 0,0, 0,0,
+ udi_bus_bind_ack_direct, udi_bus_bind_ack_backend, udi_meta_info__bridge__bus_bind_cb,
+ _bus_bind_ack_marshal},
+ {"udi_bus_unbind_ack", UDI_MEI_OPCAT_ACK, 0, UDI_BUS_BIND_CB_NUM, 0,0, 0,0,
+ udi_bus_unbind_ack_direct, udi_bus_unbind_ack_backend, udi_meta_info__bridge__bus_bind_cb,
+ _noargs_marshal},
+ {"udi_intr_attach_ack", UDI_MEI_OPCAT_ACK, 0, UDI_BUS_INTR_ATTACH_CB_NUM, 0,0, 0,0,
+ udi_intr_attach_ack_direct, udi_intr_attach_ack_backend, udi_meta_info__bridge__intr_attach_cb,
+ _udi_intr_attach_ack_marshal},
+ {"udi_intr_detach_ack", UDI_MEI_OPCAT_ACK, 0, UDI_BUS_INTR_DETACH_CB_NUM, 0,0, 0,0,
+ udi_intr_detach_ack_direct, udi_intr_detach_ack_backend, udi_meta_info__bridge__intr_detach_cb,
+ _noargs_marshal},
+ {0}
+};
+udi_mei_ops_vec_template_t udi_meta_info__bridge_ops[] = {
+ {UDI_BUS_BRIDGE_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_BIND, udi_meta_info__bridge__bus_ops},
+ {UDI_BUS_DEVICE_OPS_NUM, UDI_MEI_REL_EXTERNAL|UDI_MEI_REL_BIND, udi_meta_info__bridge__device_ops},
+ {0}
+};
+udi_mei_init_t udi_meta_info__bridge = {
+ udi_meta_info__bridge_ops,
+ NULL
+};
+#endif
+tUDI_MetaLang cMetaLang_BusBridge = {
+ "udi_bridge",
+ // CB Types
+ 5,
+ {
+ {0}, // 0: Empty
+ {sizeof(udi_bus_bind_cb_t), udi_meta_info__bridge__bus_bind_cb},
+ {sizeof(udi_intr_attach_cb_t), udi_meta_info__bridge__intr_attach_cb},
+ {sizeof(udi_intr_detach_cb_t), udi_meta_info__bridge__intr_detach_cb},
+ {sizeof(udi_intr_event_cb_t), NULL}
+ }
+};