| @@ -1,11 +1,61 @@ | | | @@ -1,11 +1,61 @@ |
1 | // SPDX-License-Identifier: MIT | | 1 | /* $NetBSD: xarray.h,v 1.3 2021/12/19 10:36:40 riastradh Exp $ */ |
2 | /* | | 2 | |
3 | * Copyright © 2020 The NetBSD Foundation, Inc. | | 3 | /*- |
| | | 4 | * Copyright (c) 2020 The NetBSD Foundation, Inc. |
| | | 5 | * All rights reserved. |
| | | 6 | * |
| | | 7 | * Redistribution and use in source and binary forms, with or without |
| | | 8 | * modification, are permitted provided that the following conditions |
| | | 9 | * are met: |
| | | 10 | * 1. Redistributions of source code must retain the above copyright |
| | | 11 | * notice, this list of conditions and the following disclaimer. |
| | | 12 | * 2. Redistributions in binary form must reproduce the above copyright |
| | | 13 | * notice, this list of conditions and the following disclaimer in the |
| | | 14 | * documentation and/or other materials provided with the distribution. |
| | | 15 | * |
| | | 16 | * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS |
| | | 17 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
| | | 18 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| | | 19 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS |
| | | 20 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| | | 21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| | | 22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| | | 23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| | | 24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| | | 25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| | | 26 | * POSSIBILITY OF SUCH DAMAGE. |
4 | */ | | 27 | */ |
5 | | | 28 | |
6 | #ifndef _LINUX_XARRAY_H_ | | 29 | #ifndef _LINUX_XARRAY_H_ |
7 | #define _LINUX_XARRAY_H_ | | 30 | #define _LINUX_XARRAY_H_ |
8 | | | 31 | |
| | | 32 | #include <linux/slab.h> |
| | | 33 | |
9 | struct xarray; | | 34 | struct xarray; |
| | | 35 | struct xa_limit; |
| | | 36 | |
| | | 37 | struct xa_limit { |
| | | 38 | uint32_t max; |
| | | 39 | uint32_t min; |
| | | 40 | }; |
| | | 41 | |
| | | 42 | #define xa_for_each(XA, INDEX, ENTRY) \ |
| | | 43 | for ((INDEX) = 0, (ENTRY) = xa_find((XA), &(INDEX), ULONG_MAX, 0); \ |
| | | 44 | (ENTRY) != NULL; \ |
| | | 45 | (ENTRY) = xa_find_after((XA), &(INDEX), ULONG_MAX, 0)) |
| | | 46 | |
| | | 47 | #define xa_alloc linux_xa_alloc |
| | | 48 | #define xa_find linux_xa_find |
| | | 49 | #define xa_find_after linux_xa_find_after |
| | | 50 | #define xa_store linux_xa_store |
| | | 51 | #define xa_limit_32b linux_xa_limit_32b |
| | | 52 | |
| | | 53 | int xa_alloc(struct xarray *, uint32_t *, void *, struct xa_limit, gfp_t); |
| | | 54 | void * xa_find(struct xarray *, unsigned long *, unsigned long, unsigned); |
| | | 55 | void * xa_find_after(struct xarray *, unsigned long *, unsigned long, |
| | | 56 | unsigned); |
| | | 57 | void xa_store(struct xarray *, unsigned long, void *, gfp_t); |
| | | 58 | |
| | | 59 | extern const struct xa_limit xa_limit_32b; |
10 | | | 60 | |
11 | #endif /* _LINUX_XARRAY_H_ */ | | 61 | #endif /* _LINUX_XARRAY_H_ */ |