1ebb58dc2SBen Skeggs #ifndef __NVKM_PMU_PRIV_H__
2ebb58dc2SBen Skeggs #define __NVKM_PMU_PRIV_H__
3ebb58dc2SBen Skeggs 
4ebb58dc2SBen Skeggs #include <subdev/pmu.h>
5ebb58dc2SBen Skeggs #include <subdev/pmu/fuc/os.h>
6ebb58dc2SBen Skeggs 
7ebb58dc2SBen Skeggs #define nouveau_pmu_create(p, e, o, d)                                         \
8ebb58dc2SBen Skeggs 	nouveau_pmu_create_((p), (e), (o), sizeof(**d), (void **)d)
9ebb58dc2SBen Skeggs #define nouveau_pmu_destroy(p)                                                 \
10ebb58dc2SBen Skeggs 	nouveau_subdev_destroy(&(p)->base)
11ebb58dc2SBen Skeggs #define nouveau_pmu_init(p) ({                                                 \
12ebb58dc2SBen Skeggs 	struct nouveau_pmu *_pmu = (p);                                       \
13ebb58dc2SBen Skeggs 	_nouveau_pmu_init(nv_object(_pmu));                                   \
14ebb58dc2SBen Skeggs })
15ebb58dc2SBen Skeggs #define nouveau_pmu_fini(p,s) ({                                               \
16ebb58dc2SBen Skeggs 	struct nouveau_pmu *_pmu = (p);                                       \
17ebb58dc2SBen Skeggs 	_nouveau_pmu_fini(nv_object(_pmu), (s));                              \
18ebb58dc2SBen Skeggs })
19ebb58dc2SBen Skeggs 
20ebb58dc2SBen Skeggs int nouveau_pmu_create_(struct nouveau_object *, struct nouveau_object *,
21ebb58dc2SBen Skeggs 			struct nouveau_oclass *, int, void **);
22ebb58dc2SBen Skeggs 
23ebb58dc2SBen Skeggs int _nouveau_pmu_ctor(struct nouveau_object *, struct nouveau_object *,
24ebb58dc2SBen Skeggs 		      struct nouveau_oclass *, void *, u32,
25ebb58dc2SBen Skeggs 		      struct nouveau_object **);
26ebb58dc2SBen Skeggs #define _nouveau_pmu_dtor _nouveau_subdev_dtor
27ebb58dc2SBen Skeggs int _nouveau_pmu_init(struct nouveau_object *);
28ebb58dc2SBen Skeggs int _nouveau_pmu_fini(struct nouveau_object *, bool);
29ebb58dc2SBen Skeggs void nouveau_pmu_pgob(struct nouveau_pmu *pmu, bool enable);
30ebb58dc2SBen Skeggs 
31ebb58dc2SBen Skeggs struct nvkm_pmu_impl {
32ebb58dc2SBen Skeggs 	struct nouveau_oclass base;
33ebb58dc2SBen Skeggs 	struct {
34ebb58dc2SBen Skeggs 		u32 *data;
35ebb58dc2SBen Skeggs 		u32  size;
36ebb58dc2SBen Skeggs 	} code;
37ebb58dc2SBen Skeggs 	struct {
38ebb58dc2SBen Skeggs 		u32 *data;
39ebb58dc2SBen Skeggs 		u32  size;
40ebb58dc2SBen Skeggs 	} data;
41ebb58dc2SBen Skeggs 
42ebb58dc2SBen Skeggs 	void (*pgob)(struct nouveau_pmu *, bool);
43ebb58dc2SBen Skeggs };
44ebb58dc2SBen Skeggs 
45ebb58dc2SBen Skeggs #endif
46