1800ac1f8SBen Skeggs /* SPDX-License-Identifier: MIT */
2800ac1f8SBen Skeggs #ifndef __NVKM_CHID_H__
3800ac1f8SBen Skeggs #define __NVKM_CHID_H__
4800ac1f8SBen Skeggs #include <core/event.h>
5800ac1f8SBen Skeggs 
6800ac1f8SBen Skeggs struct nvkm_chid {
7800ac1f8SBen Skeggs 	struct kref kref;
8800ac1f8SBen Skeggs 	int nr;
9800ac1f8SBen Skeggs 	u32 mask;
10800ac1f8SBen Skeggs 
11800ac1f8SBen Skeggs 	struct nvkm_event event;
12800ac1f8SBen Skeggs 
13800ac1f8SBen Skeggs 	void **data;
14800ac1f8SBen Skeggs 
15800ac1f8SBen Skeggs 	spinlock_t lock;
16800ac1f8SBen Skeggs 	unsigned long used[];
17800ac1f8SBen Skeggs };
18800ac1f8SBen Skeggs 
19800ac1f8SBen Skeggs int nvkm_chid_new(const struct nvkm_event_func *, struct nvkm_subdev *,
20800ac1f8SBen Skeggs 		  int nr, int first, int count, struct nvkm_chid **pchid);
21800ac1f8SBen Skeggs struct nvkm_chid *nvkm_chid_ref(struct nvkm_chid *);
22800ac1f8SBen Skeggs void nvkm_chid_unref(struct nvkm_chid **);
23*468fae7bSBen Skeggs int nvkm_chid_get(struct nvkm_chid *, void *data);
24*468fae7bSBen Skeggs void nvkm_chid_put(struct nvkm_chid *, int id, spinlock_t *data_lock);
25800ac1f8SBen Skeggs #endif
26