ReactOS 0.4.16-dev-1946-g52006dd
notify.h File Reference
#include <uacpi/types.h>
Include dependency graph for notify.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

uacpi_status uacpi_install_notify_handler (uacpi_namespace_node *node, uacpi_notify_handler handler, uacpi_handle handler_context)
 
uacpi_status uacpi_uninstall_notify_handler (uacpi_namespace_node *node, uacpi_notify_handler handler)
 

Function Documentation

◆ uacpi_install_notify_handler()

uacpi_status uacpi_install_notify_handler ( uacpi_namespace_node node,
uacpi_notify_handler  handler,
uacpi_handle  handler_context 
)

Definition at line 134 of file notify.c.

138{
142 uacpi_device_notify_handler *new_handler;
143
145
146 if (node == uacpi_namespace_root()) {
147 obj = g_uacpi_rt_ctx.root_object;
148 } else {
152 );
154 return ret;
155 }
156
159 goto out_no_mutex;
160
162
163 handlers = obj->handlers;
164
167 goto out;
168 }
169
170 new_handler = uacpi_kernel_alloc_zeroed(sizeof(*new_handler));
171 if (uacpi_unlikely(new_handler == UACPI_NULL))
173
174 new_handler->callback = handler;
175 new_handler->user_context = handler_context;
176 new_handler->next = handlers->notify_head;
177
178 handlers->notify_head = new_handler;
179
180out:
182out_no_mutex:
183 if (node != uacpi_namespace_root())
185
186 return ret;
187}
static uacpi_status uacpi_release_native_mutex(uacpi_handle mtx)
Definition: mutex.h:25
static uacpi_status uacpi_acquire_native_mutex(uacpi_handle mtx)
Definition: mutex.h:13
UINT(* handler)(MSIPACKAGE *)
Definition: action.c:7512
#define UACPI_ENSURE_INIT_LEVEL_AT_LEAST(lvl)
Definition: context.h:127
struct uacpi_runtime_context g_uacpi_rt_ctx
Definition: uacpi.c:17
uacpi_status uacpi_namespace_node_acquire_object_typed(const uacpi_namespace_node *node, uacpi_object_type_bits, uacpi_object **out_obj)
Definition: namespace.c:670
#define uacpi_kernel_alloc_zeroed
Definition: stdlib.h:127
uacpi_namespace_node * uacpi_namespace_root(void)
Definition: namespace.c:267
#define uacpi_unlikely(expr)
Definition: compiler.h:58
#define UACPI_NULL
Definition: types.h:33
#define uacpi_unlikely_error(expr)
Definition: status.h:49
uacpi_status
Definition: status.h:10
@ UACPI_STATUS_OUT_OF_MEMORY
Definition: status.h:13
@ UACPI_STATUS_ALREADY_EXISTS
Definition: status.h:20
@ UACPI_OBJECT_PROCESSOR_BIT
Definition: types.h:140
@ UACPI_OBJECT_THERMAL_ZONE_BIT
Definition: types.h:141
@ UACPI_OBJECT_DEVICE_BIT
Definition: types.h:134
@ UACPI_INIT_LEVEL_SUBSYSTEM_INITIALIZED
Definition: types.h:66
void uacpi_object_unref(uacpi_object *obj)
Definition: types.c:755
return ret
Definition: mutex.c:146
static uacpi_device_notify_handler * handler_container(uacpi_handlers *handlers, uacpi_notify_handler target_handler)
Definition: notify.c:118
static uacpi_handle notify_mutex
Definition: notify.c:12
static xmlCharEncodingHandlerPtr * handlers
Definition: encoding.c:1317
uacpi_status uacpi_kernel_wait_for_work_completion(void)
Definition: uacpiosl.c:235
struct uacpi_device_notify_handler * next
Definition: types.h:95
uacpi_notify_handler callback
Definition: types.h:93
uacpi_handle user_context
Definition: types.h:94
Definition: dlist.c:348
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

◆ uacpi_uninstall_notify_handler()

uacpi_status uacpi_uninstall_notify_handler ( uacpi_namespace_node node,
uacpi_notify_handler  handler 
)

Definition at line 189 of file notify.c.

192{
196 uacpi_device_notify_handler *prev_handler, *containing = UACPI_NULL;
197
199
200 if (node == uacpi_namespace_root()) {
201 obj = g_uacpi_rt_ctx.root_object;
202 } else {
206 );
208 return ret;
209 }
210
213 goto out_no_mutex;
214
216
217 handlers = obj->handlers;
218
219 containing = handler_container(handlers, handler);
220 if (containing == UACPI_NULL) {
222 goto out;
223 }
224
225 prev_handler = handlers->notify_head;
226
227 // Are we the last linked handler?
228 if (prev_handler == containing) {
229 handlers->notify_head = containing->next;
230 goto out;
231 }
232
233 // Nope, we're somewhere in the middle. Do a search.
234 while (prev_handler) {
235 if (prev_handler->next == containing) {
236 prev_handler->next = containing->next;
237 goto out;
238 }
239
240 prev_handler = prev_handler->next;
241 }
242
243out:
245out_no_mutex:
246 if (node != uacpi_namespace_root())
248
250 uacpi_free(containing, sizeof(*containing));
251
252 return ret;
253}
#define uacpi_free(mem, _)
Definition: stdlib.h:96
#define uacpi_likely_success(expr)
Definition: status.h:53
@ UACPI_STATUS_NOT_FOUND
Definition: status.h:17