]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - include/linux/ioasid.h
Merge tag 'fixes_for_v5.13-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git...
[mirror_ubuntu-jammy-kernel.git] / include / linux / ioasid.h
CommitLineData
fa83433c
JPB
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef __LINUX_IOASID_H
3#define __LINUX_IOASID_H
4
5#include <linux/types.h>
6#include <linux/errno.h>
7
8#define INVALID_IOASID ((ioasid_t)-1)
9typedef unsigned int ioasid_t;
e5c0bd7f
JP
10typedef ioasid_t (*ioasid_alloc_fn_t)(ioasid_t min, ioasid_t max, void *data);
11typedef void (*ioasid_free_fn_t)(ioasid_t ioasid, void *data);
fa83433c
JPB
12
13struct ioasid_set {
14 int dummy;
15};
16
e5c0bd7f
JP
17/**
18 * struct ioasid_allocator_ops - IOASID allocator helper functions and data
19 *
20 * @alloc: helper function to allocate IOASID
21 * @free: helper function to free IOASID
22 * @list: for tracking ops that share helper functions but not data
23 * @pdata: data belong to the allocator, provided when calling alloc()
24 */
25struct ioasid_allocator_ops {
26 ioasid_alloc_fn_t alloc;
27 ioasid_free_fn_t free;
28 struct list_head list;
29 void *pdata;
30};
31
fa83433c
JPB
32#define DECLARE_IOASID_SET(name) struct ioasid_set name = { 0 }
33
34#if IS_ENABLED(CONFIG_IOASID)
35ioasid_t ioasid_alloc(struct ioasid_set *set, ioasid_t min, ioasid_t max,
36 void *private);
cb4789b0
JPB
37void ioasid_get(ioasid_t ioasid);
38bool ioasid_put(ioasid_t ioasid);
fa83433c
JPB
39void *ioasid_find(struct ioasid_set *set, ioasid_t ioasid,
40 bool (*getter)(void *));
e5c0bd7f
JP
41int ioasid_register_allocator(struct ioasid_allocator_ops *allocator);
42void ioasid_unregister_allocator(struct ioasid_allocator_ops *allocator);
fa83433c
JPB
43int ioasid_set_data(ioasid_t ioasid, void *data);
44
45#else /* !CONFIG_IOASID */
46static inline ioasid_t ioasid_alloc(struct ioasid_set *set, ioasid_t min,
47 ioasid_t max, void *private)
48{
49 return INVALID_IOASID;
50}
51
cb4789b0 52static inline void ioasid_get(ioasid_t ioasid)
fa83433c
JPB
53{
54}
55
cb4789b0
JPB
56static inline bool ioasid_put(ioasid_t ioasid)
57{
58 return false;
59}
60
fa83433c
JPB
61static inline void *ioasid_find(struct ioasid_set *set, ioasid_t ioasid,
62 bool (*getter)(void *))
63{
64 return NULL;
65}
66
e5c0bd7f
JP
67static inline int ioasid_register_allocator(struct ioasid_allocator_ops *allocator)
68{
69 return -ENOTSUPP;
70}
71
72static inline void ioasid_unregister_allocator(struct ioasid_allocator_ops *allocator)
73{
74}
75
fa83433c
JPB
76static inline int ioasid_set_data(ioasid_t ioasid, void *data)
77{
78 return -ENOTSUPP;
79}
80
81#endif /* CONFIG_IOASID */
82#endif /* __LINUX_IOASID_H */