| /* 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[8]:    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[8]:    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_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[6]:    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_ */ |