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_