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