12799bba6SBen Skeggs #ifndef __NVKM_LTC_H__
22799bba6SBen Skeggs #define __NVKM_LTC_H__
3c39f472eSBen Skeggs #include <core/subdev.h>
42799bba6SBen Skeggs struct nvkm_mm_node;
5c39f472eSBen Skeggs 
62799bba6SBen Skeggs #define NVKM_LTC_MAX_ZBC_CNT 16
7c39f472eSBen Skeggs 
82799bba6SBen Skeggs struct nvkm_ltc {
92799bba6SBen Skeggs 	struct nvkm_subdev base;
10c39f472eSBen Skeggs 
112799bba6SBen Skeggs 	int  (*tags_alloc)(struct nvkm_ltc *, u32 count,
122799bba6SBen Skeggs 			   struct nvkm_mm_node **);
132799bba6SBen Skeggs 	void (*tags_free)(struct nvkm_ltc *, struct nvkm_mm_node **);
142799bba6SBen Skeggs 	void (*tags_clear)(struct nvkm_ltc *, u32 first, u32 count);
15c39f472eSBen Skeggs 
16c39f472eSBen Skeggs 	int zbc_min;
17c39f472eSBen Skeggs 	int zbc_max;
182799bba6SBen Skeggs 	int (*zbc_color_get)(struct nvkm_ltc *, int index, const u32[4]);
192799bba6SBen Skeggs 	int (*zbc_depth_get)(struct nvkm_ltc *, int index, const u32);
20c39f472eSBen Skeggs };
21c39f472eSBen Skeggs 
222799bba6SBen Skeggs static inline struct nvkm_ltc *
232799bba6SBen Skeggs nvkm_ltc(void *obj)
24c39f472eSBen Skeggs {
252799bba6SBen Skeggs 	return (void *)nvkm_subdev(obj, NVDEV_SUBDEV_LTC);
26c39f472eSBen Skeggs }
27c39f472eSBen Skeggs 
282799bba6SBen Skeggs extern struct nvkm_oclass *gf100_ltc_oclass;
292799bba6SBen Skeggs extern struct nvkm_oclass *gk104_ltc_oclass;
302799bba6SBen Skeggs extern struct nvkm_oclass *gm107_ltc_oclass;
31c39f472eSBen Skeggs 
32c39f472eSBen Skeggs #endif
33