root/drivers/media/platform/mtk-vpu/mtk_vpu.h

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

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3 * Copyright (c) 2016 MediaTek Inc.
   4 * Author: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
   5 */
   6 
   7 #ifndef _MTK_VPU_H
   8 #define _MTK_VPU_H
   9 
  10 #include <linux/platform_device.h>
  11 
  12 /**
  13  * VPU (video processor unit) is a tiny processor controlling video hardware
  14  * related to video codec, scaling and color format converting.
  15  * VPU interfaces with other blocks by share memory and interrupt.
  16  **/
  17 
  18 typedef void (*ipi_handler_t) (void *data,
  19                                unsigned int len,
  20                                void *priv);
  21 
  22 /**
  23  * enum ipi_id - the id of inter-processor interrupt
  24  *
  25  * @IPI_VPU_INIT:        The interrupt from vpu is to notfiy kernel
  26  *                       VPU initialization completed.
  27  *                       IPI_VPU_INIT is sent from VPU when firmware is
  28  *                       loaded. AP doesn't need to send IPI_VPU_INIT
  29  *                       command to VPU.
  30  *                       For other IPI below, AP should send the request
  31  *                       to VPU to trigger the interrupt.
  32  * @IPI_VDEC_H264:       The interrupt from vpu is to notify kernel to
  33  *                       handle H264 vidoe decoder job, and vice versa.
  34  *                       Decode output format is always MT21 no matter what
  35  *                       the input format is.
  36  * @IPI_VDEC_VP8:        The interrupt from is to notify kernel to
  37  *                       handle VP8 video decoder job, and vice versa.
  38  *                       Decode output format is always MT21 no matter what
  39  *                       the input format is.
  40  * @IPI_VDEC_VP9:        The interrupt from vpu is to notify kernel to
  41  *                       handle VP9 video decoder job, and vice versa.
  42  *                       Decode output format is always MT21 no matter what
  43  *                       the input format is.
  44  * @IPI_VENC_H264:       The interrupt from vpu is to notify kernel to
  45  *                       handle H264 video encoder job, and vice versa.
  46  * @IPI_VENC_VP8:        The interrupt fro vpu is to notify kernel to
  47  *                       handle VP8 video encoder job,, and vice versa.
  48  * @IPI_MDP:             The interrupt from vpu is to notify kernel to
  49  *                       handle MDP (Media Data Path) job, and vice versa.
  50  * @IPI_MAX:             The maximum IPI number
  51  */
  52 
  53 enum ipi_id {
  54         IPI_VPU_INIT = 0,
  55         IPI_VDEC_H264,
  56         IPI_VDEC_VP8,
  57         IPI_VDEC_VP9,
  58         IPI_VENC_H264,
  59         IPI_VENC_VP8,
  60         IPI_MDP,
  61         IPI_MAX,
  62 };
  63 
  64 /**
  65  * enum rst_id - reset id to register reset function for VPU watchdog timeout
  66  *
  67  * @VPU_RST_ENC: encoder reset id
  68  * @VPU_RST_DEC: decoder reset id
  69  * @VPU_RST_MDP: MDP (Media Data Path) reset id
  70  * @VPU_RST_MAX: maximum reset id
  71  */
  72 enum rst_id {
  73         VPU_RST_ENC,
  74         VPU_RST_DEC,
  75         VPU_RST_MDP,
  76         VPU_RST_MAX,
  77 };
  78 
  79 /**
  80  * vpu_ipi_register - register an ipi function
  81  *
  82  * @pdev:       VPU platform device
  83  * @id:         IPI ID
  84  * @handler:    IPI handler
  85  * @name:       IPI name
  86  * @priv:       private data for IPI handler
  87  *
  88  * Register an ipi function to receive ipi interrupt from VPU.
  89  *
  90  * Return: Return 0 if ipi registers successfully, otherwise it is failed.
  91  */
  92 int vpu_ipi_register(struct platform_device *pdev, enum ipi_id id,
  93                      ipi_handler_t handler, const char *name, void *priv);
  94 
  95 /**
  96  * vpu_ipi_send - send data from AP to vpu.
  97  *
  98  * @pdev:       VPU platform device
  99  * @id:         IPI ID
 100  * @buf:        the data buffer
 101  * @len:        the data buffer length
 102  *
 103  * This function is thread-safe. When this function returns,
 104  * VPU has received the data and starts the processing.
 105  * When the processing completes, IPI handler registered
 106  * by vpu_ipi_register will be called in interrupt context.
 107  *
 108  * Return: Return 0 if sending data successfully, otherwise it is failed.
 109  **/
 110 int vpu_ipi_send(struct platform_device *pdev,
 111                  enum ipi_id id, void *buf,
 112                  unsigned int len);
 113 
 114 /**
 115  * vpu_get_plat_device - get VPU's platform device
 116  *
 117  * @pdev:       the platform device of the module requesting VPU platform
 118  *              device for using VPU API.
 119  *
 120  * Return: Return NULL if it is failed.
 121  * otherwise it is VPU's platform device
 122  **/
 123 struct platform_device *vpu_get_plat_device(struct platform_device *pdev);
 124 
 125 /**
 126  * vpu_wdt_reg_handler - register a VPU watchdog handler
 127  *
 128  * @pdev:               VPU platform device
 129  * @vpu_wdt_reset_func: the callback reset function
 130  * @private_data:       the private data for reset function
 131  * @rst_id:             reset id
 132  *
 133  * Register a handler performing own tasks when vpu reset by watchdog
 134  *
 135  * Return: Return 0 if the handler is added successfully,
 136  * otherwise it is failed.
 137  *
 138  **/
 139 int vpu_wdt_reg_handler(struct platform_device *pdev,
 140                         void vpu_wdt_reset_func(void *),
 141                         void *priv, enum rst_id id);
 142 
 143 /**
 144  * vpu_get_vdec_hw_capa - get video decoder hardware capability
 145  *
 146  * @pdev:       VPU platform device
 147  *
 148  * Return: video decoder hardware capability
 149  **/
 150 unsigned int vpu_get_vdec_hw_capa(struct platform_device *pdev);
 151 
 152 /**
 153  * vpu_get_venc_hw_capa - get video encoder hardware capability
 154  *
 155  * @pdev:       VPU platform device
 156  *
 157  * Return: video encoder hardware capability
 158  **/
 159 unsigned int vpu_get_venc_hw_capa(struct platform_device *pdev);
 160 
 161 /**
 162  * vpu_load_firmware - download VPU firmware and boot it
 163  *
 164  * @pdev:       VPU platform device
 165  *
 166  * Return: Return 0 if downloading firmware successfully,
 167  * otherwise it is failed
 168  **/
 169 int vpu_load_firmware(struct platform_device *pdev);
 170 
 171 /**
 172  * vpu_mapping_dm_addr - Mapping DTCM/DMEM to kernel virtual address
 173  *
 174  * @pdev:       VPU platform device
 175  * @dmem_addr:  VPU's data memory address
 176  *
 177  * Mapping the VPU's DTCM (Data Tightly-Coupled Memory) /
 178  * DMEM (Data Extended Memory) memory address to
 179  * kernel virtual address.
 180  *
 181  * Return: Return ERR_PTR(-EINVAL) if mapping failed,
 182  * otherwise the mapped kernel virtual address
 183  **/
 184 void *vpu_mapping_dm_addr(struct platform_device *pdev,
 185                           u32 dtcm_dmem_addr);
 186 #endif /* _MTK_VPU_H */

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