/* SPDX-License-Identifier: MIT */ #ifndef __NVKM_NOTIFY_H__ #define __NVKM_NOTIFY_H__ #include <core/os.h> struct nvkm_object; struct nvkm_notify { struct nvkm_event *event; struct list_head head; #define NVKM_NOTIFY_USER 0 #define NVKM_NOTIFY_WORK 1 unsigned long flags; int block; #define NVKM_NOTIFY_DROP 0 #define NVKM_NOTIFY_KEEP 1 int (*func)(struct nvkm_notify *); /* set by nvkm_event ctor */ u32 types; int index; u32 size; struct work_struct work; /* this is const for a *very* good reason - the data might be on the * stack from an irq handler. if you're not core/notify.c then you * should probably think twice before casting it away... */ const void *data; }; int nvkm_notify_init(struct nvkm_object *, struct nvkm_event *, int (*func)(struct nvkm_notify *), bool work, void *data, u32 size, u32 reply, struct nvkm_notify *); void nvkm_notify_fini(struct nvkm_notify *); void nvkm_notify_get(struct nvkm_notify *); void nvkm_notify_put(struct nvkm_notify *); void nvkm_notify_send(struct nvkm_notify *, void *data, u32 size); #endif