1/*	$NetBSD: intel_dsb.h,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
2
3/* SPDX-License-Identifier: MIT
4 *
5 * Copyright �� 2019 Intel Corporation
6 */
7
8#ifndef _INTEL_DSB_H
9#define _INTEL_DSB_H
10
11#include <linux/types.h>
12
13#include "i915_reg.h"
14
15struct intel_crtc;
16struct i915_vma;
17
18enum dsb_id {
19	INVALID_DSB = -1,
20	DSB1,
21	DSB2,
22	DSB3,
23	MAX_DSB_PER_PIPE
24};
25
26struct intel_dsb {
27	long refcount;
28	enum dsb_id id;
29	u32 *cmd_buf;
30	struct i915_vma *vma;
31
32	/*
33	 * free_pos will point the first free entry position
34	 * and help in calculating tail of command buffer.
35	 */
36	int free_pos;
37
38	/*
39	 * ins_start_offset will help to store start address of the dsb
40	 * instuction and help in identifying the batch of auto-increment
41	 * register.
42	 */
43	u32 ins_start_offset;
44};
45
46struct intel_dsb *
47intel_dsb_get(struct intel_crtc *crtc);
48void intel_dsb_put(struct intel_dsb *dsb);
49void intel_dsb_reg_write(struct intel_dsb *dsb, i915_reg_t reg, u32 val);
50void intel_dsb_indexed_reg_write(struct intel_dsb *dsb, i915_reg_t reg,
51				 u32 val);
52void intel_dsb_commit(struct intel_dsb *dsb);
53
54#endif
55