summaryrefslogtreecommitdiff
path: root/drivers/media/platform/mediatek/vcodec/decoder/vdec_ipi_msg.h
blob: 47070be2a99148f0bc7d0d3976d60ae8b8e05015 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (c) 2016 MediaTek Inc.
 * Author: PC Chen <pc.chen@mediatek.com>
 */

#ifndef _VDEC_IPI_MSG_H_
#define _VDEC_IPI_MSG_H_

/*
 * enum vdec_ipi_msgid - message id between AP and VPU
 * @AP_IPIMSG_XXX	: AP to VPU cmd message id
 * @VPU_IPIMSG_XXX_ACK	: VPU ack AP cmd message id
 */
enum vdec_ipi_msgid {
	AP_IPIMSG_DEC_INIT = 0xA000,
	AP_IPIMSG_DEC_START = 0xA001,
	AP_IPIMSG_DEC_END = 0xA002,
	AP_IPIMSG_DEC_DEINIT = 0xA003,
	AP_IPIMSG_DEC_RESET = 0xA004,
	AP_IPIMSG_DEC_CORE = 0xA005,
	AP_IPIMSG_DEC_CORE_END = 0xA006,
	AP_IPIMSG_DEC_GET_PARAM = 0xA007,

	VPU_IPIMSG_DEC_INIT_ACK = 0xB000,
	VPU_IPIMSG_DEC_START_ACK = 0xB001,
	VPU_IPIMSG_DEC_END_ACK = 0xB002,
	VPU_IPIMSG_DEC_DEINIT_ACK = 0xB003,
	VPU_IPIMSG_DEC_RESET_ACK = 0xB004,
	VPU_IPIMSG_DEC_CORE_ACK = 0xB005,
	VPU_IPIMSG_DEC_CORE_END_ACK = 0xB006,
	VPU_IPIMSG_DEC_GET_PARAM_ACK = 0xB007,
};

/**
 * struct vdec_ap_ipi_cmd - generic AP to VPU ipi command format
 * @msg_id	: vdec_ipi_msgid
 * @vpu_inst_addr : VPU decoder instance address. Used if ABI version < 2.
 * @inst_id     : instance ID. Used if the ABI version >= 2.
 * @codec_type	: codec fourcc
 * @reserved	: reserved param
 */
struct vdec_ap_ipi_cmd {
	uint32_t msg_id;
	union {
		uint32_t vpu_inst_addr;
		uint32_t inst_id;
	};
	u32 codec_type;
	u32 reserved;
};

/**
 * struct vdec_vpu_ipi_ack - generic VPU to AP ipi command format
 * @msg_id	: vdec_ipi_msgid
 * @status	: VPU exeuction result
 * @ap_inst_addr	: AP video decoder instance address
 */
struct vdec_vpu_ipi_ack {
	uint32_t msg_id;
	int32_t status;
	uint64_t ap_inst_addr;
};

/**
 * struct vdec_ap_ipi_init - for AP_IPIMSG_DEC_INIT
 * @msg_id	: AP_IPIMSG_DEC_INIT
 * @codec_type	: codec fourcc
 * @ap_inst_addr	: AP video decoder instance address
 */
struct vdec_ap_ipi_init {
	uint32_t msg_id;
	u32 codec_type;
	uint64_t ap_inst_addr;
};

/**
 * struct vdec_ap_ipi_dec_start - for AP_IPIMSG_DEC_START
 * @msg_id	: AP_IPIMSG_DEC_START
 * @vpu_inst_addr : VPU decoder instance address. Used if ABI version < 2.
 * @inst_id     : instance ID. Used if the ABI version >= 2.
 * @data	: Header info
 *	H264 decoder [0]:buf_sz [1]:nal_start
 *	VP8 decoder  [0]:width/height
 *	VP9 decoder  [0]:profile, [1][2] width/height
 * @codec_type	: codec fourcc
 */
struct vdec_ap_ipi_dec_start {
	uint32_t msg_id;
	union {
		uint32_t vpu_inst_addr;
		uint32_t inst_id;
	};
	uint32_t data[3];
	u32 codec_type;
};

/**
 * struct vdec_vpu_ipi_init_ack - for VPU_IPIMSG_DEC_INIT_ACK
 * @msg_id	: VPU_IPIMSG_DEC_INIT_ACK
 * @status	: VPU exeuction result
 * @ap_inst_addr	: AP vcodec_vpu_inst instance address
 * @vpu_inst_addr	: VPU decoder instance address
 * @vdec_abi_version:	ABI version of the firmware. Kernel can use it to
 *			ensure that it is compatible with the firmware.
 *			This field is not valid for MT8173 and must not be
 *			accessed for this chip.
 * @inst_id     : instance ID. Valid only if the ABI version >= 2.
 */
struct vdec_vpu_ipi_init_ack {
	uint32_t msg_id;
	int32_t status;
	uint64_t ap_inst_addr;
	uint32_t vpu_inst_addr;
	uint32_t vdec_abi_version;
	uint32_t inst_id;
};

/**
 * struct vdec_ap_ipi_get_param - for AP_IPIMSG_DEC_GET_PARAM
 * @msg_id	: AP_IPIMSG_DEC_GET_PARAM
 * @inst_id     : instance ID. Used if the ABI version >= 2.
 * @data	: picture information
 * @param_type	: get param type
 * @codec_type	: Codec fourcc
 */
struct vdec_ap_ipi_get_param {
	u32 msg_id;
	u32 inst_id;
	u32 data[4];
	u32 param_type;
	u32 codec_type;
};

/**
 * struct vdec_vpu_ipi_get_param_ack - for VPU_IPIMSG_DEC_GET_PARAM_ACK
 * @msg_id	: VPU_IPIMSG_DEC_GET_PARAM_ACK
 * @status	: VPU execution result
 * @ap_inst_addr	: AP vcodec_vpu_inst instance address
 * @data     : picture information from SCP.
 * @param_type	: get param type
 * @reserved : reserved param
 */
struct vdec_vpu_ipi_get_param_ack {
	u32 msg_id;
	s32 status;
	u64 ap_inst_addr;
	u32 data[4];
	u32 param_type;
	u32 reserved;
};

#endif