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 struct nvkm_specmux { 16 u32 mask; 17 u8 shift; 18 const char *name; 19 bool enable; 20 }; 21 22 struct nvkm_specsrc { 23 u32 addr; 24 const struct nvkm_specmux *mux; 25 const char *name; 26 }; 27 28 struct nvkm_perfsrc { 29 struct list_head head; 30 char *name; 31 u32 addr; 32 u32 mask; 33 u8 shift; 34 bool enable; 35 }; 36 37 extern const struct nvkm_specsrc nv50_zcull_sources[]; 38 extern const struct nvkm_specsrc nv50_zrop_sources[]; 39 extern const struct nvkm_specsrc g84_vfetch_sources[]; 40 extern const struct nvkm_specsrc gt200_crop_sources[]; 41 extern const struct nvkm_specsrc gt200_prop_sources[]; 42 extern const struct nvkm_specsrc gt200_tex_sources[]; 43 44 struct nvkm_specsig { 45 u8 signal; 46 const char *name; 47 const struct nvkm_specsrc *source; 48 }; 49 50 struct nvkm_perfsig { 51 const char *name; 52 u8 source[8]; 53 }; 54 55 struct nvkm_specdom { 56 u16 signal_nr; 57 const struct nvkm_specsig *signal; 58 const struct nvkm_funcdom *func; 59 }; 60 61 #define nvkm_perfdom(p) container_of((p), struct nvkm_perfdom, object) 62 63 struct nvkm_perfdom { 64 struct nvkm_object object; 65 struct nvkm_perfmon *perfmon; 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_perfmon(p) container_of((p), struct nvkm_perfmon, object) 90 91 struct nvkm_perfmon { 92 struct nvkm_object object; 93 struct nvkm_pm *pm; 94 }; 95 96 #define nvkm_pm_create(p,e,o,d) \ 97 nvkm_pm_create_((p), (e), (o), sizeof(**d), (void **)d) 98 #define nvkm_pm_dtor(p) ({ \ 99 struct nvkm_pm *c = (p); \ 100 _nvkm_pm_dtor(nv_object(c)); \ 101 }) 102 #define nvkm_pm_init(p) ({ \ 103 struct nvkm_pm *c = (p); \ 104 _nvkm_pm_init(nv_object(c)); \ 105 }) 106 #define nvkm_pm_fini(p,s) ({ \ 107 struct nvkm_pm *c = (p); \ 108 _nvkm_pm_fini(nv_object(c), (s)); \ 109 }) 110 111 int nvkm_pm_create_(struct nvkm_object *, struct nvkm_object *, 112 struct nvkm_oclass *, int, void **); 113 void _nvkm_pm_dtor(struct nvkm_object *); 114 int _nvkm_pm_init(struct nvkm_object *); 115 int _nvkm_pm_fini(struct nvkm_object *, bool); 116 #endif 117