struct device_notifier {
bool deleted;
enum device_notifier_type status;
- int (*func)(void *data);
+ int (*func)(void *data, void *user_data);
+ void *user_data;
};
static dd_list *device_notifier_list;
DD_LIST_FOREACH(a, b, d) \
if (e == d->e && f == (d->f))
-int register_notifier(enum device_notifier_type status, int (*func)(void *data))
+int register_notifier(enum device_notifier_type status,
+ int (*func)(void *data, void *user_data), void *user_data)
{
dd_list *n;
struct device_notifier *notifier;
notifier->status = status;
notifier->func = func;
+ notifier->user_data = user_data;
DD_LIST_APPEND(device_notifier_list, notifier);
return 0;
}
-int unregister_notifier(enum device_notifier_type status, int (*func)(void *data))
+int unregister_notifier(enum device_notifier_type status,
+ int (*func)(void *data, void *user_data))
{
dd_list *n;
struct device_notifier *notifier;
DD_LIST_FOREACH(device_notifier_list, n, notifier) {
if (!notifier->deleted && status == notifier->status) {
if (notifier->func)
- notifier->func(data);
+ notifier->func(data, notifier->user_data);
}
}
/*
* This is for internal callback method.
*/
-int register_notifier(enum device_notifier_type status, int (*func)(void *data));
-int unregister_notifier(enum device_notifier_type status, int (*func)(void *data));
+int register_notifier(enum device_notifier_type status,
+ int (*func)(void *data, void *user_data), void *user_data);
+int unregister_notifier(enum device_notifier_type status,
+ int (*func)(void *data, void *user_data));
void device_notify(enum device_notifier_type status, void *value);
#endif /* __DEVICE_NOTIFIER_H__ */
{ UDEV, "sis", "i", dbus_udev_handler },
};
-static int device_change_poweroff(void *data)
+static int device_change_poweroff(void *data, void *user_data)
{
uevent_control_stop(&kevent);
uevent_control_stop(&uevent);
{
int ret;
- register_notifier(DEVICE_NOTIFIER_POWEROFF, device_change_poweroff);
+ register_notifier(DEVICE_NOTIFIER_POWEROFF, device_change_poweroff,
+ NULL);
ret = register_edbus_method(DEVICED_PATH_SYSNOTI,
edbus_methods, ARRAY_SIZE(edbus_methods));
* DONE notifier
* @data: NULL, this parameter isn't used
*/
-static int pass_notifier_booting_done(void *data)
+static int pass_notifier_booting_done(void *data, void *user_data)
{
int i;
return 0;
}
-static int pass_notifier_pmqos(void *data)
+static int pass_notifier_pmqos(void *data, void *user_data)
{
int i;
static int pass_notifier_init(struct pass_policy *policy)
{
/* Register DEVICE_NOTIFIER_PMQOS */
- register_notifier(DEVICE_NOTIFIER_PMQOS, pass_notifier_pmqos);
+ register_notifier(DEVICE_NOTIFIER_PMQOS, pass_notifier_pmqos, policy);
/* Register DEVICE_NOTIFIER_BOOTING_DONE */
register_notifier(DEVICE_NOTIFIER_BOOTING_DONE,
- pass_notifier_booting_done);
+ pass_notifier_booting_done, policy);
/*
* FIXME: Current notifier of PASS didn't pass separate user_data
{ "MyfilesScroll", "i", "i", dbus_pmqos_handler },
};
-static int booting_done(void *data)
+static int booting_done(void *data, void *user_data)
{
static int done;
struct edbus_method *methods = NULL;
static void pmqos_init(void *data)
{
- register_notifier(DEVICE_NOTIFIER_BOOTING_DONE, booting_done);
+ register_notifier(DEVICE_NOTIFIER_BOOTING_DONE, booting_done, NULL);
}
static void pmqos_exit(void *data)