1*7f9241d8SStefan Hajnoczi /* 2*7f9241d8SStefan Hajnoczi * BlockBackend RAM Registrar 3*7f9241d8SStefan Hajnoczi * 4*7f9241d8SStefan Hajnoczi * SPDX-License-Identifier: GPL-2.0-or-later 5*7f9241d8SStefan Hajnoczi */ 6*7f9241d8SStefan Hajnoczi 7*7f9241d8SStefan Hajnoczi #ifndef BLOCK_RAM_REGISTRAR_H 8*7f9241d8SStefan Hajnoczi #define BLOCK_RAM_REGISTRAR_H 9*7f9241d8SStefan Hajnoczi 10*7f9241d8SStefan Hajnoczi #include "exec/ramlist.h" 11*7f9241d8SStefan Hajnoczi 12*7f9241d8SStefan Hajnoczi /** 13*7f9241d8SStefan Hajnoczi * struct BlockRAMRegistrar: 14*7f9241d8SStefan Hajnoczi * 15*7f9241d8SStefan Hajnoczi * Keeps RAMBlock memory registered with a BlockBackend using 16*7f9241d8SStefan Hajnoczi * blk_register_buf() including hotplugged memory. 17*7f9241d8SStefan Hajnoczi * 18*7f9241d8SStefan Hajnoczi * Emulated devices or other BlockBackend users initialize a BlockRAMRegistrar 19*7f9241d8SStefan Hajnoczi * with blk_ram_registrar_init() before submitting I/O requests with the 20*7f9241d8SStefan Hajnoczi * BDRV_REQ_REGISTERED_BUF flag set. 21*7f9241d8SStefan Hajnoczi */ 22*7f9241d8SStefan Hajnoczi typedef struct { 23*7f9241d8SStefan Hajnoczi BlockBackend *blk; 24*7f9241d8SStefan Hajnoczi RAMBlockNotifier notifier; 25*7f9241d8SStefan Hajnoczi bool ok; 26*7f9241d8SStefan Hajnoczi } BlockRAMRegistrar; 27*7f9241d8SStefan Hajnoczi 28*7f9241d8SStefan Hajnoczi void blk_ram_registrar_init(BlockRAMRegistrar *r, BlockBackend *blk); 29*7f9241d8SStefan Hajnoczi void blk_ram_registrar_destroy(BlockRAMRegistrar *r); 30*7f9241d8SStefan Hajnoczi 31*7f9241d8SStefan Hajnoczi /* Have all RAMBlocks been registered successfully? */ blk_ram_registrar_ok(BlockRAMRegistrar * r)32*7f9241d8SStefan Hajnoczistatic inline bool blk_ram_registrar_ok(BlockRAMRegistrar *r) 33*7f9241d8SStefan Hajnoczi { 34*7f9241d8SStefan Hajnoczi return r->ok; 35*7f9241d8SStefan Hajnoczi } 36*7f9241d8SStefan Hajnoczi 37*7f9241d8SStefan Hajnoczi #endif /* BLOCK_RAM_REGISTRAR_H */ 38