root/drivers/media/platform/mtk-vcodec/venc_ipi_msg.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  * Copyright (c) 2016 MediaTek Inc.
   4  * Author: Jungchang Tsao <jungchang.tsao@mediatek.com>
   5  *         Daniel Hsiao <daniel.hsiao@mediatek.com>
   6  *         Tiffany Lin <tiffany.lin@mediatek.com>
   7  */
   8 
   9 #ifndef _VENC_IPI_MSG_H_
  10 #define _VENC_IPI_MSG_H_
  11 
  12 #define AP_IPIMSG_VENC_BASE 0xC000
  13 #define VPU_IPIMSG_VENC_BASE 0xD000
  14 
  15 /**
  16  * enum venc_ipi_msg_id - message id between AP and VPU
  17  * (ipi stands for inter-processor interrupt)
  18  * @AP_IPIMSG_ENC_XXX:          AP to VPU cmd message id
  19  * @VPU_IPIMSG_ENC_XXX_DONE:    VPU ack AP cmd message id
  20  */
  21 enum venc_ipi_msg_id {
  22         AP_IPIMSG_ENC_INIT = AP_IPIMSG_VENC_BASE,
  23         AP_IPIMSG_ENC_SET_PARAM,
  24         AP_IPIMSG_ENC_ENCODE,
  25         AP_IPIMSG_ENC_DEINIT,
  26 
  27         VPU_IPIMSG_ENC_INIT_DONE = VPU_IPIMSG_VENC_BASE,
  28         VPU_IPIMSG_ENC_SET_PARAM_DONE,
  29         VPU_IPIMSG_ENC_ENCODE_DONE,
  30         VPU_IPIMSG_ENC_DEINIT_DONE,
  31 };
  32 
  33 /**
  34  * struct venc_ap_ipi_msg_init - AP to VPU init cmd structure
  35  * @msg_id:     message id (AP_IPIMSG_XXX_ENC_INIT)
  36  * @reserved:   reserved for future use. vpu is running in 32bit. Without
  37  *              this reserved field, if kernel run in 64bit. this struct size
  38  *              will be different between kernel and vpu
  39  * @venc_inst:  AP encoder instance
  40  *              (struct venc_vp8_inst/venc_h264_inst *)
  41  */
  42 struct venc_ap_ipi_msg_init {
  43         uint32_t msg_id;
  44         uint32_t reserved;
  45         uint64_t venc_inst;
  46 };
  47 
  48 /**
  49  * struct venc_ap_ipi_msg_set_param - AP to VPU set_param cmd structure
  50  * @msg_id:     message id (AP_IPIMSG_XXX_ENC_SET_PARAM)
  51  * @vpu_inst_addr:      VPU encoder instance addr
  52  *                      (struct venc_vp8_vsi/venc_h264_vsi *)
  53  * @param_id:   parameter id (venc_set_param_type)
  54  * @data_item:  number of items in the data array
  55  * @data[8]:    data array to store the set parameters
  56  */
  57 struct venc_ap_ipi_msg_set_param {
  58         uint32_t msg_id;
  59         uint32_t vpu_inst_addr;
  60         uint32_t param_id;
  61         uint32_t data_item;
  62         uint32_t data[8];
  63 };
  64 
  65 /**
  66  * struct venc_ap_ipi_msg_enc - AP to VPU enc cmd structure
  67  * @msg_id:     message id (AP_IPIMSG_XXX_ENC_ENCODE)
  68  * @vpu_inst_addr:      VPU encoder instance addr
  69  *                      (struct venc_vp8_vsi/venc_h264_vsi *)
  70  * @bs_mode:    bitstream mode for h264
  71  *              (H264_BS_MODE_SPS/H264_BS_MODE_PPS/H264_BS_MODE_FRAME)
  72  * @input_addr: pointer to input image buffer plane
  73  * @bs_addr:    pointer to output bit stream buffer
  74  * @bs_size:    bit stream buffer size
  75  */
  76 struct venc_ap_ipi_msg_enc {
  77         uint32_t msg_id;
  78         uint32_t vpu_inst_addr;
  79         uint32_t bs_mode;
  80         uint32_t input_addr[3];
  81         uint32_t bs_addr;
  82         uint32_t bs_size;
  83 };
  84 
  85 /**
  86  * struct venc_ap_ipi_msg_deinit - AP to VPU deinit cmd structure
  87  * @msg_id:     message id (AP_IPIMSG_XXX_ENC_DEINIT)
  88  * @vpu_inst_addr:      VPU encoder instance addr
  89  *                      (struct venc_vp8_vsi/venc_h264_vsi *)
  90  */
  91 struct venc_ap_ipi_msg_deinit {
  92         uint32_t msg_id;
  93         uint32_t vpu_inst_addr;
  94 };
  95 
  96 /**
  97  * enum venc_ipi_msg_status - VPU ack AP cmd status
  98  */
  99 enum venc_ipi_msg_status {
 100         VENC_IPI_MSG_STATUS_OK,
 101         VENC_IPI_MSG_STATUS_FAIL,
 102 };
 103 
 104 /**
 105  * struct venc_vpu_ipi_msg_common - VPU ack AP cmd common structure
 106  * @msg_id:     message id (VPU_IPIMSG_XXX_DONE)
 107  * @status:     cmd status (venc_ipi_msg_status)
 108  * @venc_inst:  AP encoder instance (struct venc_vp8_inst/venc_h264_inst *)
 109  */
 110 struct venc_vpu_ipi_msg_common {
 111         uint32_t msg_id;
 112         uint32_t status;
 113         uint64_t venc_inst;
 114 };
 115 
 116 /**
 117  * struct venc_vpu_ipi_msg_init - VPU ack AP init cmd structure
 118  * @msg_id:     message id (VPU_IPIMSG_XXX_ENC_SET_PARAM_DONE)
 119  * @status:     cmd status (venc_ipi_msg_status)
 120  * @venc_inst:  AP encoder instance (struct venc_vp8_inst/venc_h264_inst *)
 121  * @vpu_inst_addr:      VPU encoder instance addr
 122  *                      (struct venc_vp8_vsi/venc_h264_vsi *)
 123  * @reserved:   reserved for future use. vpu is running in 32bit. Without
 124  *              this reserved field, if kernel run in 64bit. this struct size
 125  *              will be different between kernel and vpu
 126  */
 127 struct venc_vpu_ipi_msg_init {
 128         uint32_t msg_id;
 129         uint32_t status;
 130         uint64_t venc_inst;
 131         uint32_t vpu_inst_addr;
 132         uint32_t reserved;
 133 };
 134 
 135 /**
 136  * struct venc_vpu_ipi_msg_set_param - VPU ack AP set_param cmd structure
 137  * @msg_id:     message id (VPU_IPIMSG_XXX_ENC_SET_PARAM_DONE)
 138  * @status:     cmd status (venc_ipi_msg_status)
 139  * @venc_inst:  AP encoder instance (struct venc_vp8_inst/venc_h264_inst *)
 140  * @param_id:   parameter id (venc_set_param_type)
 141  * @data_item:  number of items in the data array
 142  * @data[6]:    data array to store the return result
 143  */
 144 struct venc_vpu_ipi_msg_set_param {
 145         uint32_t msg_id;
 146         uint32_t status;
 147         uint64_t venc_inst;
 148         uint32_t param_id;
 149         uint32_t data_item;
 150         uint32_t data[6];
 151 };
 152 
 153 /**
 154  * enum venc_ipi_msg_enc_state - Type of encode state
 155  * VEN_IPI_MSG_ENC_STATE_FRAME: one frame being encoded
 156  * VEN_IPI_MSG_ENC_STATE_PART:  bit stream buffer full
 157  * VEN_IPI_MSG_ENC_STATE_SKIP:  encoded skip frame
 158  * VEN_IPI_MSG_ENC_STATE_ERROR: encounter error
 159  */
 160 enum venc_ipi_msg_enc_state {
 161         VEN_IPI_MSG_ENC_STATE_FRAME,
 162         VEN_IPI_MSG_ENC_STATE_PART,
 163         VEN_IPI_MSG_ENC_STATE_SKIP,
 164         VEN_IPI_MSG_ENC_STATE_ERROR,
 165 };
 166 
 167 /**
 168  * struct venc_vpu_ipi_msg_enc - VPU ack AP enc cmd structure
 169  * @msg_id:     message id (VPU_IPIMSG_XXX_ENC_ENCODE_DONE)
 170  * @status:     cmd status (venc_ipi_msg_status)
 171  * @venc_inst:  AP encoder instance (struct venc_vp8_inst/venc_h264_inst *)
 172  * @state:      encode state (venc_ipi_msg_enc_state)
 173  * @is_key_frm: whether the encoded frame is key frame
 174  * @bs_size:    encoded bitstream size
 175  * @reserved:   reserved for future use. vpu is running in 32bit. Without
 176  *              this reserved field, if kernel run in 64bit. this struct size
 177  *              will be different between kernel and vpu
 178  */
 179 struct venc_vpu_ipi_msg_enc {
 180         uint32_t msg_id;
 181         uint32_t status;
 182         uint64_t venc_inst;
 183         uint32_t state;
 184         uint32_t is_key_frm;
 185         uint32_t bs_size;
 186         uint32_t reserved;
 187 };
 188 
 189 /**
 190  * struct venc_vpu_ipi_msg_deinit - VPU ack AP deinit cmd structure
 191  * @msg_id:   message id (VPU_IPIMSG_XXX_ENC_DEINIT_DONE)
 192  * @status:   cmd status (venc_ipi_msg_status)
 193  * @venc_inst:  AP encoder instance (struct venc_vp8_inst/venc_h264_inst *)
 194  */
 195 struct venc_vpu_ipi_msg_deinit {
 196         uint32_t msg_id;
 197         uint32_t status;
 198         uint64_t venc_inst;
 199 };
 200 
 201 #endif /* _VENC_IPI_MSG_H_ */

/* [<][>][^][v][top][bottom][index][help] */