xref: /openbmc/qemu/util/notify.c (revision ea0ec714)
1baacf047SPaolo Bonzini /*
2baacf047SPaolo Bonzini  * Notifier lists
3baacf047SPaolo Bonzini  *
4baacf047SPaolo Bonzini  * Copyright IBM, Corp. 2010
5baacf047SPaolo Bonzini  *
6baacf047SPaolo Bonzini  * Authors:
7baacf047SPaolo Bonzini  *  Anthony Liguori   <aliguori@us.ibm.com>
8baacf047SPaolo Bonzini  *
9baacf047SPaolo Bonzini  * This work is licensed under the terms of the GNU GPL, version 2.  See
10baacf047SPaolo Bonzini  * the COPYING file in the top-level directory.
11baacf047SPaolo Bonzini  *
12baacf047SPaolo Bonzini  * Contributions after 2012-01-13 are licensed under the terms of the
13baacf047SPaolo Bonzini  * GNU GPL, version 2 or (at your option) any later version.
14baacf047SPaolo Bonzini  */
15baacf047SPaolo Bonzini 
16aafd7584SPeter Maydell #include "qemu/osdep.h"
17baacf047SPaolo Bonzini #include "qemu/notify.h"
18baacf047SPaolo Bonzini 
notifier_list_init(NotifierList * list)19baacf047SPaolo Bonzini void notifier_list_init(NotifierList *list)
20baacf047SPaolo Bonzini {
21baacf047SPaolo Bonzini     QLIST_INIT(&list->notifiers);
22baacf047SPaolo Bonzini }
23baacf047SPaolo Bonzini 
notifier_list_add(NotifierList * list,Notifier * notifier)24baacf047SPaolo Bonzini void notifier_list_add(NotifierList *list, Notifier *notifier)
25baacf047SPaolo Bonzini {
26baacf047SPaolo Bonzini     QLIST_INSERT_HEAD(&list->notifiers, notifier, node);
27baacf047SPaolo Bonzini }
28baacf047SPaolo Bonzini 
notifier_remove(Notifier * notifier)29baacf047SPaolo Bonzini void notifier_remove(Notifier *notifier)
30baacf047SPaolo Bonzini {
31baacf047SPaolo Bonzini     QLIST_REMOVE(notifier, node);
32baacf047SPaolo Bonzini }
33baacf047SPaolo Bonzini 
notifier_list_notify(NotifierList * list,void * data)34baacf047SPaolo Bonzini void notifier_list_notify(NotifierList *list, void *data)
35baacf047SPaolo Bonzini {
36baacf047SPaolo Bonzini     Notifier *notifier, *next;
37baacf047SPaolo Bonzini 
38baacf047SPaolo Bonzini     QLIST_FOREACH_SAFE(notifier, &list->notifiers, node, next) {
39baacf047SPaolo Bonzini         notifier->notify(notifier, data);
40baacf047SPaolo Bonzini     }
41baacf047SPaolo Bonzini }
425dae8e5fSStefan Hajnoczi 
notifier_list_empty(NotifierList * list)43*374752a2SPaul Durrant bool notifier_list_empty(NotifierList *list)
44*374752a2SPaul Durrant {
45*374752a2SPaul Durrant     return QLIST_EMPTY(&list->notifiers);
46*374752a2SPaul Durrant }
47*374752a2SPaul Durrant 
notifier_with_return_list_init(NotifierWithReturnList * list)485dae8e5fSStefan Hajnoczi void notifier_with_return_list_init(NotifierWithReturnList *list)
495dae8e5fSStefan Hajnoczi {
505dae8e5fSStefan Hajnoczi     QLIST_INIT(&list->notifiers);
515dae8e5fSStefan Hajnoczi }
525dae8e5fSStefan Hajnoczi 
notifier_with_return_list_add(NotifierWithReturnList * list,NotifierWithReturn * notifier)535dae8e5fSStefan Hajnoczi void notifier_with_return_list_add(NotifierWithReturnList *list,
545dae8e5fSStefan Hajnoczi                                    NotifierWithReturn *notifier)
555dae8e5fSStefan Hajnoczi {
565dae8e5fSStefan Hajnoczi     QLIST_INSERT_HEAD(&list->notifiers, notifier, node);
575dae8e5fSStefan Hajnoczi }
585dae8e5fSStefan Hajnoczi 
notifier_with_return_remove(NotifierWithReturn * notifier)595dae8e5fSStefan Hajnoczi void notifier_with_return_remove(NotifierWithReturn *notifier)
605dae8e5fSStefan Hajnoczi {
615dae8e5fSStefan Hajnoczi     QLIST_REMOVE(notifier, node);
625dae8e5fSStefan Hajnoczi }
635dae8e5fSStefan Hajnoczi 
notifier_with_return_list_notify(NotifierWithReturnList * list,void * data)645dae8e5fSStefan Hajnoczi int notifier_with_return_list_notify(NotifierWithReturnList *list, void *data)
655dae8e5fSStefan Hajnoczi {
665dae8e5fSStefan Hajnoczi     NotifierWithReturn *notifier, *next;
675dae8e5fSStefan Hajnoczi     int ret = 0;
685dae8e5fSStefan Hajnoczi 
695dae8e5fSStefan Hajnoczi     QLIST_FOREACH_SAFE(notifier, &list->notifiers, node, next) {
705dae8e5fSStefan Hajnoczi         ret = notifier->notify(notifier, data);
715dae8e5fSStefan Hajnoczi         if (ret != 0) {
725dae8e5fSStefan Hajnoczi             break;
735dae8e5fSStefan Hajnoczi         }
745dae8e5fSStefan Hajnoczi     }
755dae8e5fSStefan Hajnoczi     return ret;
765dae8e5fSStefan Hajnoczi }
77