2 * \file udi_meta_mgmt.h
4 #ifndef _UDI_META_MGMT_H_
5 #define _UDI_META_MGMT_H_
7 typedef struct udi_mgmt_ops_s udi_mgmt_ops_t;
8 typedef struct udi_mgmt_cb_s udi_mgmt_cb_t;
9 typedef struct udi_usage_cb_s udi_usage_cb_t;
10 typedef struct udi_filter_element_s udi_filter_element_t;
11 typedef struct udi_enumerate_cb_s udi_enumerate_cb_t;
17 typedef void udi_usage_ind_op_t(udi_usage_cb_t *cb, udi_ubit8_t resource_level);
18 /* Values for resource_level */
19 #define UDI_RESOURCES_CRITICAL 1
20 #define UDI_RESOURCES_LOW 2
21 #define UDI_RESOURCES_NORMAL 3
22 #define UDI_RESOURCES_PLENTIFUL 4
24 extern void udi_static_usage(udi_usage_cb_t *cb, udi_ubit8_t resource_level);
26 extern void udi_usage_ind(udi_usage_cb_t *cb, udi_ubit8_t resource_level);
31 typedef void udi_usage_res_op_t(udi_usage_cb_t *cb);
33 extern void udi_usage_res(udi_usage_cb_t *cb);
36 * \name Enumerate this driver
39 typedef void udi_enumerate_req_op_t(udi_enumerate_cb_t *cb, udi_ubit8_t enumeration_level);
40 extern void udi_enumerate_req(udi_enumerate_cb_t *cb, udi_ubit8_t enumeration_level);
41 /* Values for enumeration_level */
42 #define UDI_ENUMERATE_START 1
43 #define UDI_ENUMERATE_START_RESCAN 2
44 #define UDI_ENUMERATE_NEXT 3
45 #define UDI_ENUMERATE_NEW 4
46 #define UDI_ENUMERATE_DIRECTED 5
47 #define UDI_ENUMERATE_RELEASE 6
49 extern void udi_enumerate_no_children(udi_enumerate_cb_t *cb, udi_ubit8_t enumeration_level);
55 * \name Enumeration Acknowlagement
58 typedef void udi_enumerate_ack_op_t(udi_enumerate_cb_t *cb, udi_ubit8_t enumeration_result, udi_index_t ops_idx);
59 /* Values for enumeration_result */
60 #define UDI_ENUMERATE_OK 0
61 #define UDI_ENUMERATE_LEAF 1
62 #define UDI_ENUMERATE_DONE 2
63 #define UDI_ENUMERATE_RESCAN 3
64 #define UDI_ENUMERATE_REMOVED 4
65 #define UDI_ENUMERATE_REMOVED_SELF 5
66 #define UDI_ENUMERATE_RELEASED 6
67 #define UDI_ENUMERATE_FAILED 255
68 extern void udi_enumerate_ack(udi_enumerate_cb_t *cb, udi_ubit8_t enumeration_result, udi_index_t ops_idx);
77 typedef void udi_devmgmt_req_op_t(udi_mgmt_cb_t *cb, udi_ubit8_t mgmt_op, udi_ubit8_t parent_ID);
79 typedef void udi_devmgmt_ack_op_t(udi_mgmt_cb_t *cb, udi_ubit8_t flags, udi_status_t status);
83 typedef void udi_final_cleanup_req_op_t(udi_mgmt_cb_t *cb);
84 typedef void udi_final_cleanup_ack_op_t(udi_mgmt_cb_t *cb);
92 udi_usage_ind_op_t *usage_ind_op;
93 udi_enumerate_req_op_t *enumerate_req_op;
94 udi_devmgmt_req_op_t *devmgmt_req_op;
95 udi_final_cleanup_req_op_t *final_cleanup_req_op;
103 struct udi_usage_cb_s
106 udi_trevent_t trace_mask;
107 udi_index_t meta_idx;
111 struct udi_filter_element_s
113 char attr_name[UDI_MAX_ATTR_NAMELEN];
114 udi_ubit8_t attr_min[UDI_MAX_ATTR_SIZE];
115 udi_ubit8_t attr_min_len;
116 udi_ubit8_t attr_max[UDI_MAX_ATTR_SIZE];
117 udi_ubit8_t attr_max_len;
118 udi_instance_attr_type_t attr_type;
119 udi_ubit32_t attr_stride;
121 struct udi_enumerate_cb_s
124 udi_ubit32_t child_ID;
126 udi_instance_attr_list_t *attr_list;
127 udi_ubit8_t attr_valid_length;
128 const udi_filter_element_t *filter_list;
129 udi_ubit8_t filter_list_length;
130 udi_ubit8_t parent_ID;
132 /* Special parent_ID filter values */
133 #define UDI_ANY_PARENT_ID 0
138 extern void udi_devmgmt_req(udi_mgmt_cb_t *cb, udi_ubit8_t mgmt_op, udi_ubit8_t parent_ID );
140 * \brief Values for ::udi_devmgmt_req \a mgmt_op
144 UDI_DMGMT_PREPARE_TO_SUSPEND = 1,
147 UDI_DMGMT_PARENT_SUSPENDED,
152 extern void udi_devmgmt_ack(udi_mgmt_cb_t *cb, udi_ubit8_t flags, udi_status_t status);
153 //!\brief Values for flags
154 #define UDI_DMGMT_NONTRANSPARENT (1U<<0)
155 //!\brief Meta-Specific Status Codes
156 #define UDI_DMGMT_STAT_ROUTING_CHANGE (UDI_STAT_META_SPECIFIC|1)
158 extern void udi_final_cleanup_req(udi_mgmt_cb_t *cb);
159 extern void udi_final_cleanup_ack(udi_mgmt_cb_t *cb);