at v5.8 2.0 kB view raw
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; 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); 12 13struct ioasid_set { 14 int dummy; 15}; 16 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 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); 37void ioasid_free(ioasid_t ioasid); 38void *ioasid_find(struct ioasid_set *set, ioasid_t ioasid, 39 bool (*getter)(void *)); 40int ioasid_register_allocator(struct ioasid_allocator_ops *allocator); 41void ioasid_unregister_allocator(struct ioasid_allocator_ops *allocator); 42int ioasid_set_data(ioasid_t ioasid, void *data); 43 44#else /* !CONFIG_IOASID */ 45static inline ioasid_t ioasid_alloc(struct ioasid_set *set, ioasid_t min, 46 ioasid_t max, void *private) 47{ 48 return INVALID_IOASID; 49} 50 51static inline void ioasid_free(ioasid_t ioasid) 52{ 53} 54 55static inline void *ioasid_find(struct ioasid_set *set, ioasid_t ioasid, 56 bool (*getter)(void *)) 57{ 58 return NULL; 59} 60 61static inline int ioasid_register_allocator(struct ioasid_allocator_ops *allocator) 62{ 63 return -ENOTSUPP; 64} 65 66static inline void ioasid_unregister_allocator(struct ioasid_allocator_ops *allocator) 67{ 68} 69 70static inline int ioasid_set_data(ioasid_t ioasid, void *data) 71{ 72 return -ENOTSUPP; 73} 74 75#endif /* CONFIG_IOASID */ 76#endif /* __LINUX_IOASID_H */