10 typedef void udi_op_t(void);
12 typedef udi_op_t const *udi_ops_vector_t;
14 typedef const udi_ubit8_t udi_layout_t;
16 typedef udi_ubit32_t udi_trevent_t;
18 #include <_udi/values.h>
21 udi_channel_t channel;
24 void *initiator_context;
32 #define UDI_MAX_ATTR_NAMELEN 32
33 #define UDI_MAX_ATTR_SIZE 64
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;
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;
56 #include <_udi/meta_mgmt.h>
60 typedef const struct {
62 udi_size_t scratch_requirement;
67 typedef const struct {
74 typedef const struct {
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;
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.
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;
99 typedef const struct {
100 udi_index_t region_idx;
101 udi_size_t rdata_size;
102 } udi_secondary_init_t;
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;
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;
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
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;
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.
156 udi_index_t region_idx;
158 } udi_init_context_t;
162 } udi_chan_context_t;
165 extern void udi_final_cleanup_ack(udi_mgmt_cb_t *cb);
167 // --- Channel Events ---
168 extern void udi_channel_event_complete(udi_channel_event_cb_t *cb, udi_status_t status);