162306a36Sopenharmony_ci/* SPDX-License-Identifier: MIT */
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci#ifndef __CRCC37D_H__
462306a36Sopenharmony_ci#define __CRCC37D_H__
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include <linux/types.h>
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include "crc.h"
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#define CRCC37D_MAX_ENTRIES 2047
1162306a36Sopenharmony_ci#define CRCC37D_FLIP_THRESHOLD (CRCC37D_MAX_ENTRIES - 30)
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cistruct crcc37d_notifier {
1462306a36Sopenharmony_ci	u32 status;
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci	/* reserved */
1762306a36Sopenharmony_ci	u32:32;
1862306a36Sopenharmony_ci	u32:32;
1962306a36Sopenharmony_ci	u32:32;
2062306a36Sopenharmony_ci	u32:32;
2162306a36Sopenharmony_ci	u32:32;
2262306a36Sopenharmony_ci	u32:32;
2362306a36Sopenharmony_ci	u32:32;
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci	struct crcc37d_entry {
2662306a36Sopenharmony_ci		u32 status[2];
2762306a36Sopenharmony_ci		u32:32; /* reserved */
2862306a36Sopenharmony_ci		u32 compositor_crc;
2962306a36Sopenharmony_ci		u32 rg_crc;
3062306a36Sopenharmony_ci		u32 output_crc[2];
3162306a36Sopenharmony_ci		u32:32; /* reserved */
3262306a36Sopenharmony_ci	} entries[CRCC37D_MAX_ENTRIES];
3362306a36Sopenharmony_ci} __packed;
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciint crcc37d_set_ctx(struct nv50_head *head, struct nv50_crc_notifier_ctx *ctx);
3662306a36Sopenharmony_ciu32 crcc37d_get_entry(struct nv50_head *head, struct nv50_crc_notifier_ctx *ctx,
3762306a36Sopenharmony_ci		      enum nv50_crc_source source, int idx);
3862306a36Sopenharmony_cibool crcc37d_ctx_finished(struct nv50_head *head, struct nv50_crc_notifier_ctx *ctx);
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci#endif /* !__CRCC37D_H__ */
41