xref: /openbmc/linux/include/linux/iova_bitmap.h (revision 58ccf019)
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