OSDN Git Service

drm/nouveau/pm: allow the userspace to configure sources
[uclinux-h8/linux.git] / drivers / gpu / drm / nouveau / nvkm / engine / pm / priv.h
1 #ifndef __NVKM_PM_PRIV_H__
2 #define __NVKM_PM_PRIV_H__
3 #include <engine/pm.h>
4
5 struct nvkm_perfctr {
6         struct list_head head;
7         u8 domain;
8         u8  signal[4];
9         u64 source[4][8];
10         int slot;
11         u32 logic_op;
12         u32 ctr;
13 };
14
15 extern struct nvkm_oclass nvkm_pm_sclass[];
16
17 #include <core/engctx.h>
18
19 struct nvkm_perfctx {
20         struct nvkm_engctx base;
21 };
22
23 extern struct nvkm_oclass nvkm_pm_cclass;
24
25 struct nvkm_specmux {
26         u32 mask;
27         u8 shift;
28         const char *name;
29         bool enable;
30 };
31
32 struct nvkm_specsrc {
33         u32 addr;
34         const struct nvkm_specmux *mux;
35         const char *name;
36 };
37
38 struct nvkm_perfsrc {
39         struct list_head head;
40         char *name;
41         u32 addr;
42         u32 mask;
43         u8 shift;
44         bool enable;
45 };
46
47 struct nvkm_specsig {
48         u8 signal;
49         const char *name;
50         const struct nvkm_specsrc *source;
51 };
52
53 struct nvkm_perfsig {
54         const char *name;
55         u8 source[8];
56 };
57
58 struct nvkm_specdom {
59         u16 signal_nr;
60         const struct nvkm_specsig *signal;
61         const struct nvkm_funcdom *func;
62 };
63
64 struct nvkm_perfdom {
65         struct nvkm_object base;
66         struct list_head head;
67         struct list_head list;
68         const struct nvkm_funcdom *func;
69         struct nvkm_perfctr *ctr[4];
70         char name[32];
71         u32 addr;
72         u8  mode;
73         u32 clk;
74         u16 signal_nr;
75         struct nvkm_perfsig signal[];
76 };
77
78 struct nvkm_funcdom {
79         void (*init)(struct nvkm_pm *, struct nvkm_perfdom *,
80                      struct nvkm_perfctr *);
81         void (*read)(struct nvkm_pm *, struct nvkm_perfdom *,
82                      struct nvkm_perfctr *);
83         void (*next)(struct nvkm_pm *, struct nvkm_perfdom *);
84 };
85
86 int nvkm_perfdom_new(struct nvkm_pm *, const char *, u32, u32, u32, u32,
87                      const struct nvkm_specdom *);
88
89 #define nvkm_pm_create(p,e,o,d)                                        \
90         nvkm_pm_create_((p), (e), (o), sizeof(**d), (void **)d)
91 #define nvkm_pm_dtor(p) ({                                             \
92         struct nvkm_pm *c = (p);                                       \
93         _nvkm_pm_dtor(nv_object(c));                                   \
94 })
95 #define nvkm_pm_init(p) ({                                             \
96         struct nvkm_pm *c = (p);                                       \
97         _nvkm_pm_init(nv_object(c));                                   \
98 })
99 #define nvkm_pm_fini(p,s) ({                                           \
100         struct nvkm_pm *c = (p);                                       \
101         _nvkm_pm_fini(nv_object(c), (s));                              \
102 })
103
104 int nvkm_pm_create_(struct nvkm_object *, struct nvkm_object *,
105                             struct nvkm_oclass *, int, void **);
106 void _nvkm_pm_dtor(struct nvkm_object *);
107 int  _nvkm_pm_init(struct nvkm_object *);
108 int  _nvkm_pm_fini(struct nvkm_object *, bool);
109 #endif