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 7*21e938d0SBen Skeggs #define NVKM_LTC_MAX_ZBC_COLOR_CNT 32 84500031fSBen Skeggs #define NVKM_LTC_MAX_ZBC_DEPTH_CNT 16 9c39f472eSBen Skeggs 102799bba6SBen Skeggs struct nvkm_ltc { 1170bc7182SBen Skeggs const struct nvkm_ltc_func *func; 12c7750cfbSBen Skeggs struct nvkm_subdev subdev; 13c39f472eSBen Skeggs 1470bc7182SBen Skeggs u32 ltc_nr; 1570bc7182SBen Skeggs u32 lts_nr; 1670bc7182SBen Skeggs 17dbffdff7SBen Skeggs struct mutex mutex; /* serialises CBC operations */ 1870bc7182SBen Skeggs u32 num_tags; 1970bc7182SBen Skeggs u32 tag_base; 20bd447053SBen Skeggs struct nvkm_memory *tag_ram; 21c39f472eSBen Skeggs 224500031fSBen Skeggs int zbc_color_min; 234500031fSBen Skeggs int zbc_color_max; 244500031fSBen Skeggs u32 zbc_color[NVKM_LTC_MAX_ZBC_COLOR_CNT][4]; 254500031fSBen Skeggs int zbc_depth_min; 264500031fSBen Skeggs int zbc_depth_max; 274500031fSBen Skeggs u32 zbc_depth[NVKM_LTC_MAX_ZBC_DEPTH_CNT]; 284500031fSBen Skeggs u32 zbc_stencil[NVKM_LTC_MAX_ZBC_DEPTH_CNT]; 29c39f472eSBen Skeggs }; 30c39f472eSBen Skeggs 31b1e839f3SBen Skeggs void nvkm_ltc_tags_clear(struct nvkm_device *, u32 first, u32 count); 32c39f472eSBen Skeggs 3370bc7182SBen Skeggs int nvkm_ltc_zbc_color_get(struct nvkm_ltc *, int index, const u32[4]); 3470bc7182SBen Skeggs int nvkm_ltc_zbc_depth_get(struct nvkm_ltc *, int index, const u32); 354b2c71edSBen Skeggs int nvkm_ltc_zbc_stencil_get(struct nvkm_ltc *, int index, const u32); 3670bc7182SBen Skeggs 3738a8fc78SAlexandre Courbot void nvkm_ltc_invalidate(struct nvkm_ltc *); 3838a8fc78SAlexandre Courbot void nvkm_ltc_flush(struct nvkm_ltc *); 3938a8fc78SAlexandre Courbot 400afc1c4cSBen Skeggs int gf100_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); 410afc1c4cSBen Skeggs int gk104_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); 420afc1c4cSBen Skeggs int gm107_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); 430afc1c4cSBen Skeggs int gm200_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); 440afc1c4cSBen Skeggs int gp100_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); 450afc1c4cSBen Skeggs int gp102_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); 460afc1c4cSBen Skeggs int gp10b_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); 47*21e938d0SBen Skeggs int ga102_ltc_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_ltc **); 48c39f472eSBen Skeggs #endif 49