1*58ccf019SJoao Martins /* SPDX-License-Identifier: GPL-2.0 */ 2*58ccf019SJoao Martins /* 3*58ccf019SJoao Martins * Copyright (c) 2022, Oracle and/or its affiliates. 4*58ccf019SJoao Martins * Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved 5*58ccf019SJoao Martins */ 6*58ccf019SJoao Martins #ifndef _IOVA_BITMAP_H_ 7*58ccf019SJoao Martins #define _IOVA_BITMAP_H_ 8*58ccf019SJoao Martins 9*58ccf019SJoao Martins #include <linux/types.h> 10*58ccf019SJoao Martins 11*58ccf019SJoao Martins struct iova_bitmap; 12*58ccf019SJoao Martins 13*58ccf019SJoao Martins typedef int (*iova_bitmap_fn_t)(struct iova_bitmap *bitmap, 14*58ccf019SJoao Martins unsigned long iova, size_t length, 15*58ccf019SJoao Martins void *opaque); 16*58ccf019SJoao Martins 17*58ccf019SJoao Martins struct iova_bitmap *iova_bitmap_alloc(unsigned long iova, size_t length, 18*58ccf019SJoao Martins unsigned long page_size, 19*58ccf019SJoao Martins u64 __user *data); 20*58ccf019SJoao Martins void iova_bitmap_free(struct iova_bitmap *bitmap); 21*58ccf019SJoao Martins int iova_bitmap_for_each(struct iova_bitmap *bitmap, void *opaque, 22*58ccf019SJoao Martins iova_bitmap_fn_t fn); 23*58ccf019SJoao Martins void iova_bitmap_set(struct iova_bitmap *bitmap, 24*58ccf019SJoao Martins unsigned long iova, size_t length); 25*58ccf019SJoao Martins 26*58ccf019SJoao Martins #endif 27