Working on UDI support (UDI manager module now compiles)
[tpg/acess2.git] / Modules / UDI / include / udi.h
1 /*
2  * Acess2 UDI Support
3  * udi.h
4  */
5 #ifndef _UDI_H_
6 #define _UDI_H_
7
8 #include <udi_arch.h>
9
10 typedef void    udi_op_t(void);
11
12 typedef udi_op_t const  *udi_ops_vector_t;
13
14 typedef const udi_ubit8_t       udi_layout_t;
15
16 typedef udi_ubit32_t    udi_trevent_t;
17
18 #include <_udi/values.h>
19
20 typedef struct {
21      udi_channel_t      channel;
22      void       *context;
23      void       *scratch;
24      void       *initiator_context;
25      udi_origin_t       origin;
26 } udi_cb_t;
27
28 /**
29  * \name Attributes
30  * \{
31  */
32 #define UDI_MAX_ATTR_NAMELEN 32
33 #define UDI_MAX_ATTR_SIZE    64
34 typedef struct {
35      char       attr_name[UDI_MAX_ATTR_NAMELEN];
36      udi_ubit8_t        attr_value[UDI_MAX_ATTR_SIZE];
37      udi_ubit8_t        attr_length;
38      udi_instance_attr_type_t   attr_type;
39 } udi_instance_attr_list_t;
40
41 typedef struct {
42      char       attr_name[UDI_MAX_ATTR_NAMELEN];
43      udi_ubit8_t        attr_min[UDI_MAX_ATTR_SIZE];
44      udi_ubit8_t        attr_min_len;
45      udi_ubit8_t        attr_max[UDI_MAX_ATTR_SIZE];
46      udi_ubit8_t        attr_max_len;
47      udi_instance_attr_type_t   attr_type;
48      udi_ubit32_t       attr_stride;
49 } udi_filter_element_t;
50 /**
51  * \}
52  */
53
54
55
56 #include <_udi/meta_mgmt.h>
57
58 /**
59  */
60 typedef const struct {
61         udi_index_t     cb_idx;
62         udi_size_t      scratch_requirement;
63 } udi_gcb_init_t;
64
65 /**
66  */
67 typedef const struct {
68         udi_index_t     ops_idx;
69         udi_index_t     cb_idx;
70 } udi_cb_select_t;
71
72 /**
73  */
74 typedef const struct {
75         udi_index_t     cb_idx;
76         udi_index_t     meta_idx;
77         udi_index_t     meta_cb_num;
78         udi_size_t      scratch_requirement;
79         udi_size_t      inline_size;
80         udi_layout_t    *inline_layout;
81 } udi_cb_init_t;
82
83 /**
84  * The \a udi_ops_init_t structure contains information the environment
85  * needs to subsequently create channel endpoints for a particular type of ops
86  * vector and control block usage. This structure is part of \a udi_init_info.
87  */
88 typedef const struct {
89         udi_index_t     ops_idx;        //!< Non Zero driver assigned number
90         udi_index_t     meta_idx;       //!< Metalanguage Selector
91         udi_index_t     meta_ops_num;   //!< Metalanguage Operation
92         udi_size_t      chan_context_size;
93         udi_ops_vector_t        *ops_vector;    //!< Array of function pointers
94         const udi_ubit8_t       *op_flags;
95 } udi_ops_init_t;
96
97 /**
98  */
99 typedef const struct {
100         udi_index_t     region_idx;
101         udi_size_t      rdata_size;
102 } udi_secondary_init_t;
103
104
105 /**
106  */
107 typedef const struct {
108         udi_mgmt_ops_t  *mgmt_ops;
109         const udi_ubit8_t       *mgmt_op_flags;
110         udi_size_t      mgmt_scratch_requirement;
111         udi_ubit8_t     enumeration_attr_list_length;
112         udi_size_t      rdata_size;
113         udi_size_t      child_data_size;
114         udi_ubit8_t     per_parent_paths;
115 } udi_primary_init_t;
116
117 /**
118  */
119 typedef const struct {
120         udi_primary_init_t      *primary_init_info;
121         udi_secondary_init_t    *secondary_init_list;   //!< Array
122         udi_ops_init_t  *ops_init_list;
123         udi_cb_init_t   *cb_init_list;
124         udi_gcb_init_t  *gcb_init_list;
125         udi_cb_select_t *cb_select_list;
126 } udi_init_t;
127
128
129 //
130 // == Regions ==
131 //
132
133 /**
134  * udi_limits_t reflects implementation-dependent system limits, such as
135  * memory allocation and timer resolution limits, for a particular region. These
136  * limits may vary from region to region, but will remain constant for the life of
137  * a region.
138  */
139 typedef struct {
140         udi_size_t      max_legal_alloc;
141         udi_size_t      max_safe_alloc;
142         udi_size_t      max_trace_log_formatted_len;
143         udi_size_t      max_instance_attr_len;
144         udi_ubit32_t    min_curtime_res;
145         udi_ubit32_t    min_timer_res;
146 } udi_limits_t;
147
148 /**
149 The \a udi_init_context_t structure is stored at the front of the region
150 data area of each newly created region, providing initial data that a driver will
151 need to begin executing in the region. A pointer to this structure (and therefore
152 the region data area as a whole) is made available to the driver as the initial
153 channel context for its first channel.
154  */
155 typedef struct {
156         udi_index_t     region_idx;
157         udi_limits_t    limits;
158 } udi_init_context_t;
159
160 typedef struct {
161         void    *rdata;
162 } udi_chan_context_t;
163
164 #endif

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