aboutsummaryrefslogtreecommitdiff
path: root/include/sysemu/block-ram-registrar.h
blob: d8b2f7942ba1650bdf5b4244a05667a496ce089e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
 * BlockBackend RAM Registrar
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

#ifndef BLOCK_RAM_REGISTRAR_H
#define BLOCK_RAM_REGISTRAR_H

#include "exec/ramlist.h"

/**
 * struct BlockRAMRegistrar:
 *
 * Keeps RAMBlock memory registered with a BlockBackend using
 * blk_register_buf() including hotplugged memory.
 *
 * Emulated devices or other BlockBackend users initialize a BlockRAMRegistrar
 * with blk_ram_registrar_init() before submitting I/O requests with the
 * BDRV_REQ_REGISTERED_BUF flag set.
 */
typedef struct {
    BlockBackend *blk;
    RAMBlockNotifier notifier;
    bool ok;
} BlockRAMRegistrar;

void blk_ram_registrar_init(BlockRAMRegistrar *r, BlockBackend *blk);
void blk_ram_registrar_destroy(BlockRAMRegistrar *r);

/* Have all RAMBlocks been registered successfully? */
static inline bool blk_ram_registrar_ok(BlockRAMRegistrar *r)
{
    return r->ok;
}

#endif /* BLOCK_RAM_REGISTRAR_H */