158ccf019SJoao Martins /* SPDX-License-Identifier: GPL-2.0 */
258ccf019SJoao Martins /*
358ccf019SJoao Martins * Copyright (c) 2022, Oracle and/or its affiliates.
458ccf019SJoao Martins * Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved
558ccf019SJoao Martins */
658ccf019SJoao Martins #ifndef _IOVA_BITMAP_H_
758ccf019SJoao Martins #define _IOVA_BITMAP_H_
858ccf019SJoao Martins
958ccf019SJoao Martins #include <linux/types.h>
10*8c9c727bSJoao Martins #include <linux/errno.h>
1158ccf019SJoao Martins
1258ccf019SJoao Martins struct iova_bitmap;
1358ccf019SJoao Martins
1458ccf019SJoao Martins typedef int (*iova_bitmap_fn_t)(struct iova_bitmap *bitmap,
1558ccf019SJoao Martins unsigned long iova, size_t length,
1658ccf019SJoao Martins void *opaque);
1758ccf019SJoao Martins
18*8c9c727bSJoao Martins #if IS_ENABLED(CONFIG_IOMMUFD_DRIVER)
1958ccf019SJoao Martins struct iova_bitmap *iova_bitmap_alloc(unsigned long iova, size_t length,
2058ccf019SJoao Martins unsigned long page_size,
2158ccf019SJoao Martins u64 __user *data);
2258ccf019SJoao Martins void iova_bitmap_free(struct iova_bitmap *bitmap);
2358ccf019SJoao Martins int iova_bitmap_for_each(struct iova_bitmap *bitmap, void *opaque,
2458ccf019SJoao Martins iova_bitmap_fn_t fn);
2558ccf019SJoao Martins void iova_bitmap_set(struct iova_bitmap *bitmap,
2658ccf019SJoao Martins unsigned long iova, size_t length);
27*8c9c727bSJoao Martins #else
iova_bitmap_alloc(unsigned long iova,size_t length,unsigned long page_size,u64 __user * data)28*8c9c727bSJoao Martins static inline struct iova_bitmap *iova_bitmap_alloc(unsigned long iova,
29*8c9c727bSJoao Martins size_t length,
30*8c9c727bSJoao Martins unsigned long page_size,
31*8c9c727bSJoao Martins u64 __user *data)
32*8c9c727bSJoao Martins {
33*8c9c727bSJoao Martins return NULL;
34*8c9c727bSJoao Martins }
35*8c9c727bSJoao Martins
iova_bitmap_free(struct iova_bitmap * bitmap)36*8c9c727bSJoao Martins static inline void iova_bitmap_free(struct iova_bitmap *bitmap)
37*8c9c727bSJoao Martins {
38*8c9c727bSJoao Martins }
39*8c9c727bSJoao Martins
iova_bitmap_for_each(struct iova_bitmap * bitmap,void * opaque,iova_bitmap_fn_t fn)40*8c9c727bSJoao Martins static inline int iova_bitmap_for_each(struct iova_bitmap *bitmap, void *opaque,
41*8c9c727bSJoao Martins iova_bitmap_fn_t fn)
42*8c9c727bSJoao Martins {
43*8c9c727bSJoao Martins return -EOPNOTSUPP;
44*8c9c727bSJoao Martins }
45*8c9c727bSJoao Martins
iova_bitmap_set(struct iova_bitmap * bitmap,unsigned long iova,size_t length)46*8c9c727bSJoao Martins static inline void iova_bitmap_set(struct iova_bitmap *bitmap,
47*8c9c727bSJoao Martins unsigned long iova, size_t length)
48*8c9c727bSJoao Martins {
49*8c9c727bSJoao Martins }
50*8c9c727bSJoao Martins #endif
5158ccf019SJoao Martins
5258ccf019SJoao Martins #endif
53