1/* SPDX-License-Identifier: MIT */
2/*
3 * Copyright �� 2021 Intel Corporation
4 */
5#ifndef _XE_LRC_H_
6#define _XE_LRC_H_
7
8#include "xe_lrc_types.h"
9
10struct drm_printer;
11struct xe_bb;
12struct xe_device;
13struct xe_exec_queue;
14enum xe_engine_class;
15struct xe_hw_engine;
16struct xe_vm;
17
18#define LRC_PPHWSP_SCRATCH_ADDR (0x34 * 4)
19
20int xe_lrc_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe,
21		struct xe_exec_queue *q, struct xe_vm *vm, u32 ring_size);
22void xe_lrc_finish(struct xe_lrc *lrc);
23
24size_t xe_lrc_size(struct xe_device *xe, enum xe_engine_class class);
25u32 xe_lrc_pphwsp_offset(struct xe_lrc *lrc);
26
27void xe_lrc_set_ring_head(struct xe_lrc *lrc, u32 head);
28u32 xe_lrc_ring_head(struct xe_lrc *lrc);
29u32 xe_lrc_ring_space(struct xe_lrc *lrc);
30void xe_lrc_write_ring(struct xe_lrc *lrc, const void *data, size_t size);
31
32u32 xe_lrc_ggtt_addr(struct xe_lrc *lrc);
33u32 *xe_lrc_regs(struct xe_lrc *lrc);
34
35u32 xe_lrc_read_ctx_reg(struct xe_lrc *lrc, int reg_nr);
36void xe_lrc_write_ctx_reg(struct xe_lrc *lrc, int reg_nr, u32 val);
37
38u64 xe_lrc_descriptor(struct xe_lrc *lrc);
39
40u32 xe_lrc_seqno_ggtt_addr(struct xe_lrc *lrc);
41struct dma_fence *xe_lrc_create_seqno_fence(struct xe_lrc *lrc);
42s32 xe_lrc_seqno(struct xe_lrc *lrc);
43
44u32 xe_lrc_start_seqno_ggtt_addr(struct xe_lrc *lrc);
45s32 xe_lrc_start_seqno(struct xe_lrc *lrc);
46
47u32 xe_lrc_parallel_ggtt_addr(struct xe_lrc *lrc);
48struct iosys_map xe_lrc_parallel_map(struct xe_lrc *lrc);
49
50size_t xe_lrc_skip_size(struct xe_device *xe);
51
52void xe_lrc_dump_default(struct drm_printer *p,
53			 struct xe_gt *gt,
54			 enum xe_engine_class);
55
56void xe_lrc_emit_hwe_state_instructions(struct xe_exec_queue *q, struct xe_bb *bb);
57
58#endif
59