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