Modules/UDI - Heaps of fixes and features
[tpg/acess2.git] / KernelLand / Modules / Interfaces / UDI / include / udi_internal.h
index 6476c2f..83093f9 100644 (file)
@@ -9,6 +9,7 @@
 #define _UDI_INTERNAL_H_
 
 #include <stdbool.h>
+#include <stdarg.h>
 
 #define NEW(type,extra) (type*)calloc(sizeof(type)extra,1)
 #define NEW_wA(type,fld,cnt)   NEW(type,+(sizeof(((type*)NULL)->fld[0])*cnt))
@@ -70,6 +71,7 @@ struct sUDI_PropRegion
 struct sUDI_MetaLang
 {
        const char *Name;
+       const void      *MeiInfo;
         int    nCbTypes;
        struct {
                udi_size_t      Size;
@@ -107,7 +109,7 @@ struct sUDI_DriverModule
        tUDI_DriverModule       *Next;
        void    *Base;
 
-       udi_init_t      *InitInfo;
+       const udi_init_t        *InitInfo;
 
        // Counts of arrays in InitInfo
         int    nCBInit;
@@ -142,6 +144,8 @@ struct sUDI_DriverInstance
        udi_channel_t   ManagementChannel;
        tUDI_DriverInstance     *Parent;
        tUDI_ChildBinding       *ParentChildBinding;
+
+        int    CurState;       // Current MA state
        
        tUDI_ChildBinding       *FirstChild;
        tUDI_DriverRegion       *Regions[];
@@ -170,10 +174,9 @@ struct sUDI_ChildBinding
 // --- Metalanguages ---
 extern tUDI_MetaLang   cMetaLang_Management;
 
-
 // --- Index to pointer translation ---
 extern udi_ops_init_t  *UDI_int_GetOps(tUDI_DriverInstance *Inst, udi_index_t index);
-extern tUDI_MetaLang *UDI_int_GetMetaLang(tUDI_DriverInstance *Inst, udi_index_t meta_idx);
+extern tUDI_MetaLang *UDI_int_GetMetaLang(tUDI_DriverModule *Inst, udi_index_t meta_idx);
 
 // --- Channels ---
 extern udi_channel_t   UDI_CreateChannel_Blank(tUDI_MetaLang *metalang);
@@ -206,9 +209,18 @@ extern void        UDI_int_MakeDeferredCbS(udi_cb_t *cb, udi_op_t *handler, udi_status_
 
 // --- CBs ---
 extern void *udi_cb_alloc_internal(tUDI_DriverInstance *Inst, udi_ubit8_t bind_cb_idx, udi_channel_t channel);
+extern udi_cb_t        *udi_cb_alloc_internal_v(tUDI_MetaLang *Meta, udi_index_t MetaCBNum, size_t inline_size, size_t scratch_size, udi_channel_t channel);
+extern tUDI_MetaLang   *UDI_int_GetCbType(udi_cb_t *gcb, udi_index_t *meta_cb_num);
 
 // --- Attribute Management ---
 extern udi_instance_attr_type_t udi_instance_attr_get_internal(udi_cb_t *gcb, const char *attr_name, udi_ubit32_t child_ID, void *attr_value, udi_size_t attr_length, udi_size_t *actual_length);
 
+// --- Layout ---
+extern size_t  _udi_marshal_step(void *buf, size_t cur_ofs, udi_layout_t **layoutp, va_list *values);
+extern size_t  _udi_marshal_values(void *buf, udi_layout_t *layout, va_list values);
+
+// --- Buffers ---
+extern udi_buf_t       *_udi_buf_allocate(const void *data, udi_size_t length, udi_buf_path_t path_handle);
+
 #endif
 

UCC git Repository :: git.ucc.asn.au