xref: /openbmc/qemu/include/sysemu/iommufd.h (revision c80e2251)
1 /*
2  * iommufd container backend declaration
3  *
4  * Copyright (C) 2024 Intel Corporation.
5  * Copyright Red Hat, Inc. 2024
6  *
7  * Authors: Yi Liu <yi.l.liu@intel.com>
8  *          Eric Auger <eric.auger@redhat.com>
9  *          Zhenzhong Duan <zhenzhong.duan@intel.com>
10  *
11  * SPDX-License-Identifier: GPL-2.0-or-later
12  */
13 
14 #ifndef SYSEMU_IOMMUFD_H
15 #define SYSEMU_IOMMUFD_H
16 
17 #include "qom/object.h"
18 #include "exec/hwaddr.h"
19 #include "exec/cpu-common.h"
20 #include "sysemu/host_iommu_device.h"
21 
22 #define TYPE_IOMMUFD_BACKEND "iommufd"
23 OBJECT_DECLARE_TYPE(IOMMUFDBackend, IOMMUFDBackendClass, IOMMUFD_BACKEND)
24 
25 struct IOMMUFDBackendClass {
26     ObjectClass parent_class;
27 };
28 
29 struct IOMMUFDBackend {
30     Object parent;
31 
32     /*< protected >*/
33     int fd;            /* /dev/iommu file descriptor */
34     bool owned;        /* is the /dev/iommu opened internally */
35     uint32_t users;
36 
37     /*< public >*/
38 };
39 
40 bool iommufd_backend_connect(IOMMUFDBackend *be, Error **errp);
41 void iommufd_backend_disconnect(IOMMUFDBackend *be);
42 
43 bool iommufd_backend_alloc_ioas(IOMMUFDBackend *be, uint32_t *ioas_id,
44                                 Error **errp);
45 void iommufd_backend_free_id(IOMMUFDBackend *be, uint32_t id);
46 int iommufd_backend_map_dma(IOMMUFDBackend *be, uint32_t ioas_id, hwaddr iova,
47                             ram_addr_t size, void *vaddr, bool readonly);
48 int iommufd_backend_unmap_dma(IOMMUFDBackend *be, uint32_t ioas_id,
49                               hwaddr iova, ram_addr_t size);
50 bool iommufd_backend_get_device_info(IOMMUFDBackend *be, uint32_t devid,
51                                      uint32_t *type, void *data, uint32_t len,
52                                      uint64_t *caps, Error **errp);
53 bool iommufd_backend_alloc_hwpt(IOMMUFDBackend *be, uint32_t dev_id,
54                                 uint32_t pt_id, uint32_t flags,
55                                 uint32_t data_type, uint32_t data_len,
56                                 void *data_ptr, uint32_t *out_hwpt,
57                                 Error **errp);
58 bool iommufd_backend_set_dirty_tracking(IOMMUFDBackend *be, uint32_t hwpt_id,
59                                         bool start, Error **errp);
60 bool iommufd_backend_get_dirty_bitmap(IOMMUFDBackend *be, uint32_t hwpt_id,
61                                       uint64_t iova, ram_addr_t size,
62                                       uint64_t page_size, uint64_t *data,
63                                       Error **errp);
64 
65 #define TYPE_HOST_IOMMU_DEVICE_IOMMUFD TYPE_HOST_IOMMU_DEVICE "-iommufd"
66 #endif
67