1/* SPDX-License-Identifier: MIT */
2#ifndef __NVKM_PM_H__
3#define __NVKM_PM_H__
4#include <core/engine.h>
5
6struct nvkm_pm {
7	const struct nvkm_pm_func *func;
8	struct nvkm_engine engine;
9
10	struct {
11		spinlock_t lock;
12		struct nvkm_object *object;
13	} client;
14
15	struct list_head domains;
16	struct list_head sources;
17	u32 sequence;
18};
19
20int nv40_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **);
21int nv50_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **);
22int g84_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **);
23int gt200_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **);
24int gt215_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **);
25int gf100_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **);
26int gf108_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **);
27int gf117_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **);
28int gk104_pm_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_pm **);
29#endif
30