1 /* $NetBSD: priv.h,v 1.3 2021/12/18 23:45:37 riastradh Exp $ */ 2 3 /* SPDX-License-Identifier: MIT */ 4 #ifndef __NVKM_PM_PRIV_H__ 5 #define __NVKM_PM_PRIV_H__ 6 #define nvkm_pm(p) container_of((p), struct nvkm_pm, engine) 7 #include <engine/pm.h> 8 9 int nvkm_pm_ctor(const struct nvkm_pm_func *, struct nvkm_device *, 10 int index, struct nvkm_pm *); 11 12 struct nvkm_pm_func { 13 void (*fini)(struct nvkm_pm *); 14 }; 15 16 struct nvkm_perfctr { 17 struct list_head head; 18 u8 domain; 19 u8 signal[4]; 20 u64 source[4][8]; 21 int slot; 22 u32 logic_op; 23 u32 ctr; 24 }; 25 26 struct nvkm_specmux { 27 u32 mask; 28 u8 shift; 29 const char *name; 30 bool enable; 31 }; 32 33 struct nvkm_specsrc { 34 u32 addr; 35 const struct nvkm_specmux *mux; 36 const char *name; 37 }; 38 39 struct nvkm_perfsrc { 40 struct list_head head; 41 char *name; 42 u32 addr; 43 u32 mask; 44 u8 shift; 45 bool enable; 46 }; 47 48 extern const struct nvkm_specsrc nv50_zcull_sources[]; 49 extern const struct nvkm_specsrc nv50_zrop_sources[]; 50 extern const struct nvkm_specsrc g84_vfetch_sources[]; 51 extern const struct nvkm_specsrc gt200_crop_sources[]; 52 extern const struct nvkm_specsrc gt200_prop_sources[]; 53 extern const struct nvkm_specsrc gt200_tex_sources[]; 54 55 struct nvkm_specsig { 56 u8 signal; 57 const char *name; 58 const struct nvkm_specsrc *source; 59 }; 60 61 struct nvkm_perfsig { 62 const char *name; 63 u8 source[8]; 64 }; 65 66 struct nvkm_specdom { 67 u16 signal_nr; 68 const struct nvkm_specsig *signal; 69 const struct nvkm_funcdom *func; 70 }; 71 72 #define nvkm_perfdom(p) container_of((p), struct nvkm_perfdom, object) 73 #include <core/object.h> 74 75 struct nvkm_perfdom { 76 struct nvkm_object object; 77 struct nvkm_perfmon *perfmon; 78 struct list_head head; 79 struct list_head list; 80 const struct nvkm_funcdom *func; 81 struct nvkm_perfctr *ctr[4]; 82 char name[32]; 83 u32 addr; 84 u8 mode; 85 u32 clk; 86 u16 signal_nr; 87 struct nvkm_perfsig signal[]; 88 }; 89 90 struct nvkm_funcdom { 91 void (*init)(struct nvkm_pm *, struct nvkm_perfdom *, 92 struct nvkm_perfctr *); 93 void (*read)(struct nvkm_pm *, struct nvkm_perfdom *, 94 struct nvkm_perfctr *); 95 void (*next)(struct nvkm_pm *, struct nvkm_perfdom *); 96 }; 97 98 int nvkm_perfdom_new(struct nvkm_pm *, const char *, u32, u32, u32, u32, 99 const struct nvkm_specdom *); 100 101 #define nvkm_perfmon(p) container_of((p), struct nvkm_perfmon, object) 102 103 struct nvkm_perfmon { 104 struct nvkm_object object; 105 struct nvkm_pm *pm; 106 }; 107 #endif 108