xref: /openbmc/qemu/include/hw/vfio/vfio-cpr.h (revision dac0dd68d9b150a6aa334ab8ee9aeba011d54b32)
1 /*
2  * VFIO CPR
3  *
4  * Copyright (c) 2025 Oracle and/or its affiliates.
5  *
6  * SPDX-License-Identifier: GPL-2.0-or-later
7  */
8 
9 #ifndef HW_VFIO_VFIO_CPR_H
10 #define HW_VFIO_VFIO_CPR_H
11 
12 #include "migration/misc.h"
13 
14 struct VFIOContainer;
15 struct VFIOContainerBase;
16 struct VFIOGroup;
17 
18 typedef struct VFIOContainerCPR {
19     Error *blocker;
20     int (*saved_dma_map)(const struct VFIOContainerBase *bcontainer,
21                          hwaddr iova, ram_addr_t size,
22                          void *vaddr, bool readonly, MemoryRegion *mr);
23 } VFIOContainerCPR;
24 
25 typedef struct VFIODeviceCPR {
26     Error *mdev_blocker;
27 } VFIODeviceCPR;
28 
29 bool vfio_legacy_cpr_register_container(struct VFIOContainer *container,
30                                         Error **errp);
31 void vfio_legacy_cpr_unregister_container(struct VFIOContainer *container);
32 
33 int vfio_cpr_reboot_notifier(NotifierWithReturn *notifier, MigrationEvent *e,
34                              Error **errp);
35 
36 bool vfio_cpr_register_container(struct VFIOContainerBase *bcontainer,
37                                  Error **errp);
38 void vfio_cpr_unregister_container(struct VFIOContainerBase *bcontainer);
39 
40 int vfio_cpr_group_get_device_fd(int d, const char *name);
41 
42 bool vfio_cpr_container_match(struct VFIOContainer *container,
43                               struct VFIOGroup *group, int fd);
44 
45 #endif /* HW_VFIO_VFIO_CPR_H */
46