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

mxc-jpeg.h (4895B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * i.MX8QXP/i.MX8QM JPEG encoder/decoder v4l2 driver
      4 *
      5 * Copyright 2018-2019 NXP
      6 */
      7
      8#include <media/v4l2-ctrls.h>
      9#include <media/v4l2-device.h>
     10#include <media/v4l2-fh.h>
     11
     12#ifndef _MXC_JPEG_CORE_H
     13#define _MXC_JPEG_CORE_H
     14
     15#define MXC_JPEG_NAME			"mxc-jpeg"
     16#define MXC_JPEG_FMT_TYPE_ENC		0
     17#define MXC_JPEG_FMT_TYPE_RAW		1
     18#define MXC_JPEG_DEFAULT_WIDTH		1280
     19#define MXC_JPEG_DEFAULT_HEIGHT		720
     20#define MXC_JPEG_DEFAULT_PFMT		V4L2_PIX_FMT_BGR24
     21#define MXC_JPEG_MIN_WIDTH		64
     22#define MXC_JPEG_MIN_HEIGHT		64
     23#define MXC_JPEG_MAX_WIDTH		0x2000
     24#define MXC_JPEG_MAX_HEIGHT		0x2000
     25#define MXC_JPEG_MAX_CFG_STREAM		0x1000
     26#define MXC_JPEG_H_ALIGN		3
     27#define MXC_JPEG_W_ALIGN		3
     28#define MXC_JPEG_MAX_SIZEIMAGE		0xFFFFFC00
     29#define MXC_JPEG_MAX_PLANES		2
     30
     31enum mxc_jpeg_enc_state {
     32	MXC_JPEG_ENCODING	= 0, /* jpeg encode phase */
     33	MXC_JPEG_ENC_CONF	= 1, /* jpeg encoder config phase */
     34};
     35
     36enum mxc_jpeg_mode {
     37	MXC_JPEG_DECODE	= 0, /* jpeg decode mode */
     38	MXC_JPEG_ENCODE	= 1, /* jpeg encode mode */
     39};
     40
     41/**
     42 * struct mxc_jpeg_fmt - driver's internal color format data
     43 * @name:	format description
     44 * @fourcc:	fourcc code, 0 if not applicable
     45 * @subsampling: subsampling of jpeg components
     46 * @nc:		number of color components
     47 * @depth:	number of bits per pixel
     48 * @colplanes:	number of color planes (1 for packed formats)
     49 * @h_align:	horizontal alignment order (align to 2^h_align)
     50 * @v_align:	vertical alignment order (align to 2^v_align)
     51 * @flags:	flags describing format applicability
     52 * @precision:  jpeg sample precision
     53 */
     54struct mxc_jpeg_fmt {
     55	const char				*name;
     56	u32					fourcc;
     57	enum v4l2_jpeg_chroma_subsampling	subsampling;
     58	int					nc;
     59	int					depth;
     60	int					colplanes;
     61	int					h_align;
     62	int					v_align;
     63	u32					flags;
     64	u8					precision;
     65};
     66
     67struct mxc_jpeg_desc {
     68	u32 next_descpt_ptr;
     69	u32 buf_base0;
     70	u32 buf_base1;
     71	u32 line_pitch;
     72	u32 stm_bufbase;
     73	u32 stm_bufsize;
     74	u32 imgsize;
     75	u32 stm_ctrl;
     76} __packed;
     77
     78struct mxc_jpeg_q_data {
     79	const struct mxc_jpeg_fmt	*fmt;
     80	u32				sizeimage[MXC_JPEG_MAX_PLANES];
     81	u32				bytesperline[MXC_JPEG_MAX_PLANES];
     82	int				w;
     83	int				w_adjusted;
     84	int				h;
     85	int				h_adjusted;
     86	unsigned int			sequence;
     87};
     88
     89struct mxc_jpeg_ctx {
     90	struct mxc_jpeg_dev		*mxc_jpeg;
     91	struct mxc_jpeg_q_data		out_q;
     92	struct mxc_jpeg_q_data		cap_q;
     93	struct v4l2_fh			fh;
     94	enum mxc_jpeg_enc_state		enc_state;
     95	unsigned int			stopping;
     96	unsigned int			stopped;
     97	unsigned int			slot;
     98	unsigned int			source_change;
     99	bool				header_parsed;
    100};
    101
    102struct mxc_jpeg_slot_data {
    103	bool used;
    104	struct mxc_jpeg_desc *desc; // enc/dec descriptor
    105	struct mxc_jpeg_desc *cfg_desc; // configuration descriptor
    106	void *cfg_stream_vaddr; // configuration bitstream virtual address
    107	unsigned int cfg_stream_size;
    108	dma_addr_t desc_handle;
    109	dma_addr_t cfg_desc_handle; // configuration descriptor dma address
    110	dma_addr_t cfg_stream_handle; // configuration bitstream dma address
    111};
    112
    113struct mxc_jpeg_dev {
    114	spinlock_t			hw_lock; /* hardware access lock */
    115	unsigned int			mode;
    116	struct mutex			lock; /* v4l2 ioctls serialization */
    117	struct clk			*clk_ipg;
    118	struct clk			*clk_per;
    119	struct platform_device		*pdev;
    120	struct device			*dev;
    121	void __iomem			*base_reg;
    122	struct v4l2_device		v4l2_dev;
    123	struct v4l2_m2m_dev		*m2m_dev;
    124	struct video_device		*dec_vdev;
    125	struct mxc_jpeg_slot_data	slot_data[MXC_MAX_SLOTS];
    126	int				num_domains;
    127	struct device			**pd_dev;
    128	struct device_link		**pd_link;
    129};
    130
    131/**
    132 * struct mxc_jpeg_sof_comp - JPEG Start Of Frame component fields
    133 * @id:				component id
    134 * @v:				vertical sampling
    135 * @h:				horizontal sampling
    136 * @quantization_table_no:	id of quantization table
    137 */
    138struct mxc_jpeg_sof_comp {
    139	u8 id;
    140	u8 v :4;
    141	u8 h :4;
    142	u8 quantization_table_no;
    143} __packed;
    144
    145#define MXC_JPEG_MAX_COMPONENTS 4
    146/**
    147 * struct mxc_jpeg_sof - JPEG Start Of Frame marker fields
    148 * @length:		Start of Frame length
    149 * @precision:		precision (bits per pixel per color component)
    150 * @height:		image height
    151 * @width:		image width
    152 * @components_no:	number of color components
    153 * @comp:		component fields for each color component
    154 */
    155struct mxc_jpeg_sof {
    156	u16 length;
    157	u8 precision;
    158	u16 height, width;
    159	u8 components_no;
    160	struct mxc_jpeg_sof_comp comp[MXC_JPEG_MAX_COMPONENTS];
    161} __packed;
    162
    163/**
    164 * struct mxc_jpeg_sos_comp - JPEG Start Of Scan component fields
    165 * @id:			component id
    166 * @huffman_table_no:	id of the Huffman table
    167 */
    168struct mxc_jpeg_sos_comp {
    169	u8 id; /*component id*/
    170	u8 huffman_table_no;
    171} __packed;
    172
    173/**
    174 * struct mxc_jpeg_sos - JPEG Start Of Scan marker fields
    175 * @length:		Start of Frame length
    176 * @components_no:	number of color components
    177 * @comp:		SOS component fields for each color component
    178 * @ignorable_bytes:	ignorable bytes
    179 */
    180struct mxc_jpeg_sos {
    181	u16 length;
    182	u8 components_no;
    183	struct mxc_jpeg_sos_comp comp[MXC_JPEG_MAX_COMPONENTS];
    184	u8 ignorable_bytes[3];
    185} __packed;
    186
    187#endif