cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

notify.h (1913B)


      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
     17#include "qemu/queue.h"
     18
     19typedef struct Notifier Notifier;
     20
     21struct Notifier
     22{
     23    void (*notify)(Notifier *notifier, void *data);
     24    QLIST_ENTRY(Notifier) node;
     25};
     26
     27typedef struct NotifierList
     28{
     29    QLIST_HEAD(, Notifier) notifiers;
     30} NotifierList;
     31
     32#define NOTIFIER_LIST_INITIALIZER(head) \
     33    { QLIST_HEAD_INITIALIZER((head).notifiers) }
     34
     35void notifier_list_init(NotifierList *list);
     36
     37void notifier_list_add(NotifierList *list, Notifier *notifier);
     38
     39void notifier_remove(Notifier *notifier);
     40
     41void notifier_list_notify(NotifierList *list, void *data);
     42
     43bool notifier_list_empty(NotifierList *list);
     44
     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
     74#endif