Modules/UDI - Adding PCI and MEI headers
[tpg/acess2.git] / KernelLand / Modules / Interfaces / 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 extern void     udi_usage_ind(udi_usage_cb_t *cb, udi_ubit8_t resource_level);
27 /**
28  * \}
29  */
30
31 typedef void udi_usage_res_op_t(udi_usage_cb_t *cb);
32
33 extern void     udi_usage_res(udi_usage_cb_t *cb);
34
35 /**
36  * \name Enumerate this driver
37  * \{
38  */
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
48 /* Proxy */
49 extern void udi_enumerate_no_children(udi_enumerate_cb_t *cb, udi_ubit8_t enumeration_level);
50 /**
51  * \}
52  */
53
54 /**
55  * \name Enumeration Acknowlagement
56  * \{
57  */
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);
69 /**
70  * \}
71  */
72
73 /**
74  * \name 
75  * \{
76  */
77 typedef void udi_devmgmt_req_op_t(udi_mgmt_cb_t *cb, udi_ubit8_t mgmt_op, udi_ubit8_t parent_ID);
78
79 typedef void udi_devmgmt_ack_op_t(udi_mgmt_cb_t *cb, udi_ubit8_t flags, udi_status_t status);
80 /**
81  * \}
82  */
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);
85
86
87
88
89
90 struct udi_mgmt_ops_s
91 {
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;
96 };
97
98 struct udi_mgmt_cb_s
99 {
100         udi_cb_t        gcb;
101 };
102
103 struct udi_usage_cb_s
104 {
105         udi_cb_t        gcb;
106         udi_trevent_t   trace_mask;
107         udi_index_t     meta_idx;
108 };
109
110
111 struct udi_filter_element_s
112 {
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;
120 };
121 struct udi_enumerate_cb_s
122 {
123      udi_cb_t   gcb;
124      udi_ubit32_t       child_ID;
125      void       *child_data;
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;
131 };
132 /* Special parent_ID filter values */
133 #define UDI_ANY_PARENT_ID       0
134
135 /**
136  * \brief 
137  */
138 extern void     udi_devmgmt_req(udi_mgmt_cb_t *cb, udi_ubit8_t mgmt_op, udi_ubit8_t parent_ID );
139 /**
140  * \brief Values for ::udi_devmgmt_req \a mgmt_op
141  */
142 enum eDMGMT
143 {
144         UDI_DMGMT_PREPARE_TO_SUSPEND = 1,
145         UDI_DMGMT_SUSPEND,
146         UDI_DMGMT_SHUTDOWN,
147         UDI_DMGMT_PARENT_SUSPENDED,
148         UDI_DMGMT_RESUME,
149         UDI_DMGMT_UNBIND
150 };
151
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)
157
158 extern void udi_final_cleanup_req(udi_mgmt_cb_t *cb);
159 extern void udi_final_cleanup_ack(udi_mgmt_cb_t *cb);
160
161
162 #endif

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