1aa90d775SCédric Le Goater /* 2aa90d775SCédric Le Goater * VFIO container 3aa90d775SCédric Le Goater * 4aa90d775SCédric Le Goater * Copyright Red Hat, Inc. 2025 5aa90d775SCédric Le Goater * 6aa90d775SCédric Le Goater * SPDX-License-Identifier: GPL-2.0-or-later 7aa90d775SCédric Le Goater */ 8aa90d775SCédric Le Goater 9aa90d775SCédric Le Goater #ifndef HW_VFIO_CONTAINER_H 10aa90d775SCédric Le Goater #define HW_VFIO_CONTAINER_H 11aa90d775SCédric Le Goater 12aa90d775SCédric Le Goater #include "hw/vfio/vfio-container-base.h" 13*54857b08SSteve Sistare #include "hw/vfio/vfio-cpr.h" 14aa90d775SCédric Le Goater 15aa90d775SCédric Le Goater typedef struct VFIOContainer VFIOContainer; 16aa90d775SCédric Le Goater typedef struct VFIODevice VFIODevice; 17aa90d775SCédric Le Goater 18aa90d775SCédric Le Goater typedef struct VFIOGroup { 19aa90d775SCédric Le Goater int fd; 20aa90d775SCédric Le Goater int groupid; 21aa90d775SCédric Le Goater VFIOContainer *container; 22aa90d775SCédric Le Goater QLIST_HEAD(, VFIODevice) device_list; 23aa90d775SCédric Le Goater QLIST_ENTRY(VFIOGroup) next; 24aa90d775SCédric Le Goater QLIST_ENTRY(VFIOGroup) container_next; 25aa90d775SCédric Le Goater bool ram_block_discard_allowed; 26aa90d775SCédric Le Goater } VFIOGroup; 27aa90d775SCédric Le Goater 28aa90d775SCédric Le Goater typedef struct VFIOContainer { 29aa90d775SCédric Le Goater VFIOContainerBase bcontainer; 30aa90d775SCédric Le Goater int fd; /* /dev/vfio/vfio, empowered by the attached groups */ 31aa90d775SCédric Le Goater unsigned iommu_type; 32aa90d775SCédric Le Goater QLIST_HEAD(, VFIOGroup) group_list; 33*54857b08SSteve Sistare VFIOContainerCPR cpr; 34aa90d775SCédric Le Goater } VFIOContainer; 35aa90d775SCédric Le Goater 36aa90d775SCédric Le Goater OBJECT_DECLARE_SIMPLE_TYPE(VFIOContainer, VFIO_IOMMU_LEGACY); 37aa90d775SCédric Le Goater 38aa90d775SCédric Le Goater #endif /* HW_VFIO_CONTAINER_H */ 39