97eccf2debbec7cf0a4a5ddb4d003739543d221e
[tpg/acess2.git] / Modules / UDI / include / udi / meta_mgmt.h
1 /**
2  * \file udi_meta_mgmt.h
3  */
4 #ifndef _UDI_META_MGMT_H_
5 #define _UDI_META_MGMT_H_
6
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;
12
13 /**
14  * \name Specify Usage
15  * \{
16  */
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
23 /* Proxy */
24 extern void     udi_static_usage(udi_usage_cb_t *cb, udi_ubit8_t resource_level);
25 /**
26  * \}
27  */
28
29 typedef void udi_usage_res_op_t(udi_usage_cb_t *cb);
30
31 /**
32  * \name Enumerate this driver
33  * \{
34  */
35 typedef void udi_enumerate_req_op_t(udi_enumerate_cb_t *cb, udi_ubit8_t enumeration_level);
36 /* Values for enumeration_level */
37 #define UDI_ENUMERATE_START           1
38 #define UDI_ENUMERATE_START_RESCAN    2
39 #define UDI_ENUMERATE_NEXT            3
40 #define UDI_ENUMERATE_NEW             4
41 #define UDI_ENUMERATE_DIRECTED        5
42 #define UDI_ENUMERATE_RELEASE         6
43 /* Proxy */
44 extern void udi_enumerate_no_children(udi_enumerate_cb_t *cb, udi_ubit8_t enumeration_level);
45 /**
46  * \}
47  */
48
49 /**
50  * \name Enumeration Acknowlagement
51  * \{
52  */
53 typedef void udi_enumerate_ack_op_t(udi_enumerate_cb_t *cb, udi_ubit8_t enumeration_result, udi_index_t ops_idx);
54 /* Values for enumeration_result */
55 #define UDI_ENUMERATE_OK             0
56 #define UDI_ENUMERATE_LEAF           1
57 #define UDI_ENUMERATE_DONE           2
58 #define UDI_ENUMERATE_RESCAN         3
59 #define UDI_ENUMERATE_REMOVED        4
60 #define UDI_ENUMERATE_REMOVED_SELF   5
61 #define UDI_ENUMERATE_RELEASED       6
62 #define UDI_ENUMERATE_FAILED         255
63 /**
64  * \}
65  */
66
67 /**
68  * \name 
69  * \{
70  */
71 typedef void udi_devmgmt_req_op_t(udi_mgmt_cb_t *cb, udi_ubit8_t mgmt_op, udi_ubit8_t parent_ID);
72
73 typedef void udi_devmgmt_ack_op_t(udi_mgmt_cb_t *cb, udi_ubit8_t flags, udi_status_t status);
74 /**
75  * \}
76  */
77 typedef void udi_final_cleanup_req_op_t(udi_mgmt_cb_t *cb);
78 typedef void udi_final_cleanup_ack_op_t(udi_mgmt_cb_t *cb);
79
80
81
82
83
84 struct udi_mgmt_ops_s
85 {
86         udi_usage_ind_op_t      *usage_ind_op;
87         udi_enumerate_req_op_t  *enumerate_req_op;
88         udi_devmgmt_req_op_t    *devmgmt_req_op;
89         udi_final_cleanup_req_op_t      *final_cleanup_req_op;
90 };
91
92 struct udi_mgmt_cb_s
93 {
94         udi_cb_t        gcb;
95 };
96
97 struct udi_usage_cb_s
98 {
99         udi_cb_t        gcb;
100         udi_trevent_t   trace_mask;
101         udi_index_t     meta_idx;
102 };
103
104
105 struct udi_filter_element_s
106 {
107      char       attr_name[UDI_MAX_ATTR_NAMELEN];
108      udi_ubit8_t        attr_min[UDI_MAX_ATTR_SIZE];
109      udi_ubit8_t        attr_min_len;
110      udi_ubit8_t        attr_max[UDI_MAX_ATTR_SIZE];
111      udi_ubit8_t        attr_max_len;
112      udi_instance_attr_type_t   attr_type;
113      udi_ubit32_t       attr_stride;
114 };
115 struct udi_enumerate_cb_s
116 {
117      udi_cb_t   gcb;
118      udi_ubit32_t       child_ID;
119      void       *child_data;
120      udi_instance_attr_list_t   *attr_list;
121      udi_ubit8_t        attr_valid_length;
122      const udi_filter_element_t *filter_list;
123      udi_ubit8_t        filter_list_length;
124      udi_ubit8_t        parent_ID;
125 };
126 /* Special parent_ID filter values */
127 #define UDI_ANY_PARENT_ID       0
128
129 /**
130  * \brief 
131  */
132 extern void     udi_devmgmt_req(udi_mgmt_cb_t *cb, udi_ubit8_t mgmt_op, udi_ubit8_t parent_ID );
133 /**
134  * \brief Values for ::udi_devmgmt_req \a mgmt_op
135  */
136 enum eDMGMT
137 {
138         UDI_DMGMT_PREPARE_TO_SUSPEND = 1,
139         UDI_DMGMT_SUSPEND,
140         UDI_DMGMT_SHUTDOWN,
141         UDI_DMGMT_PARENT_SUSPENDED,
142         UDI_DMGMT_RESUME,
143         UDI_DMGMT_UNBIND
144 };
145
146 extern void     udi_devmgmt_ack(udi_mgmt_cb_t *cb, udi_ubit8_t flags, udi_status_t status);
147 //!\brief Values for flags
148 #define UDI_DMGMT_NONTRANSPARENT        (1U<<0)
149 //!\brief Meta-Specific Status Codes
150 #define UDI_DMGMT_STAT_ROUTING_CHANGE   (UDI_STAT_META_SPECIFIC|1)
151
152 extern void udi_final_cleanup_req(udi_mgmt_cb_t *cb);
153 extern void udi_final_cleanup_ack(udi_mgmt_cb_t *cb);
154
155
156 #endif

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