1b7019ac5SIlia Mirkin /* SPDX-License-Identifier: MIT */ 22799bba6SBen Skeggs #ifndef __NVKM_LTC_H__ 32799bba6SBen Skeggs #define __NVKM_LTC_H__ 4c39f472eSBen Skeggs #include <core/subdev.h> 570bc7182SBen Skeggs #include <core/mm.h> 6c39f472eSBen Skeggs 72799bba6SBen Skeggs #define NVKM_LTC_MAX_ZBC_CNT 16 8c39f472eSBen Skeggs 92799bba6SBen Skeggs struct nvkm_ltc { 1070bc7182SBen Skeggs const struct nvkm_ltc_func *func; 11c7750cfbSBen Skeggs struct nvkm_subdev subdev; 12c39f472eSBen Skeggs 1370bc7182SBen Skeggs u32 ltc_nr; 1470bc7182SBen Skeggs u32 lts_nr; 1570bc7182SBen Skeggs 16*dbffdff7SBen Skeggs struct mutex mutex; /* serialises CBC operations */ 1770bc7182SBen Skeggs u32 num_tags; 1870bc7182SBen Skeggs u32 tag_base; 19bd447053SBen Skeggs struct nvkm_memory *tag_ram; 20c39f472eSBen Skeggs 21c39f472eSBen Skeggs int zbc_min; 22c39f472eSBen Skeggs int zbc_max; 2370bc7182SBen Skeggs u32 zbc_color[NVKM_LTC_MAX_ZBC_CNT][4]; 2470bc7182SBen Skeggs u32 zbc_depth[NVKM_LTC_MAX_ZBC_CNT]; 254b2c71edSBen Skeggs u32 zbc_stencil[NVKM_LTC_MAX_ZBC_CNT]; 26c39f472eSBen Skeggs }; 27c39f472eSBen Skeggs 28b1e839f3SBen Skeggs void nvkm_ltc_tags_clear(struct nvkm_device *, u32 first, u32 count); 29c39f472eSBen Skeggs 3070bc7182SBen Skeggs int nvkm_ltc_zbc_color_get(struct nvkm_ltc *, int index, const u32[4]); 3170bc7182SBen Skeggs int nvkm_ltc_zbc_depth_get(struct nvkm_ltc *, int index, const u32); 324b2c71edSBen Skeggs int nvkm_ltc_zbc_stencil_get(struct nvkm_ltc *, int index, const u32); 3370bc7182SBen Skeggs 3438a8fc78SAlexandre Courbot void nvkm_ltc_invalidate(struct nvkm_ltc *); 3538a8fc78SAlexandre Courbot void nvkm_ltc_flush(struct nvkm_ltc *); 3638a8fc78SAlexandre Courbot 3770bc7182SBen Skeggs int gf100_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); 3870bc7182SBen Skeggs int gk104_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); 39a0a49bacSAlexandre Courbot int gk20a_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); 4070bc7182SBen Skeggs int gm107_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); 41db1eb528SBen Skeggs int gm200_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); 42a96def39SBen Skeggs int gp100_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); 434b2c71edSBen Skeggs int gp102_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); 440d0d4982SThierry Reding int gp10b_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); 45c39f472eSBen Skeggs #endif 46