#ifndef __JPEG_ENC_H_
#define __JPEG_ENC_H_

#include <linux/dma-buf.h>
#define JPEGENC_DEVINFO_M8 "AML-M8"
#define JPEGENC_DEVINFO_G9 "AML-G9"
#define JPEGENC_DEVINFO_GXBB "AML-GXBB"
#define JPEGENC_DEVINFO_GXTVBB "AML-GXTVBB"
#define JPEGENC_DEVINFO_GXL "AML-GXL"

/* M8: 2550/10 = 255M GX: 2000/10 = 200M */
#define JPEGENC_HDEC_L0()   WRITE_HHI_REG(HHI_VDEC_CLK_CNTL, \
			 (2 << 25) | (1 << 16) | (1 << 24) | \
			 (0xffff & READ_HHI_REG(HHI_VDEC_CLK_CNTL)))
/* M8: 2550/8 = 319M GX: 2000/8 = 250M */
#define JPEGENC_HDEC_L1()   WRITE_HHI_REG(HHI_VDEC_CLK_CNTL, \
			 (0 << 25) | (1 << 16) | (1 << 24) | \
			 (0xffff & READ_HHI_REG(HHI_VDEC_CLK_CNTL)))
/* M8: 2550/7 = 364M GX: 2000/7 = 285M */
#define JPEGENC_HDEC_L2()   WRITE_HHI_REG(HHI_VDEC_CLK_CNTL, \
			 (3 << 25) | (0 << 16) | (1 << 24) | \
			 (0xffff & READ_HHI_REG(HHI_VDEC_CLK_CNTL)))
/* M8: 2550/6 = 425M GX: 2000/6 = 333M */
#define JPEGENC_HDEC_L3()   WRITE_HHI_REG(HHI_VDEC_CLK_CNTL, \
			 (1 << 25) | (1 << 16) | (1 << 24) | \
			 (0xffff & READ_HHI_REG(HHI_VDEC_CLK_CNTL)))
/* M8: 2550/5 = 510M GX: 2000/5 = 400M */
#define JPEGENC_HDEC_L4()   WRITE_HHI_REG(HHI_VDEC_CLK_CNTL, \
			 (2 << 25) | (0 << 16) | (1 << 24) | \
			 (0xffff & READ_HHI_REG(HHI_VDEC_CLK_CNTL)))
/* M8: 2550/4 = 638M GX: 2000/4 = 500M */
#define JPEGENC_HDEC_L5()   WRITE_HHI_REG(HHI_VDEC_CLK_CNTL, \
			 (0 << 25) | (0 << 16) | (1 << 24) | \
			 (0xffff & READ_HHI_REG(HHI_VDEC_CLK_CNTL)))
/* M8: 2550/3 = 850M GX: 2000/3 = 667M */
#define JPEGENC_HDEC_L6()   WRITE_HHI_REG(HHI_VDEC_CLK_CNTL, \
			 (1 << 25) | (0 << 16) | (1 << 24) | \
			 (0xffff & READ_HHI_REG(HHI_VDEC_CLK_CNTL)))

#define jpegenc_clock_enable(level) \
	do { \
		if (level == 0)  \
			JPEGENC_HDEC_L0(); \
		else if (level == 1)  \
			JPEGENC_HDEC_L1(); \
		else if (level == 2)  \
			JPEGENC_HDEC_L2(); \
		else if (level == 3)  \
			JPEGENC_HDEC_L3(); \
		else if (level == 4)  \
			JPEGENC_HDEC_L4(); \
		else if (level == 5)  \
			JPEGENC_HDEC_L5(); \
		else if (level == 6)  \
			JPEGENC_HDEC_L6(); \
		WRITE_VREG_BITS(DOS_GCLK_EN0, 0x7fff, 12, 15); \
	} while (0)

#define jpegenc_clock_disable() \
	do { \
		WRITE_VREG_BITS(DOS_GCLK_EN0, 0, 12, 15); \
		WRITE_HHI_REG_BITS(HHI_VDEC_CLK_CNTL,  0, 24, 1); \
	} while (0)

#define JPEGENC_IOC_MAGIC  'J'

#define JPEGENC_IOC_GET_DEVINFO	_IOW(JPEGENC_IOC_MAGIC, 0xf0, u32)

#define JPEGENC_IOC_GET_BUFFINFO	  	_IOW(JPEGENC_IOC_MAGIC, 0x00, u32)
#define JPEGENC_IOC_CONFIG_INIT		  	_IOW(JPEGENC_IOC_MAGIC, 0x01, u32)
#define JPEGENC_IOC_NEW_CMD			  	_IOW(JPEGENC_IOC_MAGIC, 0x02, u32)
#define JPEGENC_IOC_GET_STAGE		  	_IOW(JPEGENC_IOC_MAGIC, 0x03, u32)
#define JPEGENC_IOC_GET_OUTPUT_SIZE		_IOW(JPEGENC_IOC_MAGIC, 0x04, u32)
#define JPEGENC_IOC_SET_EXT_QUANT_TABLE	_IOW(JPEGENC_IOC_MAGIC, 0x05, u32)
#define JPEGENC_IOC_QUERY_DMA_SUPPORT	_IOW(JPEGENC_IOC_MAGIC, 0x06, u32)
#define JPEGENC_IOC_CONFIG_DMA_INPUT		_IOW(JPEGENC_IOC_MAGIC, 0x07, s32)
#define JPEGENC_IOC_RELEASE_DMA_INPUT		_IOW(JPEGENC_IOC_MAGIC, 0x08, u32)

#define DCTSIZE2	    64

#define JPEGENC_FLUSH_FLAG_INPUT			0x1
#define JPEGENC_FLUSH_FLAG_OUTPUT		0x2

