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