incremental
diff --git a/include/video.h b/include/video.h
new file mode 100644
index 0000000..7662c9c
--- /dev/null
+++ b/include/video.h
@@ -0,0 +1,378 @@
+/*
+* The definition and structure for AST 2500 Video Capture Driver
+* Portions Copyright (C) 2015 Insyde Software Corp.
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms and conditions of the GNU General Public License,
+* version 2, as published by the Free Software Foundation.
+*
+* This program is distributed in the hope it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*/
+
+#ifndef _VIDEO_H_
+#define _VIDEO_H_
+
+#define DEF_Y_TBL 4
+#define DEF_UV_TBL (7 | 0x10)
+
+#define VIDEO_IOC_MAGIC 'i'
+#define VIDIOCMCAPTURE _IOW(VIDEO_IOC_MAGIC, 1, struct video_mmap*)
+#define VIDIOCGFBUF _IOR(VIDEO_IOC_MAGIC, 2, struct video_buffer*)
+#define VIDIOCCAPTURE _IOW(VIDEO_IOC_MAGIC, 3, unsigned long )
+#define VIDIOCGCAPTURE _IOR(VIDEO_IOC_MAGIC, 4, subcapture_info*)
+#define VIDIOCSCAPTURE _IOW(VIDEO_IOC_MAGIC, 5, subcapture_info*)
+#define VIDIOCGSEQ _IOR(VIDEO_IOC_MAGIC, 6, vseq_info*)
+#define VIDIOCSSEQ _IOW(VIDEO_IOC_MAGIC, 7, vseq_info*)
+#define VIDIOCGVIN _IOR(VIDEO_IOC_MAGIC, 8, vin_info*)
+#define VIDIOCSVIN _IOW(VIDEO_IOC_MAGIC, 9, vin_info*)
+#define VIDIOCGPROC _IOR(VIDEO_IOC_MAGIC, 10, vproc_info*)
+#define VIDIOCSPROC _IOW(VIDEO_IOC_MAGIC, 11, vproc_info*)
+#define VIDIOCGCOMP _IOR(VIDEO_IOC_MAGIC, 12, vcomp_info*)
+#define VIDIOCSCOMP _IOW(VIDEO_IOC_MAGIC, 13, vcomp_info*)
+#define VIDIOCDBG _IOR(VIDEO_IOC_MAGIC, 14, unsigned int*)
+#define VIDIOCIMGREFRESH _IOW(VIDEO_IOC_MAGIC, 15, unsigned int*)
+
+#define VIDEO_IOC_MAXNR 15
+
+#define DUAL_COMP_BUFFER
+#define V_MASK
+
+#define AST2500_DEVICEID 0x25032402
+#define AST2400_DEVICEID 0x00002402
+
+// FLAG_FRAME_SIZE = (x/8) * (y/8) * 4
+// 144K:(1920/8)*(1200/8)*4 (current set 1M)
+#define FLAG_FRAME_SIZE 0x100000 // 1*1024*1024
+// PROC_FRAME_SIZE = X * Y * 4
+// 9M:1920*1200*4, 8M:1600*1200*4, 5M:1280*1024*4, 3M:1024*768*4
+#define PROC_FRAME_SIZE 0x900000 // 9*1024*1024
+// According to VREG(VR_STREAM_BUF_SZ) Video Stream Buffer Size Register
+// bit[2:0] = 7 (128KB), bit[4:3] = 3 (32 packets), So max compression data
+// will be 128KB * 32 = 4 MB,
+// 4M: (128*1024)*32
+#define COMP_FRAME_SIZE 0x400000 // 4*1024*1024
+// Total Video Mem Buffer Size
+// 2 PROC + 2 COMP + 1 FLAG for Capture Eng, 1 PROC + 1 COMP + 1 FLAG for Jpeg Capture Eng
+#define VIDEO_MEM_BUF_SIZE 0x2900000
+// Define Video Memory Start Address According to Memory & Kernel Size
+// Total:128M, 80M for Kernel
+#define SDRAM_MEM_OFFSET_ADDR 0x80000000
+
+#define SYS_MEM_SZ_128M 0
+#define SYS_MEM_SZ_256M 1
+#define SYS_MEM_SZ_512M 2
+#define SYS_MEM_SZ_1024M 3
+
+#define V_MEM_SZ_8M 0
+#define V_MEM_SZ_16M 1
+#define V_MEM_SZ_32M 2
+#define V_MEM_SZ_64M 3
+
+#define MODE_DETECT 0
+#define MODE_CHANGE 1
+#define MAX_NO_SYNC_CNT 100
+#define V_BUSY_TIME_OUT 6 //time tick
+
+// Register Offset
+#define SDRAM_PHY_BASE 0x1E6E0000 //1E6E:0000-1E6E:1FFF
+#define SCU_PHY_BASE 0x1E6E2000 //1E6E:2000-1E6E:2FFF
+#define VIDEO_PHY_BASE 0x1E700000 //1E70:0000-1E7F:FFFF
+
+// IRQ NUMBER
+#define VIDEO_IRQ 7 // for video
+#define CURSOR_IRQ 21 // for quick cursor
+
+// Register Definition
+#define VREG(x) (*(volatile unsigned int *)(IO_ADDRESS(x + VIDEO_PHY_BASE)))
+#define SDRAMREG(x) (*(volatile unsigned int *)(IO_ADDRESS(x + SDRAM_PHY_BASE)))
+#define SCUREG(x) (*(volatile unsigned int *)(IO_ADDRESS(x + SCU_PHY_BASE)))
+
+// Register Protection Key
+#define SCU_UNLOCK_KEY 0x1688A8A8
+#define MCR_UNLOCK_KEY 0xFC600309
+#define VR_UNLOCK_KEY 0x1A038AA8
+
+// SDRAM Memory Controller Register Offset
+#define MCR_PROTECTION_KEY 0x000
+#define MCR_CONFIGURATION 0x004
+#define BACKWARD_SCU_MPLL 0x120
+
+// System Control Unit Register Offset
+#define SCU_PROTECTION_KEY 0x00
+#define SCU_SYSTEM_RESET_CTL 0x04
+#define SCU_CLOCK_SELECTION 0x08
+#define SCU_CLK_STOP_CTL 0x0C
+#define SCU_INTERRUPT_CTL 0x18
+#define SCU_MPLL_PARAMETER 0x20
+#define SCU_MISC1_CTL 0x2C
+#define SCU_SOC_SCRATCH1 0x40
+#define SCU_VGA_SCRATCH1 0x50
+#define SCU_VGA_SCRATCH2 0x54
+#define SCU_HW_STRAPPING 0x70
+#define SCU_SILICON_REV_ID 0x7C
+#define SCU_DEVICE_ID 0x1A4
+
+// Video Register Offset
+#define VR_PROTECT_KEY 0x000
+#define VIDEO_SEQ_CTL 0x004
+#define VIDEO_PASS1_CTL 0x008
+#define TIMING_GEN_SETTING1 0x00C // if VIDEO_CTL1[5] = 0
+#define TIMING_GEN_SETTING2 0x010 // if VIDEO_CTL1[5] = 0
+#define SCALING_FACTOR 0x014
+#define SCALING_FILTER_PARAMETER0 0x018
+#define SCALING_FILTER_PARAMETER1 0x01C
+#define SCALING_FILTER_PARAMETER2 0x020
+#define SCALING_FILTER_PARAMETER3 0x024
+#define BCD_CTL 0x02C
+#define CAPTURING_WINDOW_SETTING 0x030
+#define COMP_WINDOW_SETTING 0x034
+#define COMP_STREAM_BUF_PROC_OFFSET 0x038
+#define COMP_STREAM_BUF_READ_OFFSET 0x03C
+#define CRC_BUF_BASE_ADDR 0x040
+#define VIDEO_SOURCE_BUF1_BASE_ADDR 0x044
+#define SOURCE_BUF_SCANLINE_OFFSET 0x048
+#define VIDEO_SOURCE_BUF2_BASE_ADDR 0x04C
+#define BCD_FLAG_BUF_BASE_ADDR 0x050
+#define COMP_STREAM_BUF_BASE_ADDR 0x054
+#define VIDEO_STREAM_BUF_SIZE 0x058
+#define COMP_STREAM_BUF_WRITE_OFFSET 0x05C
+#define VIDEO_COMP_CTL 0x060
+#define JPEG_BIT_CTRL 0x064
+#define QUANTIZATION_VALUE 0x068
+#define COPY_BUF_BASE_ADDR 0x06C
+#define COMP_STREAM_SIZE 0x070
+#define COMP_BLOCK_NUM 0x074
+#define COMP_STREAM_BUF_END_OFFSET 0x078
+#define COMP_FRAME_COUNTER 0x07C
+#define USER_HDR_PARAM 0x080
+#define SOURCE_L_R_EDGE_DETECT 0x090
+#define SOURCE_T_B_EDGE_DETECT 0x094
+#define MODE_DETECT_STATUS 0x098
+
+/* Video Management Engine, i.e. 2nd Set Video Engine */
+#define VM_SEQ_CTRL 0x204
+#define VM_PASS_CTRL 0x208
+#define VM_SCALING_FACTOR 0x214
+#define VM_CAP_WINDOW_SETTING 0x230
+#define VM_COMP_WINDOW_SETTING 0x234
+#define VM_COMP_BUF_PROC_OFFSET 0x238
+#define VM_COMP_BUF_READ_OFFSET 0x23C
+#define VM_JPEG_HEADER_BUFF 0x240
+#define VM_SOURCE_BUFF0 0x244
+#define VM_SRC_BUF_SCANLINE_OFFSET 0x248
+#define VM_COMPRESS_BUFF 0x254
+#define VM_STREAM_SIZE 0x258
+#define VM_COMPRESS_CTRL 0x260
+#define VM_JPEG_BIT_CTRL 0x264
+#define VM_QUANTIZATION_VALUE 0x268
+#define VM_COPY_BUF_BASE_ADDR 0x26C
+#define VM_COMP_STREAM_SIZE 0x070
+#define VM_COMP_BLOCK_NUM 0x074
+#define VM_COMP_STREAM_BUF_END_OFFSET 0x278
+#define VM_USER_HDR_PARAM 0x280
+
+#define VIDEO_PASS3_CTRL 0x300
+#define INTERRUPT_CTL 0x304
+#define INTERRUPT_STATUS 0x308
+#define MODE_DETECT_PARAMETER 0x30C
+#define MEM_RESTRICT_START_ADDR 0x310
+#define MEM_RESTRICT_END_ADDR 0x314
+#define PRI_CRC_PARAMETER 0x320
+#define SEC_CRC_PARAMETER 0x324
+#define DATA_TRUNCATION 0x328
+#define VGA_SCRATCH_REMAP1 0x340
+#define VGA_SCRATCH_REMAP2 0x344
+#define VGA_SCRATCH_REMAP3 0x348
+#define VGA_SCRATCH_REMAP4 0x34C
+#define VGA_SCRATCH_REMAP5 0x350
+#define VGA_SCRATCH_REMAP6 0x354
+#define VGA_SCRATCH_REMAP7 0x358
+#define VGA_SCRATCH_REMAP8 0x35C
+#define RC4KEYS_REGISTER 0x400 //0x400~0x4FC RC4 Encryption Key Register #0~#63
+
+//
+// Cursor struct is used in User Mode
+//
+typedef struct _cursor_attribution_tag {
+ unsigned int posX;
+ unsigned int posY;
+ unsigned int cur_width;
+ unsigned int cur_height;
+ unsigned int cur_type; //0:mono 1:color 2:disappear cursor
+ unsigned int cur_change_flag;
+} AST_CUR_ATTRIBUTION_TAG;
+
+//
+// For storing Cursor Information
+//
+typedef struct _cursor_tag {
+ AST_CUR_ATTRIBUTION_TAG attr;
+ //unsigned char icon[MAX_CUR_OFFSETX*MAX_CUR_OFFSETY*2];
+ unsigned char *icon; //[64*64*2];
+} AST_CURSOR_TAG;
+
+//
+// For select image format, i.e. 422 JPG420, 444 JPG444, lumin/chrom table, 0 ~ 11, low to high
+//
+typedef struct _video_features {
+ short jpg_fmt; //422:JPG420, 444:JPG444
+ short lumin_tbl;
+ short chrom_tbl;
+ short tolerance_noise;
+ int w;
+ int h;
+ unsigned char *buf;
+} FEATURES_TAG;
+
+//
+// For configure video engine control registers
+//
+typedef struct _image_info {
+ short do_image_refresh; // Action 0:motion 1:fullframe 2:quick cursor
+ char qc_valid; // quick cursor enable/disable
+ unsigned int len;
+ int crypttype;
+ char cryptkey[16];
+ union {
+ FEATURES_TAG features;
+ AST_CURSOR_TAG cursor_info;
+ } parameter;
+} IMAGE_INFO;
+
+typedef struct _video_set_chk {
+ short get_qc_info; // Quick Cursor Info
+ short do_image_refresh;
+ FEATURES_TAG features;
+} video_set_chk;
+
+struct video_buffer {
+ void *base;
+ int height, width;
+ int depth;
+ int bytesperline;
+};
+
+//
+// Data Structure for Video Buffer Layout
+// kept information about video buffer layout, used in memory initialization.
+//
+typedef struct _buf_layout {
+ int c_proc;
+ int c_comp;
+ unsigned int in; // video in buffer
+ unsigned int proc [2]; // old and current proc buffer
+ unsigned int comp [2]; // compressed data buffer
+ unsigned int flag; // flag buffer
+ unsigned int jpgproc; // old and current proc buffer for jpeg
+ unsigned int jpgcomp; // compressed data buffer for jpeg
+ unsigned int jpgflag; // flag buffer for jpeg
+} buf_layout;
+
+//
+// subcapture_info:
+// linestep - byte per line after scaling, but 32 byte align
+// step - scaling step, decrease 8 pixels a step after scaling.
+// scaled_h - height after scaling.
+// scaled_w - width after scaling.
+// hor_factor, ver_factor - horizontal and vertical scaling factor
+// init - initialized = 0, not initialized = 1, set by mode_detect
+//
+typedef struct _subcature_info {
+ int linestep;
+ short x, y, width, height, scaled_h, scaled_w;
+ unsigned short hor_factor, ver_factor;
+ short step, init;
+} subcapture_info;
+
+//
+// video_hw_info:
+// cap_seq - capture orders, CAP_PASSX and CAP_INIT_FRAME
+// cap_int - interrupt to enable
+// cur_idx - current idx of resolution table content.
+//
+// mode_change must be
+// set by interrupt handler, and clear
+// when capture start.
+//
+
+//FK Comment :
+//interrupt handler for mode_chage
+//capture start, mode_chage, clear
+//cur_idx resolution state, Ex: 800x600 80Hz, ...
+//cap_int interrupt enable
+//cap_seq captor orders i.e. CAP_PASS1, CAP_PASS2..., or CAP_INIT_FRAME
+#define MCAP_FRAME 2
+typedef struct _mcap_info {
+ int offset;
+ int size;
+} mcap_info;
+
+typedef struct _video_hw_info {
+ int cap_seq;
+ mcap_info mcap [MCAP_FRAME]; // record each frame size of mcapture
+ //volatile short width, height, fix_x, fix_y, cur_idx;
+ short width, height, fix_x, fix_y, cur_idx;
+ short max_h, max_w, min_h, min_w;
+ short cap_int;
+
+ char mode_changed; //1130 modify
+ //volatile char mode_changed; //1130 modify
+ char cap_done, capturing, disconnect; //, mode_changed; //, cur_idx;
+ char can_capture; // prevent hardware error.
+ subcapture_info subcap;
+// VIDEO_ENGINE_INFO ve_info;
+} video_hw_info;
+
+struct video_mmap {
+ unsigned int frame; // Frame (0 - n) for double buffer
+ int height, width;
+ unsigned int format; // should be VIDEO_PALETTE_*
+};
+
+// Internal_Mode Table for resolution checking
+typedef struct {
+ unsigned short HorizontalActive;
+ unsigned short VerticalActive;
+ unsigned short RefreshRateIndex;
+ unsigned int PixelClock;
+} INTERNAL_MODE;
+
+INTERNAL_MODE Internal_Mode [] = {
+ // 1024x768
+ { 1024, 768, 0, 65 },
+ { 1024, 768, 1, 65 },
+ { 1024, 768, 2, 75 },
+ { 1024, 768, 3, 79 },
+ { 1024, 768, 4, 95 },
+
+ // 1280x1024
+ { 1280, 1024, 0, 108 },
+ { 1280, 1024, 1, 108 },
+ { 1280, 1024, 2, 135 },
+ { 1280, 1024, 3, 158 },
+
+ // 1600x1200
+ { 1600, 1200, 0, 162 },
+ { 1600, 1200, 1, 162 },
+ { 1600, 1200, 2, 176 },
+ { 1600, 1200, 3, 189 },
+ { 1600, 1200, 4, 203 },
+ { 1600, 1200, 5, 230 },
+
+ // 1920x1200 reduce blank
+ { 1920, 1200, 0, 157 },
+ { 1920, 1200, 1, 157 },
+};
+
+typedef enum vga_color_mode {
+ VGA_NO_SIGNAL = 0,
+ EGA_MODE,
+ VGA_MODE,
+ VGA_15BPP_MODE,
+ VGA_16BPP_MODE,
+ VGA_32BPP_MODE,
+} color_mode;
+#endif //_VIDEO_H_