/* Define Quantization table:   Max two tables */
#define QUANT_SEL_COMP0     0
#define QUANT_SEL_COMP1     1
#define QUANT_SEL_COMP2     1

/* Define Huffman table selection: Max two tables per DC/AC */
#define DC_HUFF_SEL_COMP0   0
#define DC_HUFF_SEL_COMP1   1
#define DC_HUFF_SEL_COMP2   1
#define AC_HUFF_SEL_COMP0   0
#define AC_HUFF_SEL_COMP1   1
#define AC_HUFF_SEL_COMP2   1

/* DCT interrupt select:0=Disable intr;
    1=Intr at end of each 8x8 block of DCT input;
    2=Intr at end of each MCU of DCT input;
    3=Intr at end of a scan of DCT input;
    4=Intr at end of each 8x8 block of DCT output;
    5=Intr at end of each MCU of DCT output;
    6=Intr at end of a scan of DCT output; */
#define JDCT_INTR_SEL       0

/* 0=Mark last coeff at the end of an 8x8 block,
    1=Mark last coeff at the end of an MCU
    2=Mark last coeff at the end of a scan */
#define JDCT_LASTCOEFF_SEL  1

enum jpegenc_mem_type_e {
	JPEGENC_LOCAL_BUFF = 0,
	JPEGENC_CANVAS_BUFF,
	JPEGENC_PHYSICAL_BUFF,
	JPEGENC_DMA_BUFF,
	JPEGENC_MAX_BUFF_TYPE
};

enum jpegenc_frame_fmt_e {
	JPEGENC_FMT_YUV422_SINGLE = 0,
	JPEGENC_FMT_YUV444_SINGLE,
	JPEGENC_FMT_NV21,
	JPEGENC_FMT_NV12,
	JPEGENC_FMT_YUV420,
	JPEGENC_FMT_YUV444_PLANE,
	JPEGENC_FMT_RGB888,
	JPEGENC_FMT_RGB888_PLANE,
	JPEGENC_FMT_RGB565,
	JPEGENC_FMT_RGBA8888,
	JPEGENC_FMT_YUV422_12BIT,
	JPEGENC_FMT_YUV444_10BIT,
	JPEGENC_FMT_YUV422_10BIT,
	JPEGENC_MAX_FRAME_FMT
};

struct Jpegenc_Buff_s {
	u32 buf_start;
	u32 buf_size;
};

struct Jpegenc_BuffInfo_s {
	u32 lev_id;
	u32 max_width;
	u32 max_height;
	u32 min_buffsize;
	struct Jpegenc_Buff_s input;
	struct Jpegenc_Buff_s assit;
	struct Jpegenc_Buff_s bitstream;
};

struct jpegenc_request_s {
	u32 src;
	u32 encoder_width;
	u32 encoder_height;
	u32 framesize;
	u32 jpeg_quality;
	u32 QuantTable_id;
	u32 flush_flag;
	u32 block_mode;
	enum jpegenc_mem_type_e type;
	enum jpegenc_frame_fmt_e input_fmt;
	enum jpegenc_frame_fmt_e output_fmt;

	u32 y_off;
	u32 u_off;
	u32 v_off;

	u32 y_stride;
	u32 u_stride;
	u32 v_stride;

	u32 h_stride;
};

struct jpegenc_meminfo_s {
	u32 buf_start;
	u32 buf_size;
	u8 cur_buf_lev;

#ifdef CONFIG_CMA
	ulong cma_pool_size;
#endif

	struct Jpegenc_Buff_s reserve_mem;
	struct Jpegenc_BuffInfo_s *bufspec;
};

struct jpegenc_wq_s {
	u32 hw_status;
	u32 headbytes;
	u32 output_size;

	u32 buf_start;
	u32 buf_size;

	u32 InputBuffStart;
	u32 InputBuffEnd;

	u32 AssitStart;
	u32 AssitEnd;

	u32 BitstreamStart;
	u32 BitstreamEnd;
	void __iomem *AssitstreamStartVirtAddr;

	u32 max_width;
	u32 max_height;

	struct jpegenc_request_s cmd;
	atomic_t ready;
	wait_queue_head_t complete;
#ifdef CONFIG_CMA
	struct page *venc_pages;
#endif
	struct enc_dma_cfg *dma_input;
};

struct jpegenc_manager_s {
	u32 encode_hw_status;
	s32 irq_num;

	bool irq_requested;
	bool process_irq;
	bool inited;
	bool use_reserve;
	bool use_cma;

	u8 opened;

	spinlock_t sem_lock;
	struct platform_device *this_pdev;
	struct jpegenc_meminfo_s mem;
	struct jpegenc_wq_s wq;
	struct tasklet_struct tasklet;
};

struct enc_dma_cfg {
	int fd;
	size_t size;
	void *dev;
	void *vaddr;
	void *paddr;
	struct dma_buf *dbuf;
	struct dma_buf_attachment *attach;
	struct sg_table *sg;
	enum dma_data_direction dir;
};

/********************************************
 *  AV Scratch Register Re-Define
********************************************/
#define JPEGENC_ENCODER_STATUS		HCODEC_HENC_SCRATCH_0
#define JPEGENC_BITSTREAM_OFFSET	HCODEC_HENC_SCRATCH_1

/*********************************************
 * ENCODER_STATUS define
********************************************/
#define JPEGENC_ENCODER_IDLE		0
#define JPEGENC_ENCODER_START		1
/* #define JPEGENC_ENCODER_SOS_HEADER          2 */
#define JPEGENC_ENCODER_MCU		3
#define JPEGENC_ENCODER_DONE		4

extern bool jpegenc_on(void);
#define JPEGENC_IOC_NEW_CMD2			  	_IOW(JPEGENC_IOC_MAGIC, 0x09, struct jpegenc_request_s)
#endif
