License cleanup: add SPDX GPL-2.0 license identifier to files with no license
[linux-block.git] / drivers / gpu / drm / nouveau / nvkm / engine / pm / priv.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
d5752b9b
BS
2#ifndef __NVKM_PM_PRIV_H__
3#define __NVKM_PM_PRIV_H__
97070f23 4#define nvkm_pm(p) container_of((p), struct nvkm_pm, engine)
d5752b9b
BS
5#include <engine/pm.h>
6
97070f23
BS
7int nvkm_pm_ctor(const struct nvkm_pm_func *, struct nvkm_device *,
8 int index, struct nvkm_pm *);
9
10struct nvkm_pm_func {
11 void (*fini)(struct nvkm_pm *);
12};
13
4d34686e 14struct nvkm_perfctr {
d5752b9b 15 struct list_head head;
6137b5a7 16 u8 domain;
0f380436 17 u8 signal[4];
6137b5a7 18 u64 source[4][8];
d5752b9b
BS
19 int slot;
20 u32 logic_op;
d5752b9b
BS
21 u32 ctr;
22};
23
e82661e2
SP
24struct nvkm_specmux {
25 u32 mask;
26 u8 shift;
27 const char *name;
28 bool enable;
29};
30
31struct nvkm_specsrc {
32 u32 addr;
33 const struct nvkm_specmux *mux;
34 const char *name;
35};
36
37struct nvkm_perfsrc {
38 struct list_head head;
39 char *name;
40 u32 addr;
41 u32 mask;
42 u8 shift;
43 bool enable;
44};
45
06b7972d
SP
46extern const struct nvkm_specsrc nv50_zcull_sources[];
47extern const struct nvkm_specsrc nv50_zrop_sources[];
48extern const struct nvkm_specsrc g84_vfetch_sources[];
49extern const struct nvkm_specsrc gt200_crop_sources[];
50extern const struct nvkm_specsrc gt200_prop_sources[];
51extern const struct nvkm_specsrc gt200_tex_sources[];
52
4d34686e 53struct nvkm_specsig {
d5752b9b
BS
54 u8 signal;
55 const char *name;
e82661e2 56 const struct nvkm_specsrc *source;
d5752b9b
BS
57};
58
4d34686e 59struct nvkm_perfsig {
d5752b9b 60 const char *name;
e82661e2 61 u8 source[8];
d5752b9b
BS
62};
63
4d34686e 64struct nvkm_specdom {
d5752b9b 65 u16 signal_nr;
4d34686e
BS
66 const struct nvkm_specsig *signal;
67 const struct nvkm_funcdom *func;
d5752b9b
BS
68};
69
5ffeb84b
BS
70#define nvkm_perfdom(p) container_of((p), struct nvkm_perfdom, object)
71
4d34686e 72struct nvkm_perfdom {
5ffeb84b
BS
73 struct nvkm_object object;
74 struct nvkm_perfmon *perfmon;
d5752b9b
BS
75 struct list_head head;
76 struct list_head list;
4d34686e 77 const struct nvkm_funcdom *func;
0f380436 78 struct nvkm_perfctr *ctr[4];
d5752b9b
BS
79 char name[32];
80 u32 addr;
0f380436
SP
81 u8 mode;
82 u32 clk;
e4047599 83 u16 signal_nr;
4d34686e 84 struct nvkm_perfsig signal[];
d5752b9b
BS
85};
86
4d34686e
BS
87struct nvkm_funcdom {
88 void (*init)(struct nvkm_pm *, struct nvkm_perfdom *,
89 struct nvkm_perfctr *);
90 void (*read)(struct nvkm_pm *, struct nvkm_perfdom *,
91 struct nvkm_perfctr *);
92 void (*next)(struct nvkm_pm *, struct nvkm_perfdom *);
d5752b9b
BS
93};
94
4d34686e
BS
95int nvkm_perfdom_new(struct nvkm_pm *, const char *, u32, u32, u32, u32,
96 const struct nvkm_specdom *);
d5752b9b 97
5ffeb84b
BS
98#define nvkm_perfmon(p) container_of((p), struct nvkm_perfmon, object)
99
100struct nvkm_perfmon {
101 struct nvkm_object object;
102 struct nvkm_pm *pm;
103};
d5752b9b 104#endif