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