]>
Commit | Line | Data |
---|---|---|
d5752b9b BS |
1 | #ifndef __NVKM_PM_PRIV_H__ |
2 | #define __NVKM_PM_PRIV_H__ | |
d5752b9b BS |
3 | #include <engine/pm.h> |
4 | ||
4d34686e BS |
5 | struct nvkm_perfctr { |
6 | struct nvkm_object base; | |
d5752b9b | 7 | struct list_head head; |
4d34686e | 8 | struct nvkm_perfsig *signal[4]; |
d5752b9b BS |
9 | int slot; |
10 | u32 logic_op; | |
11 | u32 clk; | |
12 | u32 ctr; | |
13 | }; | |
14 | ||
4d34686e BS |
15 | extern struct nvkm_oclass nvkm_pm_sclass[]; |
16 | ||
17 | #include <core/engctx.h> | |
d5752b9b | 18 | |
4d34686e BS |
19 | struct nvkm_perfctx { |
20 | struct nvkm_engctx base; | |
d5752b9b BS |
21 | }; |
22 | ||
4d34686e | 23 | extern struct nvkm_oclass nvkm_pm_cclass; |
d5752b9b | 24 | |
4d34686e | 25 | struct nvkm_specsig { |
d5752b9b BS |
26 | u8 signal; |
27 | const char *name; | |
28 | }; | |
29 | ||
4d34686e | 30 | struct nvkm_perfsig { |
d5752b9b BS |
31 | const char *name; |
32 | }; | |
33 | ||
4d34686e BS |
34 | struct nvkm_perfdom; |
35 | struct nvkm_perfctr * | |
36 | nvkm_perfsig_wrap(struct nvkm_pm *, const char *, struct nvkm_perfdom **); | |
d5752b9b | 37 | |
4d34686e | 38 | struct nvkm_specdom { |
d5752b9b | 39 | u16 signal_nr; |
4d34686e BS |
40 | const struct nvkm_specsig *signal; |
41 | const struct nvkm_funcdom *func; | |
d5752b9b BS |
42 | }; |
43 | ||
4d34686e BS |
44 | extern const struct nvkm_specdom gt215_pm_pwr[]; |
45 | extern const struct nvkm_specdom gf100_pm_pwr[]; | |
46 | extern const struct nvkm_specdom gk104_pm_pwr[]; | |
d5752b9b | 47 | |
4d34686e | 48 | struct nvkm_perfdom { |
d5752b9b BS |
49 | struct list_head head; |
50 | struct list_head list; | |
4d34686e | 51 | const struct nvkm_funcdom *func; |
d5752b9b BS |
52 | char name[32]; |
53 | u32 addr; | |
54 | u8 quad; | |
55 | u32 signal_nr; | |
4d34686e | 56 | struct nvkm_perfsig signal[]; |
d5752b9b BS |
57 | }; |
58 | ||
4d34686e BS |
59 | struct nvkm_funcdom { |
60 | void (*init)(struct nvkm_pm *, struct nvkm_perfdom *, | |
61 | struct nvkm_perfctr *); | |
62 | void (*read)(struct nvkm_pm *, struct nvkm_perfdom *, | |
63 | struct nvkm_perfctr *); | |
64 | void (*next)(struct nvkm_pm *, struct nvkm_perfdom *); | |
d5752b9b BS |
65 | }; |
66 | ||
4d34686e BS |
67 | int nvkm_perfdom_new(struct nvkm_pm *, const char *, u32, u32, u32, u32, |
68 | const struct nvkm_specdom *); | |
d5752b9b | 69 | |
4d34686e BS |
70 | #define nvkm_pm_create(p,e,o,d) \ |
71 | nvkm_pm_create_((p), (e), (o), sizeof(**d), (void **)d) | |
72 | #define nvkm_pm_dtor(p) ({ \ | |
73 | struct nvkm_pm *c = (p); \ | |
74 | _nvkm_pm_dtor(nv_object(c)); \ | |
d5752b9b | 75 | }) |
4d34686e BS |
76 | #define nvkm_pm_init(p) ({ \ |
77 | struct nvkm_pm *c = (p); \ | |
78 | _nvkm_pm_init(nv_object(c)); \ | |
d5752b9b | 79 | }) |
4d34686e BS |
80 | #define nvkm_pm_fini(p,s) ({ \ |
81 | struct nvkm_pm *c = (p); \ | |
82 | _nvkm_pm_fini(nv_object(c), (s)); \ | |
d5752b9b BS |
83 | }) |
84 | ||
4d34686e BS |
85 | int nvkm_pm_create_(struct nvkm_object *, struct nvkm_object *, |
86 | struct nvkm_oclass *, int, void **); | |
87 | void _nvkm_pm_dtor(struct nvkm_object *); | |
88 | int _nvkm_pm_init(struct nvkm_object *); | |
89 | int _nvkm_pm_fini(struct nvkm_object *, bool); | |
d5752b9b | 90 | #endif |