]> git.proxmox.com Git - mirror_qemu.git/blame - include/qemu/notify.h
Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging
[mirror_qemu.git] / include / qemu / notify.h
CommitLineData
d1e70c5e
AL
1/*
2 * Notifier lists
3 *
4 * Copyright IBM, Corp. 2010
5 *
6 * Authors:
7 * Anthony Liguori <aliguori@us.ibm.com>
8 *
9 * This work is licensed under the terms of the GNU GPL, version 2. See
10 * the COPYING file in the top-level directory.
11 *
12 */
13
14#ifndef QEMU_NOTIFY_H
15#define QEMU_NOTIFY_H
16
1de7afc9 17#include "qemu/queue.h"
d1e70c5e
AL
18
19typedef struct Notifier Notifier;
20
21struct Notifier
22{
9e8dd451 23 void (*notify)(Notifier *notifier, void *data);
31552529 24 QLIST_ENTRY(Notifier) node;
d1e70c5e
AL
25};
26
27typedef struct NotifierList
28{
31552529 29 QLIST_HEAD(, Notifier) notifiers;
d1e70c5e
AL
30} NotifierList;
31
32#define NOTIFIER_LIST_INITIALIZER(head) \
31552529 33 { QLIST_HEAD_INITIALIZER((head).notifiers) }
d1e70c5e
AL
34
35void notifier_list_init(NotifierList *list);
36
37void notifier_list_add(NotifierList *list, Notifier *notifier);
38
31552529 39void notifier_remove(Notifier *notifier);
d1e70c5e 40
9e8dd451 41void notifier_list_notify(NotifierList *list, void *data);
374752a2
PD
42
43bool notifier_list_empty(NotifierList *list);
d1e70c5e 44
5dae8e5f
SH
45/* Same as Notifier but allows .notify() to return errors */
46typedef struct NotifierWithReturn NotifierWithReturn;
47
48struct NotifierWithReturn {
49 /**
50 * Return 0 on success (next notifier will be invoked), otherwise
51 * notifier_with_return_list_notify() will stop and return the value.
52 */
53 int (*notify)(NotifierWithReturn *notifier, void *data);
54 QLIST_ENTRY(NotifierWithReturn) node;
55};
56
57typedef struct NotifierWithReturnList {
58 QLIST_HEAD(, NotifierWithReturn) notifiers;
59} NotifierWithReturnList;
60
61#define NOTIFIER_WITH_RETURN_LIST_INITIALIZER(head) \
62 { QLIST_HEAD_INITIALIZER((head).notifiers) }
63
64void notifier_with_return_list_init(NotifierWithReturnList *list);
65
66void notifier_with_return_list_add(NotifierWithReturnList *list,
67 NotifierWithReturn *notifier);
68
69void notifier_with_return_remove(NotifierWithReturn *notifier);
70
71int notifier_with_return_list_notify(NotifierWithReturnList *list,
72 void *data);
73
d1e70c5e 74#endif