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