diff options
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/engine/pm/priv.h')
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/pm/priv.h | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/priv.h b/drivers/gpu/drm/nouveau/nvkm/engine/pm/priv.h new file mode 100644 index 000000000..6ae25d3e7 --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/priv.h @@ -0,0 +1,105 @@ +/* SPDX-License-Identifier: MIT */ +#ifndef __NVKM_PM_PRIV_H__ +#define __NVKM_PM_PRIV_H__ +#define nvkm_pm(p) container_of((p), struct nvkm_pm, engine) +#include <engine/pm.h> + +int nvkm_pm_ctor(const struct nvkm_pm_func *, struct nvkm_device *, enum nvkm_subdev_type, int, + struct nvkm_pm *); + +struct nvkm_pm_func { + void (*fini)(struct nvkm_pm *); +}; + +struct nvkm_perfctr { + struct list_head head; + u8 domain; + u8 signal[4]; + u64 source[4][8]; + int slot; + u32 logic_op; + u32 ctr; +}; + +struct nvkm_specmux { + u32 mask; + u8 shift; + const char *name; + bool enable; +}; + +struct nvkm_specsrc { + u32 addr; + const struct nvkm_specmux *mux; + const char *name; +}; + +struct nvkm_perfsrc { + struct list_head head; + char *name; + u32 addr; + u32 mask; + u8 shift; + bool enable; +}; + +extern const struct nvkm_specsrc nv50_zcull_sources[]; +extern const struct nvkm_specsrc nv50_zrop_sources[]; +extern const struct nvkm_specsrc g84_vfetch_sources[]; +extern const struct nvkm_specsrc gt200_crop_sources[]; +extern const struct nvkm_specsrc gt200_prop_sources[]; +extern const struct nvkm_specsrc gt200_tex_sources[]; + +struct nvkm_specsig { + u8 signal; + const char *name; + const struct nvkm_specsrc *source; +}; + +struct nvkm_perfsig { + const char *name; + u8 source[8]; +}; + +struct nvkm_specdom { + u16 signal_nr; + const struct nvkm_specsig *signal; + const struct nvkm_funcdom *func; +}; + +#define nvkm_perfdom(p) container_of((p), struct nvkm_perfdom, object) +#include <core/object.h> + +struct nvkm_perfdom { + struct nvkm_object object; + struct nvkm_perfmon *perfmon; + struct list_head head; + struct list_head list; + const struct nvkm_funcdom *func; + struct nvkm_perfctr *ctr[4]; + char name[32]; + u32 addr; + u8 mode; + u32 clk; + u16 signal_nr; + struct nvkm_perfsig signal[]; +}; + +struct nvkm_funcdom { + void (*init)(struct nvkm_pm *, struct nvkm_perfdom *, + struct nvkm_perfctr *); + void (*read)(struct nvkm_pm *, struct nvkm_perfdom *, + struct nvkm_perfctr *); + void (*next)(struct nvkm_pm *, struct nvkm_perfdom *); +}; + +int nvkm_perfdom_new(struct nvkm_pm *, const char *, u32, u32, u32, u32, + const struct nvkm_specdom *); + +#define nvkm_perfmon(p) container_of((p), struct nvkm_perfmon, object) + +struct nvkm_perfmon { + struct nvkm_object object; + struct nvkm_pm *pm; +}; +#endif |