1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) STMicroelectronics SA 2015 4*4882a593Smuzhiyun * Authors: Yannick Fertre <yannick.fertre@st.com> 5*4882a593Smuzhiyun * Hugues Fruchet <hugues.fruchet@st.com> 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef HVA_H 9*4882a593Smuzhiyun #define HVA_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <media/v4l2-ctrls.h> 12*4882a593Smuzhiyun #include <media/v4l2-device.h> 13*4882a593Smuzhiyun #include <media/videobuf2-v4l2.h> 14*4882a593Smuzhiyun #include <media/v4l2-mem2mem.h> 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #define fh_to_ctx(f) (container_of(f, struct hva_ctx, fh)) 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define hva_to_dev(h) (h->dev) 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #define ctx_to_dev(c) (c->hva_dev->dev) 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define ctx_to_hdev(c) (c->hva_dev) 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define HVA_NAME "st-hva" 25*4882a593Smuzhiyun #define HVA_PREFIX "[---:----]" 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun extern const struct hva_enc nv12h264enc; 28*4882a593Smuzhiyun extern const struct hva_enc nv21h264enc; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /** 31*4882a593Smuzhiyun * struct hva_frameinfo - information about hva frame 32*4882a593Smuzhiyun * 33*4882a593Smuzhiyun * @pixelformat: fourcc code for uncompressed video format 34*4882a593Smuzhiyun * @width: width of frame 35*4882a593Smuzhiyun * @height: height of frame 36*4882a593Smuzhiyun * @aligned_width: width of frame (with encoder alignment constraint) 37*4882a593Smuzhiyun * @aligned_height: height of frame (with encoder alignment constraint) 38*4882a593Smuzhiyun * @size: maximum size in bytes required for data 39*4882a593Smuzhiyun */ 40*4882a593Smuzhiyun struct hva_frameinfo { 41*4882a593Smuzhiyun u32 pixelformat; 42*4882a593Smuzhiyun u32 width; 43*4882a593Smuzhiyun u32 height; 44*4882a593Smuzhiyun u32 aligned_width; 45*4882a593Smuzhiyun u32 aligned_height; 46*4882a593Smuzhiyun u32 size; 47*4882a593Smuzhiyun }; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /** 50*4882a593Smuzhiyun * struct hva_streaminfo - information about hva stream 51*4882a593Smuzhiyun * 52*4882a593Smuzhiyun * @streamformat: fourcc code of compressed video format (H.264...) 53*4882a593Smuzhiyun * @width: width of stream 54*4882a593Smuzhiyun * @height: height of stream 55*4882a593Smuzhiyun * @profile: profile string 56*4882a593Smuzhiyun * @level: level string 57*4882a593Smuzhiyun */ 58*4882a593Smuzhiyun struct hva_streaminfo { 59*4882a593Smuzhiyun u32 streamformat; 60*4882a593Smuzhiyun u32 width; 61*4882a593Smuzhiyun u32 height; 62*4882a593Smuzhiyun u8 profile[32]; 63*4882a593Smuzhiyun u8 level[32]; 64*4882a593Smuzhiyun }; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun /** 67*4882a593Smuzhiyun * struct hva_controls - hva controls set 68*4882a593Smuzhiyun * 69*4882a593Smuzhiyun * @time_per_frame: time per frame in seconds 70*4882a593Smuzhiyun * @bitrate_mode: bitrate mode (constant bitrate or variable bitrate) 71*4882a593Smuzhiyun * @gop_size: groupe of picture size 72*4882a593Smuzhiyun * @bitrate: bitrate (in bps) 73*4882a593Smuzhiyun * @aspect: video aspect 74*4882a593Smuzhiyun * @profile: H.264 profile 75*4882a593Smuzhiyun * @level: H.264 level 76*4882a593Smuzhiyun * @entropy_mode: H.264 entropy mode (CABAC or CVLC) 77*4882a593Smuzhiyun * @cpb_size: coded picture buffer size (in kB) 78*4882a593Smuzhiyun * @dct8x8: transform mode 8x8 enable 79*4882a593Smuzhiyun * @qpmin: minimum quantizer 80*4882a593Smuzhiyun * @qpmax: maximum quantizer 81*4882a593Smuzhiyun * @vui_sar: pixel aspect ratio enable 82*4882a593Smuzhiyun * @vui_sar_idc: pixel aspect ratio identifier 83*4882a593Smuzhiyun * @sei_fp: sei frame packing arrangement enable 84*4882a593Smuzhiyun * @sei_fp_type: sei frame packing arrangement type 85*4882a593Smuzhiyun */ 86*4882a593Smuzhiyun struct hva_controls { 87*4882a593Smuzhiyun struct v4l2_fract time_per_frame; 88*4882a593Smuzhiyun enum v4l2_mpeg_video_bitrate_mode bitrate_mode; 89*4882a593Smuzhiyun u32 gop_size; 90*4882a593Smuzhiyun u32 bitrate; 91*4882a593Smuzhiyun enum v4l2_mpeg_video_aspect aspect; 92*4882a593Smuzhiyun enum v4l2_mpeg_video_h264_profile profile; 93*4882a593Smuzhiyun enum v4l2_mpeg_video_h264_level level; 94*4882a593Smuzhiyun enum v4l2_mpeg_video_h264_entropy_mode entropy_mode; 95*4882a593Smuzhiyun u32 cpb_size; 96*4882a593Smuzhiyun bool dct8x8; 97*4882a593Smuzhiyun u32 qpmin; 98*4882a593Smuzhiyun u32 qpmax; 99*4882a593Smuzhiyun bool vui_sar; 100*4882a593Smuzhiyun enum v4l2_mpeg_video_h264_vui_sar_idc vui_sar_idc; 101*4882a593Smuzhiyun bool sei_fp; 102*4882a593Smuzhiyun enum v4l2_mpeg_video_h264_sei_fp_arrangement_type sei_fp_type; 103*4882a593Smuzhiyun }; 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun /** 106*4882a593Smuzhiyun * struct hva_frame - hva frame buffer (output) 107*4882a593Smuzhiyun * 108*4882a593Smuzhiyun * @vbuf: video buffer information for V4L2 109*4882a593Smuzhiyun * @list: V4L2 m2m list that the frame belongs to 110*4882a593Smuzhiyun * @info: frame information (width, height, format, alignment...) 111*4882a593Smuzhiyun * @paddr: physical address (for hardware) 112*4882a593Smuzhiyun * @vaddr: virtual address (kernel can read/write) 113*4882a593Smuzhiyun * @prepared: true if vaddr/paddr are resolved 114*4882a593Smuzhiyun */ 115*4882a593Smuzhiyun struct hva_frame { 116*4882a593Smuzhiyun struct vb2_v4l2_buffer vbuf; 117*4882a593Smuzhiyun struct list_head list; 118*4882a593Smuzhiyun struct hva_frameinfo info; 119*4882a593Smuzhiyun dma_addr_t paddr; 120*4882a593Smuzhiyun void *vaddr; 121*4882a593Smuzhiyun bool prepared; 122*4882a593Smuzhiyun }; 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun /* 125*4882a593Smuzhiyun * to_hva_frame() - cast struct vb2_v4l2_buffer * to struct hva_frame * 126*4882a593Smuzhiyun */ 127*4882a593Smuzhiyun #define to_hva_frame(vb) \ 128*4882a593Smuzhiyun container_of(vb, struct hva_frame, vbuf) 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun /** 131*4882a593Smuzhiyun * struct hva_stream - hva stream buffer (capture) 132*4882a593Smuzhiyun * 133*4882a593Smuzhiyun * @v4l2: video buffer information for V4L2 134*4882a593Smuzhiyun * @list: V4L2 m2m list that the frame belongs to 135*4882a593Smuzhiyun * @paddr: physical address (for hardware) 136*4882a593Smuzhiyun * @vaddr: virtual address (kernel can read/write) 137*4882a593Smuzhiyun * @prepared: true if vaddr/paddr are resolved 138*4882a593Smuzhiyun * @size: size of the buffer in bytes 139*4882a593Smuzhiyun * @bytesused: number of bytes occupied by data in the buffer 140*4882a593Smuzhiyun */ 141*4882a593Smuzhiyun struct hva_stream { 142*4882a593Smuzhiyun struct vb2_v4l2_buffer vbuf; 143*4882a593Smuzhiyun struct list_head list; 144*4882a593Smuzhiyun dma_addr_t paddr; 145*4882a593Smuzhiyun void *vaddr; 146*4882a593Smuzhiyun bool prepared; 147*4882a593Smuzhiyun unsigned int size; 148*4882a593Smuzhiyun unsigned int bytesused; 149*4882a593Smuzhiyun }; 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun /* 152*4882a593Smuzhiyun * to_hva_stream() - cast struct vb2_v4l2_buffer * to struct hva_stream * 153*4882a593Smuzhiyun */ 154*4882a593Smuzhiyun #define to_hva_stream(vb) \ 155*4882a593Smuzhiyun container_of(vb, struct hva_stream, vbuf) 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun #ifdef CONFIG_VIDEO_STI_HVA_DEBUGFS 158*4882a593Smuzhiyun /** 159*4882a593Smuzhiyun * struct hva_ctx_dbg - instance context debug info 160*4882a593Smuzhiyun * 161*4882a593Smuzhiyun * @debugfs_entry: debugfs entry 162*4882a593Smuzhiyun * @is_valid_period: true if the sequence is valid for performance 163*4882a593Smuzhiyun * @begin: start time of last HW task 164*4882a593Smuzhiyun * @total_duration: total HW processing durations in 0.1ms 165*4882a593Smuzhiyun * @cnt_duration: number of HW processings 166*4882a593Smuzhiyun * @min_duration: minimum HW processing duration in 0.1ms 167*4882a593Smuzhiyun * @max_duration: maximum HW processing duration in 0.1ms 168*4882a593Smuzhiyun * @avg_duration: average HW processing duration in 0.1ms 169*4882a593Smuzhiyun * @max_fps: maximum frames encoded per second (in 0.1Hz) 170*4882a593Smuzhiyun * @total_period: total encoding periods in 0.1ms 171*4882a593Smuzhiyun * @cnt_period: number of periods 172*4882a593Smuzhiyun * @min_period: minimum encoding period in 0.1ms 173*4882a593Smuzhiyun * @max_period: maximum encoding period in 0.1ms 174*4882a593Smuzhiyun * @avg_period: average encoding period in 0.1ms 175*4882a593Smuzhiyun * @total_stream_size: total number of encoded bytes 176*4882a593Smuzhiyun * @avg_fps: average frames encoded per second (in 0.1Hz) 177*4882a593Smuzhiyun * @window_duration: duration of the sampling window in 0.1ms 178*4882a593Smuzhiyun * @cnt_window: number of samples in the window 179*4882a593Smuzhiyun * @window_stream_size: number of encoded bytes upon the sampling window 180*4882a593Smuzhiyun * @last_bitrate: bitrate upon the last sampling window 181*4882a593Smuzhiyun * @min_bitrate: minimum bitrate in kbps 182*4882a593Smuzhiyun * @max_bitrate: maximum bitrate in kbps 183*4882a593Smuzhiyun * @avg_bitrate: average bitrate in kbps 184*4882a593Smuzhiyun */ 185*4882a593Smuzhiyun struct hva_ctx_dbg { 186*4882a593Smuzhiyun struct dentry *debugfs_entry; 187*4882a593Smuzhiyun bool is_valid_period; 188*4882a593Smuzhiyun ktime_t begin; 189*4882a593Smuzhiyun u32 total_duration; 190*4882a593Smuzhiyun u32 cnt_duration; 191*4882a593Smuzhiyun u32 min_duration; 192*4882a593Smuzhiyun u32 max_duration; 193*4882a593Smuzhiyun u32 avg_duration; 194*4882a593Smuzhiyun u32 max_fps; 195*4882a593Smuzhiyun u32 total_period; 196*4882a593Smuzhiyun u32 cnt_period; 197*4882a593Smuzhiyun u32 min_period; 198*4882a593Smuzhiyun u32 max_period; 199*4882a593Smuzhiyun u32 avg_period; 200*4882a593Smuzhiyun u32 total_stream_size; 201*4882a593Smuzhiyun u32 avg_fps; 202*4882a593Smuzhiyun u32 window_duration; 203*4882a593Smuzhiyun u32 cnt_window; 204*4882a593Smuzhiyun u32 window_stream_size; 205*4882a593Smuzhiyun u32 last_bitrate; 206*4882a593Smuzhiyun u32 min_bitrate; 207*4882a593Smuzhiyun u32 max_bitrate; 208*4882a593Smuzhiyun u32 avg_bitrate; 209*4882a593Smuzhiyun }; 210*4882a593Smuzhiyun #endif 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun struct hva_dev; 213*4882a593Smuzhiyun struct hva_enc; 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun /** 216*4882a593Smuzhiyun * struct hva_ctx - context of hva instance 217*4882a593Smuzhiyun * 218*4882a593Smuzhiyun * @hva_dev: the device that this instance is associated with 219*4882a593Smuzhiyun * @fh: V4L2 file handle 220*4882a593Smuzhiyun * @ctrl_handler: V4L2 controls handler 221*4882a593Smuzhiyun * @ctrls: hva controls set 222*4882a593Smuzhiyun * @id: instance identifier 223*4882a593Smuzhiyun * @aborting: true if current job aborted 224*4882a593Smuzhiyun * @name: instance name (debug purpose) 225*4882a593Smuzhiyun * @run_work: encode work 226*4882a593Smuzhiyun * @lock: mutex used to lock access of this context 227*4882a593Smuzhiyun * @flags: validity of streaminfo and frameinfo fields 228*4882a593Smuzhiyun * @frame_num: frame number 229*4882a593Smuzhiyun * @stream_num: stream number 230*4882a593Smuzhiyun * @max_stream_size: maximum size in bytes required for stream data 231*4882a593Smuzhiyun * @colorspace: colorspace identifier 232*4882a593Smuzhiyun * @xfer_func: transfer function identifier 233*4882a593Smuzhiyun * @ycbcr_enc: Y'CbCr encoding identifier 234*4882a593Smuzhiyun * @quantization: quantization identifier 235*4882a593Smuzhiyun * @streaminfo: stream properties 236*4882a593Smuzhiyun * @frameinfo: frame properties 237*4882a593Smuzhiyun * @enc: current encoder 238*4882a593Smuzhiyun * @priv: private codec data for this instance, allocated 239*4882a593Smuzhiyun * by encoder @open time 240*4882a593Smuzhiyun * @hw_err: true if hardware error detected 241*4882a593Smuzhiyun * @encoded_frames: number of encoded frames 242*4882a593Smuzhiyun * @sys_errors: number of system errors (memory, resource, pm...) 243*4882a593Smuzhiyun * @encode_errors: number of encoding errors (hw/driver errors) 244*4882a593Smuzhiyun * @frame_errors: number of frame errors (format, size, header...) 245*4882a593Smuzhiyun * @dbg: context debug info 246*4882a593Smuzhiyun */ 247*4882a593Smuzhiyun struct hva_ctx { 248*4882a593Smuzhiyun struct hva_dev *hva_dev; 249*4882a593Smuzhiyun struct v4l2_fh fh; 250*4882a593Smuzhiyun struct v4l2_ctrl_handler ctrl_handler; 251*4882a593Smuzhiyun struct hva_controls ctrls; 252*4882a593Smuzhiyun u8 id; 253*4882a593Smuzhiyun bool aborting; 254*4882a593Smuzhiyun char name[100]; 255*4882a593Smuzhiyun struct work_struct run_work; 256*4882a593Smuzhiyun /* mutex protecting this data structure */ 257*4882a593Smuzhiyun struct mutex lock; 258*4882a593Smuzhiyun u32 flags; 259*4882a593Smuzhiyun u32 frame_num; 260*4882a593Smuzhiyun u32 stream_num; 261*4882a593Smuzhiyun u32 max_stream_size; 262*4882a593Smuzhiyun enum v4l2_colorspace colorspace; 263*4882a593Smuzhiyun enum v4l2_xfer_func xfer_func; 264*4882a593Smuzhiyun enum v4l2_ycbcr_encoding ycbcr_enc; 265*4882a593Smuzhiyun enum v4l2_quantization quantization; 266*4882a593Smuzhiyun struct hva_streaminfo streaminfo; 267*4882a593Smuzhiyun struct hva_frameinfo frameinfo; 268*4882a593Smuzhiyun struct hva_enc *enc; 269*4882a593Smuzhiyun void *priv; 270*4882a593Smuzhiyun bool hw_err; 271*4882a593Smuzhiyun u32 encoded_frames; 272*4882a593Smuzhiyun u32 sys_errors; 273*4882a593Smuzhiyun u32 encode_errors; 274*4882a593Smuzhiyun u32 frame_errors; 275*4882a593Smuzhiyun #ifdef CONFIG_VIDEO_STI_HVA_DEBUGFS 276*4882a593Smuzhiyun struct hva_ctx_dbg dbg; 277*4882a593Smuzhiyun #endif 278*4882a593Smuzhiyun }; 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun #define HVA_FLAG_STREAMINFO 0x0001 281*4882a593Smuzhiyun #define HVA_FLAG_FRAMEINFO 0x0002 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun #ifdef CONFIG_VIDEO_STI_HVA_DEBUGFS 284*4882a593Smuzhiyun /** 285*4882a593Smuzhiyun * struct hva_dev_dbg - device debug info 286*4882a593Smuzhiyun * 287*4882a593Smuzhiyun * @debugfs_entry: debugfs entry 288*4882a593Smuzhiyun * @last_ctx: debug information about last running instance context 289*4882a593Smuzhiyun */ 290*4882a593Smuzhiyun struct hva_dev_dbg { 291*4882a593Smuzhiyun struct dentry *debugfs_entry; 292*4882a593Smuzhiyun struct hva_ctx last_ctx; 293*4882a593Smuzhiyun }; 294*4882a593Smuzhiyun #endif 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun #define HVA_MAX_INSTANCES 16 297*4882a593Smuzhiyun #define HVA_MAX_ENCODERS 10 298*4882a593Smuzhiyun #define HVA_MAX_FORMATS HVA_MAX_ENCODERS 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun /** 301*4882a593Smuzhiyun * struct hva_dev - abstraction for hva entity 302*4882a593Smuzhiyun * 303*4882a593Smuzhiyun * @v4l2_dev: V4L2 device 304*4882a593Smuzhiyun * @vdev: video device 305*4882a593Smuzhiyun * @pdev: platform device 306*4882a593Smuzhiyun * @dev: device 307*4882a593Smuzhiyun * @lock: mutex used for critical sections & V4L2 ops 308*4882a593Smuzhiyun * serialization 309*4882a593Smuzhiyun * @m2m_dev: memory-to-memory V4L2 device information 310*4882a593Smuzhiyun * @instances: opened instances 311*4882a593Smuzhiyun * @nb_of_instances: number of opened instances 312*4882a593Smuzhiyun * @instance_id: rolling counter identifying an instance (debug purpose) 313*4882a593Smuzhiyun * @regs: register io memory access 314*4882a593Smuzhiyun * @esram_addr: esram address 315*4882a593Smuzhiyun * @esram_size: esram size 316*4882a593Smuzhiyun * @clk: hva clock 317*4882a593Smuzhiyun * @irq_its: status interruption 318*4882a593Smuzhiyun * @irq_err: error interruption 319*4882a593Smuzhiyun * @work_queue: work queue to handle the encode jobs 320*4882a593Smuzhiyun * @protect_mutex: mutex used to lock access of hardware 321*4882a593Smuzhiyun * @interrupt: completion interrupt 322*4882a593Smuzhiyun * @ip_version: IP hardware version 323*4882a593Smuzhiyun * @encoders: registered encoders 324*4882a593Smuzhiyun * @nb_of_encoders: number of registered encoders 325*4882a593Smuzhiyun * @pixelformats: supported uncompressed video formats 326*4882a593Smuzhiyun * @nb_of_pixelformats: number of supported umcompressed video formats 327*4882a593Smuzhiyun * @streamformats: supported compressed video formats 328*4882a593Smuzhiyun * @nb_of_streamformats: number of supported compressed video formats 329*4882a593Smuzhiyun * @sfl_reg: status fifo level register value 330*4882a593Smuzhiyun * @sts_reg: status register value 331*4882a593Smuzhiyun * @lmi_err_reg: local memory interface error register value 332*4882a593Smuzhiyun * @emi_err_reg: external memory interface error register value 333*4882a593Smuzhiyun * @hec_mif_err_reg: HEC memory interface error register value 334*4882a593Smuzhiyun * @dbg: device debug info 335*4882a593Smuzhiyun */ 336*4882a593Smuzhiyun struct hva_dev { 337*4882a593Smuzhiyun struct v4l2_device v4l2_dev; 338*4882a593Smuzhiyun struct video_device *vdev; 339*4882a593Smuzhiyun struct platform_device *pdev; 340*4882a593Smuzhiyun struct device *dev; 341*4882a593Smuzhiyun /* mutex protecting vb2_queue structure */ 342*4882a593Smuzhiyun struct mutex lock; 343*4882a593Smuzhiyun struct v4l2_m2m_dev *m2m_dev; 344*4882a593Smuzhiyun struct hva_ctx *instances[HVA_MAX_INSTANCES]; 345*4882a593Smuzhiyun unsigned int nb_of_instances; 346*4882a593Smuzhiyun unsigned int instance_id; 347*4882a593Smuzhiyun void __iomem *regs; 348*4882a593Smuzhiyun u32 esram_addr; 349*4882a593Smuzhiyun u32 esram_size; 350*4882a593Smuzhiyun struct clk *clk; 351*4882a593Smuzhiyun int irq_its; 352*4882a593Smuzhiyun int irq_err; 353*4882a593Smuzhiyun struct workqueue_struct *work_queue; 354*4882a593Smuzhiyun /* mutex protecting hardware access */ 355*4882a593Smuzhiyun struct mutex protect_mutex; 356*4882a593Smuzhiyun struct completion interrupt; 357*4882a593Smuzhiyun unsigned long int ip_version; 358*4882a593Smuzhiyun const struct hva_enc *encoders[HVA_MAX_ENCODERS]; 359*4882a593Smuzhiyun u32 nb_of_encoders; 360*4882a593Smuzhiyun u32 pixelformats[HVA_MAX_FORMATS]; 361*4882a593Smuzhiyun u32 nb_of_pixelformats; 362*4882a593Smuzhiyun u32 streamformats[HVA_MAX_FORMATS]; 363*4882a593Smuzhiyun u32 nb_of_streamformats; 364*4882a593Smuzhiyun u32 sfl_reg; 365*4882a593Smuzhiyun u32 sts_reg; 366*4882a593Smuzhiyun u32 lmi_err_reg; 367*4882a593Smuzhiyun u32 emi_err_reg; 368*4882a593Smuzhiyun u32 hec_mif_err_reg; 369*4882a593Smuzhiyun #ifdef CONFIG_VIDEO_STI_HVA_DEBUGFS 370*4882a593Smuzhiyun struct hva_dev_dbg dbg; 371*4882a593Smuzhiyun #endif 372*4882a593Smuzhiyun }; 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun /** 375*4882a593Smuzhiyun * struct hva_enc - hva encoder 376*4882a593Smuzhiyun * 377*4882a593Smuzhiyun * @name: encoder name 378*4882a593Smuzhiyun * @streamformat: fourcc code for compressed video format (H.264...) 379*4882a593Smuzhiyun * @pixelformat: fourcc code for uncompressed video format 380*4882a593Smuzhiyun * @max_width: maximum width of frame for this encoder 381*4882a593Smuzhiyun * @max_height: maximum height of frame for this encoder 382*4882a593Smuzhiyun * @open: open encoder 383*4882a593Smuzhiyun * @close: close encoder 384*4882a593Smuzhiyun * @encode: encode a frame (struct hva_frame) in a stream 385*4882a593Smuzhiyun * (struct hva_stream) 386*4882a593Smuzhiyun */ 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun struct hva_enc { 389*4882a593Smuzhiyun const char *name; 390*4882a593Smuzhiyun u32 streamformat; 391*4882a593Smuzhiyun u32 pixelformat; 392*4882a593Smuzhiyun u32 max_width; 393*4882a593Smuzhiyun u32 max_height; 394*4882a593Smuzhiyun int (*open)(struct hva_ctx *ctx); 395*4882a593Smuzhiyun int (*close)(struct hva_ctx *ctx); 396*4882a593Smuzhiyun int (*encode)(struct hva_ctx *ctx, struct hva_frame *frame, 397*4882a593Smuzhiyun struct hva_stream *stream); 398*4882a593Smuzhiyun }; 399*4882a593Smuzhiyun 400*4882a593Smuzhiyun #ifdef CONFIG_VIDEO_STI_HVA_DEBUGFS 401*4882a593Smuzhiyun void hva_debugfs_create(struct hva_dev *hva); 402*4882a593Smuzhiyun void hva_debugfs_remove(struct hva_dev *hva); 403*4882a593Smuzhiyun void hva_dbg_ctx_create(struct hva_ctx *ctx); 404*4882a593Smuzhiyun void hva_dbg_ctx_remove(struct hva_ctx *ctx); 405*4882a593Smuzhiyun void hva_dbg_perf_begin(struct hva_ctx *ctx); 406*4882a593Smuzhiyun void hva_dbg_perf_end(struct hva_ctx *ctx, struct hva_stream *stream); 407*4882a593Smuzhiyun #endif 408*4882a593Smuzhiyun 409*4882a593Smuzhiyun #endif /* HVA_H */ 410