1ebb58dc2SBen Skeggs #ifndef __NOUVEAU_PMU_H__ 2ebb58dc2SBen Skeggs #define __NOUVEAU_PMU_H__ 3ebb58dc2SBen Skeggs 4ebb58dc2SBen Skeggs #include <core/subdev.h> 5ebb58dc2SBen Skeggs #include <core/device.h> 6ebb58dc2SBen Skeggs 7ebb58dc2SBen Skeggs struct nouveau_pmu { 8ebb58dc2SBen Skeggs struct nouveau_subdev base; 9ebb58dc2SBen Skeggs 10ebb58dc2SBen Skeggs struct { 11ebb58dc2SBen Skeggs u32 base; 12ebb58dc2SBen Skeggs u32 size; 13ebb58dc2SBen Skeggs } send; 14ebb58dc2SBen Skeggs 15ebb58dc2SBen Skeggs struct { 16ebb58dc2SBen Skeggs u32 base; 17ebb58dc2SBen Skeggs u32 size; 18ebb58dc2SBen Skeggs 19ebb58dc2SBen Skeggs struct work_struct work; 20ebb58dc2SBen Skeggs wait_queue_head_t wait; 21ebb58dc2SBen Skeggs u32 process; 22ebb58dc2SBen Skeggs u32 message; 23ebb58dc2SBen Skeggs u32 data[2]; 24ebb58dc2SBen Skeggs } recv; 25ebb58dc2SBen Skeggs 26ebb58dc2SBen Skeggs int (*message)(struct nouveau_pmu *, u32[2], u32, u32, u32, u32); 27ebb58dc2SBen Skeggs void (*pgob)(struct nouveau_pmu *, bool); 28ebb58dc2SBen Skeggs }; 29ebb58dc2SBen Skeggs 30ebb58dc2SBen Skeggs static inline struct nouveau_pmu * 31ebb58dc2SBen Skeggs nouveau_pmu(void *obj) 32ebb58dc2SBen Skeggs { 33ebb58dc2SBen Skeggs return (void *)nouveau_subdev(obj, NVDEV_SUBDEV_PMU); 34ebb58dc2SBen Skeggs } 35ebb58dc2SBen Skeggs 36ebb58dc2SBen Skeggs extern struct nouveau_oclass *nva3_pmu_oclass; 37ebb58dc2SBen Skeggs extern struct nouveau_oclass *nvc0_pmu_oclass; 38ebb58dc2SBen Skeggs extern struct nouveau_oclass *nvd0_pmu_oclass; 39ebb58dc2SBen Skeggs extern struct nouveau_oclass *gk104_pmu_oclass; 40ebb58dc2SBen Skeggs extern struct nouveau_oclass *nv108_pmu_oclass; 41ebb58dc2SBen Skeggs extern struct nouveau_oclass *gk20a_pmu_oclass; 42ebb58dc2SBen Skeggs 43ebb58dc2SBen Skeggs /* interface to MEMX process running on PMU */ 44ebb58dc2SBen Skeggs struct nouveau_memx; 45ebb58dc2SBen Skeggs int nouveau_memx_init(struct nouveau_pmu *, struct nouveau_memx **); 46ebb58dc2SBen Skeggs int nouveau_memx_fini(struct nouveau_memx **, bool exec); 47ebb58dc2SBen Skeggs void nouveau_memx_wr32(struct nouveau_memx *, u32 addr, u32 data); 48ebb58dc2SBen Skeggs void nouveau_memx_wait(struct nouveau_memx *, 49ebb58dc2SBen Skeggs u32 addr, u32 mask, u32 data, u32 nsec); 50ebb58dc2SBen Skeggs void nouveau_memx_nsec(struct nouveau_memx *, u32 nsec); 51ebb58dc2SBen Skeggs void nouveau_memx_wait_vblank(struct nouveau_memx *); 52ebb58dc2SBen Skeggs void nouveau_memx_train(struct nouveau_memx *); 53ebb58dc2SBen Skeggs int nouveau_memx_train_result(struct nouveau_pmu *, u32 *, int); 54ebb58dc2SBen Skeggs void nouveau_memx_block(struct nouveau_memx *); 55ebb58dc2SBen Skeggs void nouveau_memx_unblock(struct nouveau_memx *); 56ebb58dc2SBen Skeggs 57ebb58dc2SBen Skeggs #endif 58