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 */ 76