Loading...
Note: File does not exist in v4.6.
1/* SPDX-License-Identifier: GPL-2.0-only OR MIT */
2/* Copyright (c) 2023 Imagination Technologies Ltd. */
3
4#ifndef PVR_STREAM_H
5#define PVR_STREAM_H
6
7#include <linux/bits.h>
8#include <linux/limits.h>
9#include <linux/types.h>
10
11struct pvr_device;
12
13struct pvr_job;
14
15enum pvr_stream_type {
16 PVR_STREAM_TYPE_GEOM = 0,
17 PVR_STREAM_TYPE_FRAG,
18 PVR_STREAM_TYPE_COMPUTE,
19 PVR_STREAM_TYPE_TRANSFER,
20 PVR_STREAM_TYPE_STATIC_RENDER_CONTEXT,
21 PVR_STREAM_TYPE_STATIC_COMPUTE_CONTEXT,
22
23 PVR_STREAM_TYPE_MAX
24};
25
26enum pvr_stream_size {
27 PVR_STREAM_SIZE_8 = 0,
28 PVR_STREAM_SIZE_16,
29 PVR_STREAM_SIZE_32,
30 PVR_STREAM_SIZE_64,
31 PVR_STREAM_SIZE_ARRAY,
32};
33
34#define PVR_FEATURE_NOT BIT(31)
35#define PVR_FEATURE_NONE U32_MAX
36
37struct pvr_stream_def {
38 u32 offset;
39 enum pvr_stream_size size;
40 u32 array_size;
41 u32 feature;
42};
43
44struct pvr_stream_ext_def {
45 const struct pvr_stream_def *stream;
46 u32 stream_len;
47 u32 header_mask;
48 u32 quirk;
49};
50
51struct pvr_stream_ext_header {
52 const struct pvr_stream_ext_def *ext_streams;
53 u32 ext_streams_num;
54 u32 valid_mask;
55};
56
57struct pvr_stream_cmd_defs {
58 enum pvr_stream_type type;
59
60 const struct pvr_stream_def *main_stream;
61 u32 main_stream_len;
62
63 u32 ext_nr_headers;
64 const struct pvr_stream_ext_header *ext_headers;
65
66 size_t dest_size;
67};
68
69int
70pvr_stream_process(struct pvr_device *pvr_dev, const struct pvr_stream_cmd_defs *cmd_defs,
71 void *stream, u32 stream_size, void *dest_out);
72void
73pvr_stream_create_musthave_masks(struct pvr_device *pvr_dev);
74
75#endif /* PVR_STREAM_H */