1*677dec6eSriastradh /* $NetBSD: event.h,v 1.3 2021/12/18 23:45:33 riastradh Exp $ */ 2d350ecf5Sriastradh 3*677dec6eSriastradh /* SPDX-License-Identifier: MIT */ 4d350ecf5Sriastradh #ifndef __NVKM_EVENT_H__ 5d350ecf5Sriastradh #define __NVKM_EVENT_H__ 6d350ecf5Sriastradh #include <core/os.h> 7d350ecf5Sriastradh struct nvkm_notify; 8d350ecf5Sriastradh struct nvkm_object; 9d350ecf5Sriastradh 10d350ecf5Sriastradh struct nvkm_event { 11d350ecf5Sriastradh const struct nvkm_event_func *func; 12d350ecf5Sriastradh 13d350ecf5Sriastradh int types_nr; 14d350ecf5Sriastradh int index_nr; 15d350ecf5Sriastradh 16d350ecf5Sriastradh spinlock_t refs_lock; 17d350ecf5Sriastradh spinlock_t list_lock; 18d350ecf5Sriastradh struct list_head list; 19d350ecf5Sriastradh int *refs; 20d350ecf5Sriastradh }; 21d350ecf5Sriastradh 22d350ecf5Sriastradh struct nvkm_event_func { 23d350ecf5Sriastradh int (*ctor)(struct nvkm_object *, void *data, u32 size, 24d350ecf5Sriastradh struct nvkm_notify *); 25d350ecf5Sriastradh void (*send)(void *data, u32 size, struct nvkm_notify *); 26d350ecf5Sriastradh void (*init)(struct nvkm_event *, int type, int index); 27d350ecf5Sriastradh void (*fini)(struct nvkm_event *, int type, int index); 28d350ecf5Sriastradh }; 29d350ecf5Sriastradh 30d350ecf5Sriastradh int nvkm_event_init(const struct nvkm_event_func *func, int types_nr, 31d350ecf5Sriastradh int index_nr, struct nvkm_event *); 32d350ecf5Sriastradh void nvkm_event_fini(struct nvkm_event *); 33d350ecf5Sriastradh void nvkm_event_get(struct nvkm_event *, u32 types, int index); 34d350ecf5Sriastradh void nvkm_event_put(struct nvkm_event *, u32 types, int index); 35d350ecf5Sriastradh void nvkm_event_send(struct nvkm_event *, u32 types, int index, 36d350ecf5Sriastradh void *data, u32 size); 37d350ecf5Sriastradh #endif 38