1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include "nv40.h"
26
27
28
29
30
31
32
33
34
35
36
37
38
39static const struct nouveau_specdom
40nva3_perfmon[] = {
41 { 0x20, (const struct nouveau_specsig[]) {
42 {}
43 }, &nv40_perfctr_func },
44 { 0x20, (const struct nouveau_specsig[]) {
45 {}
46 }, &nv40_perfctr_func },
47 { 0x20, (const struct nouveau_specsig[]) {
48 {}
49 }, &nv40_perfctr_func },
50 { 0x20, (const struct nouveau_specsig[]) {
51 {}
52 }, &nv40_perfctr_func },
53 { 0x20, (const struct nouveau_specsig[]) {
54 {}
55 }, &nv40_perfctr_func },
56 { 0x20, (const struct nouveau_specsig[]) {
57 {}
58 }, &nv40_perfctr_func },
59 { 0x20, (const struct nouveau_specsig[]) {
60 {}
61 }, &nv40_perfctr_func },
62 { 0x20, (const struct nouveau_specsig[]) {
63 {}
64 }, &nv40_perfctr_func },
65 {}
66};
67
68static int
69nva3_perfmon_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
70 struct nouveau_oclass *oclass, void *data, u32 size,
71 struct nouveau_object **object)
72{
73 int ret = nv40_perfmon_ctor(parent, engine, oclass, data, size, object);
74 if (ret == 0) {
75 struct nv40_perfmon_priv *priv = (void *)*object;
76 ret = nouveau_perfdom_new(&priv->base, "pwr", 0, 0, 0, 0,
77 nva3_perfmon_pwr);
78 if (ret)
79 return ret;
80
81 priv->base.last = 3;
82 }
83 return ret;
84}
85
86struct nouveau_oclass *
87nva3_perfmon_oclass = &(struct nv40_perfmon_oclass) {
88 .base.handle = NV_ENGINE(PERFMON, 0xa3),
89 .base.ofuncs = &(struct nouveau_ofuncs) {
90 .ctor = nva3_perfmon_ctor,
91 .dtor = _nouveau_perfmon_dtor,
92 .init = _nouveau_perfmon_init,
93 .fini = _nouveau_perfmon_fini,
94 },
95 .doms = nva3_perfmon,
96}.base;
97