1*b553d2c4SCédric Le Goater /* 2*b553d2c4SCédric Le Goater * VFIO migration 3*b553d2c4SCédric Le Goater * 4*b553d2c4SCédric Le Goater * Copyright Red Hat, Inc. 2025 5*b553d2c4SCédric Le Goater * 6*b553d2c4SCédric Le Goater * SPDX-License-Identifier: GPL-2.0-or-later 7*b553d2c4SCédric Le Goater */ 8*b553d2c4SCédric Le Goater 9*b553d2c4SCédric Le Goater #ifndef HW_VFIO_VFIO_MIGRATION_INTERNAL_H 10*b553d2c4SCédric Le Goater #define HW_VFIO_VFIO_MIGRATION_INTERNAL_H 11*b553d2c4SCédric Le Goater 12*b553d2c4SCédric Le Goater #ifdef CONFIG_LINUX 13*b553d2c4SCédric Le Goater #include <linux/vfio.h> 14*b553d2c4SCédric Le Goater #endif 15*b553d2c4SCédric Le Goater 16*b553d2c4SCédric Le Goater #include "qemu/typedefs.h" 17*b553d2c4SCédric Le Goater #include "qemu/notify.h" 18*b553d2c4SCédric Le Goater 19*b553d2c4SCédric Le Goater /* 20*b553d2c4SCédric Le Goater * Flags to be used as unique delimiters for VFIO devices in the migration 21*b553d2c4SCédric Le Goater * stream. These flags are composed as: 22*b553d2c4SCédric Le Goater * 0xffffffff => MSB 32-bit all 1s 23*b553d2c4SCédric Le Goater * 0xef10 => Magic ID, represents emulated (virtual) function IO 24*b553d2c4SCédric Le Goater * 0x0000 => 16-bits reserved for flags 25*b553d2c4SCédric Le Goater * 26*b553d2c4SCédric Le Goater * The beginning of state information is marked by _DEV_CONFIG_STATE, 27*b553d2c4SCédric Le Goater * _DEV_SETUP_STATE, or _DEV_DATA_STATE, respectively. The end of a 28*b553d2c4SCédric Le Goater * certain state information is marked by _END_OF_STATE. 29*b553d2c4SCédric Le Goater */ 30*b553d2c4SCédric Le Goater #define VFIO_MIG_FLAG_END_OF_STATE (0xffffffffef100001ULL) 31*b553d2c4SCédric Le Goater #define VFIO_MIG_FLAG_DEV_CONFIG_STATE (0xffffffffef100002ULL) 32*b553d2c4SCédric Le Goater #define VFIO_MIG_FLAG_DEV_SETUP_STATE (0xffffffffef100003ULL) 33*b553d2c4SCédric Le Goater #define VFIO_MIG_FLAG_DEV_DATA_STATE (0xffffffffef100004ULL) 34*b553d2c4SCédric Le Goater #define VFIO_MIG_FLAG_DEV_INIT_DATA_SENT (0xffffffffef100005ULL) 35*b553d2c4SCédric Le Goater 36*b553d2c4SCédric Le Goater typedef struct VFIODevice VFIODevice; 37*b553d2c4SCédric Le Goater typedef struct VFIOMultifd VFIOMultifd; 38*b553d2c4SCédric Le Goater 39*b553d2c4SCédric Le Goater typedef struct VFIOMigration { 40*b553d2c4SCédric Le Goater struct VFIODevice *vbasedev; 41*b553d2c4SCédric Le Goater VMChangeStateEntry *vm_state; 42*b553d2c4SCédric Le Goater NotifierWithReturn migration_state; 43*b553d2c4SCédric Le Goater uint32_t device_state; 44*b553d2c4SCédric Le Goater int data_fd; 45*b553d2c4SCédric Le Goater void *data_buffer; 46*b553d2c4SCédric Le Goater size_t data_buffer_size; 47*b553d2c4SCédric Le Goater uint64_t mig_flags; 48*b553d2c4SCédric Le Goater uint64_t precopy_init_size; 49*b553d2c4SCédric Le Goater uint64_t precopy_dirty_size; 50*b553d2c4SCédric Le Goater bool multifd_transfer; 51*b553d2c4SCédric Le Goater VFIOMultifd *multifd; 52*b553d2c4SCédric Le Goater bool initial_data_sent; 53*b553d2c4SCédric Le Goater 54*b553d2c4SCédric Le Goater bool event_save_iterate_started; 55*b553d2c4SCédric Le Goater bool event_precopy_empty_hit; 56*b553d2c4SCédric Le Goater } VFIOMigration; 57*b553d2c4SCédric Le Goater 58*b553d2c4SCédric Le Goater bool vfio_migration_realize(VFIODevice *vbasedev, Error **errp); 59*b553d2c4SCédric Le Goater void vfio_migration_exit(VFIODevice *vbasedev); 60*b553d2c4SCédric Le Goater int vfio_save_device_config_state(QEMUFile *f, void *opaque, Error **errp); 61*b553d2c4SCédric Le Goater int vfio_load_device_config_state(QEMUFile *f, void *opaque); 62*b553d2c4SCédric Le Goater 63*b553d2c4SCédric Le Goater #ifdef CONFIG_LINUX 64*b553d2c4SCédric Le Goater int vfio_migration_set_state(VFIODevice *vbasedev, 65*b553d2c4SCédric Le Goater enum vfio_device_mig_state new_state, 66*b553d2c4SCédric Le Goater enum vfio_device_mig_state recover_state, 67*b553d2c4SCédric Le Goater Error **errp); 68*b553d2c4SCédric Le Goater #endif 69*b553d2c4SCédric Le Goater 70*b553d2c4SCédric Le Goater void vfio_migration_add_bytes_transferred(unsigned long val); 71*b553d2c4SCédric Le Goater 72*b553d2c4SCédric Le Goater #endif /* HW_VFIO_VFIO_MIGRATION_INTERNAL_H */ 73