Loading...
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 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 | /* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2016 MediaTek Inc. * Author: Jungchang Tsao <jungchang.tsao@mediatek.com> * Daniel Hsiao <daniel.hsiao@mediatek.com> * Tiffany Lin <tiffany.lin@mediatek.com> */ #ifndef _VENC_IPI_MSG_H_ #define _VENC_IPI_MSG_H_ #define AP_IPIMSG_VENC_BASE 0xC000 #define VPU_IPIMSG_VENC_BASE 0xD000 /* * enum venc_ipi_msg_id - message id between AP and VPU * (ipi stands for inter-processor interrupt) * @AP_IPIMSG_ENC_XXX: AP to VPU cmd message id * @VPU_IPIMSG_ENC_XXX_DONE: VPU ack AP cmd message id */ enum venc_ipi_msg_id { AP_IPIMSG_ENC_INIT = AP_IPIMSG_VENC_BASE, AP_IPIMSG_ENC_SET_PARAM, AP_IPIMSG_ENC_ENCODE, AP_IPIMSG_ENC_DEINIT, VPU_IPIMSG_ENC_INIT_DONE = VPU_IPIMSG_VENC_BASE, VPU_IPIMSG_ENC_SET_PARAM_DONE, VPU_IPIMSG_ENC_ENCODE_DONE, VPU_IPIMSG_ENC_DEINIT_DONE, }; /** * struct venc_ap_ipi_msg_init - AP to VPU init cmd structure * @msg_id: message id (AP_IPIMSG_XXX_ENC_INIT) * @reserved: reserved for future use. vpu is running in 32bit. Without * this reserved field, if kernel run in 64bit. this struct size * will be different between kernel and vpu * @venc_inst: AP encoder instance * (struct venc_vp8_inst/venc_h264_inst *) */ struct venc_ap_ipi_msg_init { uint32_t msg_id; uint32_t reserved; uint64_t venc_inst; }; /** * struct venc_ap_ipi_msg_set_param - AP to VPU set_param cmd structure * @msg_id: message id (AP_IPIMSG_XXX_ENC_SET_PARAM) * @vpu_inst_addr: VPU encoder instance addr * (struct venc_vp8_vsi/venc_h264_vsi *) * @param_id: parameter id (venc_set_param_type) * @data_item: number of items in the data array * @data: data array to store the set parameters */ struct venc_ap_ipi_msg_set_param { uint32_t msg_id; uint32_t vpu_inst_addr; uint32_t param_id; uint32_t data_item; uint32_t data[8]; }; struct venc_ap_ipi_msg_set_param_ext { struct venc_ap_ipi_msg_set_param base; uint32_t data_ext[24]; }; /** * struct venc_ap_ipi_msg_enc - AP to VPU enc cmd structure * @msg_id: message id (AP_IPIMSG_XXX_ENC_ENCODE) * @vpu_inst_addr: VPU encoder instance addr * (struct venc_vp8_vsi/venc_h264_vsi *) * @bs_mode: bitstream mode for h264 * (H264_BS_MODE_SPS/H264_BS_MODE_PPS/H264_BS_MODE_FRAME) * @input_addr: pointer to input image buffer plane * @bs_addr: pointer to output bit stream buffer * @bs_size: bit stream buffer size */ struct venc_ap_ipi_msg_enc { uint32_t msg_id; uint32_t vpu_inst_addr; uint32_t bs_mode; uint32_t input_addr[3]; uint32_t bs_addr; uint32_t bs_size; }; /** * struct venc_ap_ipi_msg_enc_ext - AP to SCP extended enc cmd structure * * @base: base msg structure * @data_item: number of items in the data array * @data: data array to store the set parameters */ struct venc_ap_ipi_msg_enc_ext { struct venc_ap_ipi_msg_enc base; uint32_t data_item; uint32_t data[32]; }; /** * struct venc_ap_ipi_msg_enc_ext_34 - AP to SCP extended enc cmd structure * @msg_id: message id (AP_IPIMSG_XXX_ENC_ENCODE) * @vpu_inst_addr: VPU encoder instance addr * @bs_mode: bitstream mode for h264 * @reserved: for struct padding * @input_addr: input frame buffer 34 bit address * @bs_addr: output bitstream buffer 34 bit address * @bs_size: bitstream buffer size * @data_item: number of items in the data array * @data: data array to store the set parameters */ struct venc_ap_ipi_msg_enc_ext_34 { u32 msg_id; u32 vpu_inst_addr; u32 bs_mode; u32 reserved; u64 input_addr[3]; u64 bs_addr; u32 bs_size; u32 data_item; u32 data[32]; }; /** * struct venc_ap_ipi_msg_deinit - AP to VPU deinit cmd structure * @msg_id: message id (AP_IPIMSG_XXX_ENC_DEINIT) * @vpu_inst_addr: VPU encoder instance addr * (struct venc_vp8_vsi/venc_h264_vsi *) */ struct venc_ap_ipi_msg_deinit { uint32_t msg_id; uint32_t vpu_inst_addr; }; /* * enum venc_ipi_msg_status - VPU ack AP cmd status */ enum venc_ipi_msg_status { VENC_IPI_MSG_STATUS_OK, VENC_IPI_MSG_STATUS_FAIL, }; /** * struct venc_vpu_ipi_msg_common - VPU ack AP cmd common structure * @msg_id: message id (VPU_IPIMSG_XXX_DONE) * @status: cmd status (venc_ipi_msg_status) * @venc_inst: AP encoder instance (struct venc_vp8_inst/venc_h264_inst *) */ struct venc_vpu_ipi_msg_common { uint32_t msg_id; uint32_t status; uint64_t venc_inst; }; /** * struct venc_vpu_ipi_msg_init - VPU ack AP init cmd structure * @msg_id: message id (VPU_IPIMSG_XXX_ENC_SET_PARAM_DONE) * @status: cmd status (venc_ipi_msg_status) * @venc_inst: AP encoder instance (struct venc_vp8_inst/venc_h264_inst *) * @vpu_inst_addr: VPU encoder instance addr * (struct venc_vp8_vsi/venc_h264_vsi *) * @venc_abi_version: ABI version of the firmware. Kernel can use it to * ensure that it is compatible with the firmware. * For MT8173 the value of this field is undefined and * should not be used. */ struct venc_vpu_ipi_msg_init { uint32_t msg_id; uint32_t status; uint64_t venc_inst; uint32_t vpu_inst_addr; uint32_t venc_abi_version; }; /** * struct venc_vpu_ipi_msg_set_param - VPU ack AP set_param cmd structure * @msg_id: message id (VPU_IPIMSG_XXX_ENC_SET_PARAM_DONE) * @status: cmd status (venc_ipi_msg_status) * @venc_inst: AP encoder instance (struct venc_vp8_inst/venc_h264_inst *) * @param_id: parameter id (venc_set_param_type) * @data_item: number of items in the data array * @data: data array to store the return result */ struct venc_vpu_ipi_msg_set_param { uint32_t msg_id; uint32_t status; uint64_t venc_inst; uint32_t param_id; uint32_t data_item; uint32_t data[6]; }; /** * enum venc_ipi_msg_enc_state - Type of encode state * @VEN_IPI_MSG_ENC_STATE_FRAME: one frame being encoded * @VEN_IPI_MSG_ENC_STATE_PART: bit stream buffer full * @VEN_IPI_MSG_ENC_STATE_SKIP: encoded skip frame * @VEN_IPI_MSG_ENC_STATE_ERROR: encounter error */ enum venc_ipi_msg_enc_state { VEN_IPI_MSG_ENC_STATE_FRAME, VEN_IPI_MSG_ENC_STATE_PART, VEN_IPI_MSG_ENC_STATE_SKIP, VEN_IPI_MSG_ENC_STATE_ERROR, }; /** * struct venc_vpu_ipi_msg_enc - VPU ack AP enc cmd structure * @msg_id: message id (VPU_IPIMSG_XXX_ENC_ENCODE_DONE) * @status: cmd status (venc_ipi_msg_status) * @venc_inst: AP encoder instance (struct venc_vp8_inst/venc_h264_inst *) * @state: encode state (venc_ipi_msg_enc_state) * @is_key_frm: whether the encoded frame is key frame * @bs_size: encoded bitstream size * @reserved: reserved for future use. vpu is running in 32bit. Without * this reserved field, if kernel run in 64bit. this struct size * will be different between kernel and vpu */ struct venc_vpu_ipi_msg_enc { uint32_t msg_id; uint32_t status; uint64_t venc_inst; uint32_t state; uint32_t is_key_frm; uint32_t bs_size; uint32_t reserved; }; /** * struct venc_vpu_ipi_msg_deinit - VPU ack AP deinit cmd structure * @msg_id: message id (VPU_IPIMSG_XXX_ENC_DEINIT_DONE) * @status: cmd status (venc_ipi_msg_status) * @venc_inst: AP encoder instance (struct venc_vp8_inst/venc_h264_inst *) */ struct venc_vpu_ipi_msg_deinit { uint32_t msg_id; uint32_t status; uint64_t venc_inst; }; #endif /* _VENC_IPI_MSG_H_ */ |