cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

venc_ipi_msg.h (6429B)


      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 */
     21enum 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 */
     42struct 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:	data array to store the set parameters
     56 */
     57struct 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
     65struct venc_ap_ipi_msg_set_param_ext {
     66	struct venc_ap_ipi_msg_set_param base;
     67	uint32_t data_ext[24];
     68};
     69
     70/**
     71 * struct venc_ap_ipi_msg_enc - AP to VPU enc cmd structure
     72 * @msg_id:	message id (AP_IPIMSG_XXX_ENC_ENCODE)
     73 * @vpu_inst_addr:	VPU encoder instance addr
     74 *			(struct venc_vp8_vsi/venc_h264_vsi *)
     75 * @bs_mode:	bitstream mode for h264
     76 *		(H264_BS_MODE_SPS/H264_BS_MODE_PPS/H264_BS_MODE_FRAME)
     77 * @input_addr:	pointer to input image buffer plane
     78 * @bs_addr:	pointer to output bit stream buffer
     79 * @bs_size:	bit stream buffer size
     80 */
     81struct venc_ap_ipi_msg_enc {
     82	uint32_t msg_id;
     83	uint32_t vpu_inst_addr;
     84	uint32_t bs_mode;
     85	uint32_t input_addr[3];
     86	uint32_t bs_addr;
     87	uint32_t bs_size;
     88};
     89
     90/**
     91 * struct venc_ap_ipi_msg_enc_ext - AP to SCP extended enc cmd structure
     92 *
     93 * @base:	base msg structure
     94 * @data_item:	number of items in the data array
     95 * @data:	data array to store the set parameters
     96 */
     97struct venc_ap_ipi_msg_enc_ext {
     98	struct venc_ap_ipi_msg_enc base;
     99	uint32_t data_item;
    100	uint32_t data[32];
    101};
    102
    103/**
    104 * struct venc_ap_ipi_msg_deinit - AP to VPU deinit cmd structure
    105 * @msg_id:	message id (AP_IPIMSG_XXX_ENC_DEINIT)
    106 * @vpu_inst_addr:	VPU encoder instance addr
    107 *			(struct venc_vp8_vsi/venc_h264_vsi *)
    108 */
    109struct venc_ap_ipi_msg_deinit {
    110	uint32_t msg_id;
    111	uint32_t vpu_inst_addr;
    112};
    113
    114/*
    115 * enum venc_ipi_msg_status - VPU ack AP cmd status
    116 */
    117enum venc_ipi_msg_status {
    118	VENC_IPI_MSG_STATUS_OK,
    119	VENC_IPI_MSG_STATUS_FAIL,
    120};
    121
    122/**
    123 * struct venc_vpu_ipi_msg_common - VPU ack AP cmd common structure
    124 * @msg_id:	message id (VPU_IPIMSG_XXX_DONE)
    125 * @status:	cmd status (venc_ipi_msg_status)
    126 * @venc_inst:	AP encoder instance (struct venc_vp8_inst/venc_h264_inst *)
    127 */
    128struct venc_vpu_ipi_msg_common {
    129	uint32_t msg_id;
    130	uint32_t status;
    131	uint64_t venc_inst;
    132};
    133
    134/**
    135 * struct venc_vpu_ipi_msg_init - VPU ack AP init cmd structure
    136 * @msg_id:	message id (VPU_IPIMSG_XXX_ENC_SET_PARAM_DONE)
    137 * @status:	cmd status (venc_ipi_msg_status)
    138 * @venc_inst:	AP encoder instance (struct venc_vp8_inst/venc_h264_inst *)
    139 * @vpu_inst_addr:	VPU encoder instance addr
    140 *			(struct venc_vp8_vsi/venc_h264_vsi *)
    141 * @venc_abi_version:	ABI version of the firmware. Kernel can use it to
    142 *			ensure that it is compatible with the firmware.
    143 *			For MT8173 the value of this field is undefined and
    144 *			should not be used.
    145 */
    146struct venc_vpu_ipi_msg_init {
    147	uint32_t msg_id;
    148	uint32_t status;
    149	uint64_t venc_inst;
    150	uint32_t vpu_inst_addr;
    151	uint32_t venc_abi_version;
    152};
    153
    154/**
    155 * struct venc_vpu_ipi_msg_set_param - VPU ack AP set_param cmd structure
    156 * @msg_id:	message id (VPU_IPIMSG_XXX_ENC_SET_PARAM_DONE)
    157 * @status:	cmd status (venc_ipi_msg_status)
    158 * @venc_inst:	AP encoder instance (struct venc_vp8_inst/venc_h264_inst *)
    159 * @param_id:	parameter id (venc_set_param_type)
    160 * @data_item:	number of items in the data array
    161 * @data:	data array to store the return result
    162 */
    163struct venc_vpu_ipi_msg_set_param {
    164	uint32_t msg_id;
    165	uint32_t status;
    166	uint64_t venc_inst;
    167	uint32_t param_id;
    168	uint32_t data_item;
    169	uint32_t data[6];
    170};
    171
    172/**
    173 * enum venc_ipi_msg_enc_state - Type of encode state
    174 * @VEN_IPI_MSG_ENC_STATE_FRAME:	one frame being encoded
    175 * @VEN_IPI_MSG_ENC_STATE_PART:		bit stream buffer full
    176 * @VEN_IPI_MSG_ENC_STATE_SKIP:		encoded skip frame
    177 * @VEN_IPI_MSG_ENC_STATE_ERROR:	encounter error
    178 */
    179enum venc_ipi_msg_enc_state {
    180	VEN_IPI_MSG_ENC_STATE_FRAME,
    181	VEN_IPI_MSG_ENC_STATE_PART,
    182	VEN_IPI_MSG_ENC_STATE_SKIP,
    183	VEN_IPI_MSG_ENC_STATE_ERROR,
    184};
    185
    186/**
    187 * struct venc_vpu_ipi_msg_enc - VPU ack AP enc cmd structure
    188 * @msg_id:	message id (VPU_IPIMSG_XXX_ENC_ENCODE_DONE)
    189 * @status:	cmd status (venc_ipi_msg_status)
    190 * @venc_inst:	AP encoder instance (struct venc_vp8_inst/venc_h264_inst *)
    191 * @state:	encode state (venc_ipi_msg_enc_state)
    192 * @is_key_frm:	whether the encoded frame is key frame
    193 * @bs_size:	encoded bitstream size
    194 * @reserved:	reserved for future use. vpu is running in 32bit. Without
    195 *		this reserved field, if kernel run in 64bit. this struct size
    196 *		will be different between kernel and vpu
    197 */
    198struct venc_vpu_ipi_msg_enc {
    199	uint32_t msg_id;
    200	uint32_t status;
    201	uint64_t venc_inst;
    202	uint32_t state;
    203	uint32_t is_key_frm;
    204	uint32_t bs_size;
    205	uint32_t reserved;
    206};
    207
    208/**
    209 * struct venc_vpu_ipi_msg_deinit - VPU ack AP deinit cmd structure
    210 * @msg_id:   message id (VPU_IPIMSG_XXX_ENC_DEINIT_DONE)
    211 * @status:   cmd status (venc_ipi_msg_status)
    212 * @venc_inst:	AP encoder instance (struct venc_vp8_inst/venc_h264_inst *)
    213 */
    214struct venc_vpu_ipi_msg_deinit {
    215	uint32_t msg_id;
    216	uint32_t status;
    217	uint64_t venc_inst;
    218};
    219
    220#endif /* _VENC_IPI_MSG_H_ */