xref: /openbmc/qemu/include/hw/vfio/vfio-cpr.h (revision dac0dd68d9b150a6aa334ab8ee9aeba011d54b32)
13ed34463SSteve Sistare /*
23ed34463SSteve Sistare  * VFIO CPR
33ed34463SSteve Sistare  *
43ed34463SSteve Sistare  * Copyright (c) 2025 Oracle and/or its affiliates.
53ed34463SSteve Sistare  *
63ed34463SSteve Sistare  * SPDX-License-Identifier: GPL-2.0-or-later
73ed34463SSteve Sistare  */
83ed34463SSteve Sistare 
93ed34463SSteve Sistare #ifndef HW_VFIO_VFIO_CPR_H
103ed34463SSteve Sistare #define HW_VFIO_VFIO_CPR_H
113ed34463SSteve Sistare 
1254857b08SSteve Sistare #include "migration/misc.h"
1354857b08SSteve Sistare 
1454857b08SSteve Sistare struct VFIOContainer;
153ed34463SSteve Sistare struct VFIOContainerBase;
16c29a65edSSteve Sistare struct VFIOGroup;
173ed34463SSteve Sistare 
1854857b08SSteve Sistare typedef struct VFIOContainerCPR {
1954857b08SSteve Sistare     Error *blocker;
207e9f2141SSteve Sistare     int (*saved_dma_map)(const struct VFIOContainerBase *bcontainer,
217e9f2141SSteve Sistare                          hwaddr iova, ram_addr_t size,
227e9f2141SSteve Sistare                          void *vaddr, bool readonly, MemoryRegion *mr);
2354857b08SSteve Sistare } VFIOContainerCPR;
2454857b08SSteve Sistare 
25*dac0dd68SSteve Sistare typedef struct VFIODeviceCPR {
26*dac0dd68SSteve Sistare     Error *mdev_blocker;
27*dac0dd68SSteve Sistare } VFIODeviceCPR;
2854857b08SSteve Sistare 
2954857b08SSteve Sistare bool vfio_legacy_cpr_register_container(struct VFIOContainer *container,
3054857b08SSteve Sistare                                         Error **errp);
3154857b08SSteve Sistare void vfio_legacy_cpr_unregister_container(struct VFIOContainer *container);
3254857b08SSteve Sistare 
3354857b08SSteve Sistare int vfio_cpr_reboot_notifier(NotifierWithReturn *notifier, MigrationEvent *e,
3454857b08SSteve Sistare                              Error **errp);
3554857b08SSteve Sistare 
363ed34463SSteve Sistare bool vfio_cpr_register_container(struct VFIOContainerBase *bcontainer,
373ed34463SSteve Sistare                                  Error **errp);
383ed34463SSteve Sistare void vfio_cpr_unregister_container(struct VFIOContainerBase *bcontainer);
393ed34463SSteve Sistare 
40c29a65edSSteve Sistare int vfio_cpr_group_get_device_fd(int d, const char *name);
41c29a65edSSteve Sistare 
42c29a65edSSteve Sistare bool vfio_cpr_container_match(struct VFIOContainer *container,
43c29a65edSSteve Sistare                               struct VFIOGroup *group, int fd);
44c29a65edSSteve Sistare 
453ed34463SSteve Sistare #endif /* HW_VFIO_VFIO_CPR_H */
46