亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tw2834.c

?? tw2834 linux下的2834驅動程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* extdrv/peripheral/vad/tw2834.c
 *
 * Copyright (c) 2006 Hisilicon Co., Ltd.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that 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.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program;
 *
 * History:
 *      10-April-2006 create this file
 *      2006-04-29  add record path half d1 mod
 *      2006-05-13  set the playpath default output mod to full
 *      2006-05-24  add record mod 2cif
 *      2006-06-15  support mod changing between every record mod
 *      2006-08-12  change the filters when record mod change
 */

#include <linux/config.h>
#include <linux/kernel.h>

#include <linux/version.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/fcntl.h>
#include <linux/mm.h>
#include <linux/miscdevice.h>
#include <linux/proc_fs.h>

#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/smp_lock.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/init.h>
#include <asm/uaccess.h>
#include <asm/hardware.h>
#include <asm/io.h>
#include <asm/system.h>
#include <linux/interrupt.h>
#include <linux/ioport.h>

#include <linux/string.h>
#include <linux/list.h>
#include <asm/semaphore.h>
#include <asm/delay.h>
#include "tw2834.h"
#include "tw2834_def.h"

/*use the tw2834 serial interface*/
#define _USE_SERIAL_INTERFACE

/*#define _USE_PARALLEL_INTERFACE*/

/*
 * insmod parameter:
 *   mchannel = 0 , videosize = 0, 1 cif
 *   mchannel = 0 , videosize = 1, 1 d1
 *   mchannel = 1 , videosize = 0, 4 cif
 *   mchannel = 1 , videosize = 1, 2 half d1
 *   mchannel = 1 , videosize = 2, 4 d1
 *   mchannel = 1 , videosize = 3, 4 half cif(normal quad)
 *   mchannel = 1 , videosize = 4, 2 cif
 *   norm_mode = 0, PAL  mode
 *   norm_mode = 1, NTSC mode
*/

static int mchannel  = 0;
static int videosize = 0;
static int norm_mode =  VIDEO_NORM_PAL;

#ifdef  _USE_SERIAL_INTERFACE
#include "hi_i2c.h"

/* tw2834 i2c slaver address micro-definition. */
#define TW2834_I2C_ADDR 0x44

/*
 * initialize gpio control routine
 * do nothing
 */
static void init_gpio_control(void)
{
    return;
}

/*
 * release gpio control routine
 * do nothing
 */
static void release_gpio_control(void)
{
    return;
}

/*
 * tw2834 write byte routine via I2C.
 * @param addr: address include page number and register address
 * @param data: the data write to the register
 * @return value:0--success; -1--write over time.
 */
static int  do_2834_write_byte(int addr, unsigned char data)
{
    return hi_i2c_writespecial(TW2834_I2C_ADDR,((0x300&addr)>>8),(addr&0xff),data&0xff);
}

/*
 * tw2834 read byte routine via I2C.
 * @param addr: address include page number and register address
 * @return value:the content of the register.
 */
static unsigned char  do_2834_read_byte(int addr)
{
    return hi_i2c_readspecial(TW2834_I2C_ADDR,((addr&0x300)>>8),(addr&0xff));
}

/*
 * tw2834 write register routine .
 * @param page: page number
 * @param addr: register address
 * @param value: the data write to the register
 * @return value:nothing.
 */
static void tw2834_write_byte(int page, int addr, int value)
{
    if(do_2834_write_byte(((page<<8)|addr), value))
    {
        printk("\tTW2834_ERROR: write failed....\n");
        return;
    }
}

/*
 * tw2834 read register routine .
 * @param page: page number
 * @param addr: register address
 * @return value:the data read from the register.
 */
static unsigned char tw2834_read_byte(int page, int addr)
{
    unsigned char data;

    data = do_2834_read_byte((page<<8)|addr);

    return data;
}

/*
 * tw2834 write a group of register routine .
 * @param page: page number
 * @param addr: start register address
 * @param tbl_ptr: the first data pointer
 * @param tbl_cnt: the number of data
 * @return value:nothing.
 */
static void tw2834_write_table(int page,int addr,unsigned char *tbl_ptr,int tbl_cnt)
{
    int i;
    unsigned int value;
    int  temp;

    for ( i=0;i<tbl_cnt;i++)
    {
        value = *tbl_ptr;
        temp = addr+i;
        if(do_2834_write_byte(((page<<8)|temp), value))
        {
            printk("\tTW2834_ERROR: write failed....\n");
            return;
        }
        tbl_ptr++;
    }
}

#else  /* _USE_PARALLEL_INTERFACE */
    /*parallel interface is not available now.*/
#endif

/************************** video input control *******************************/
/*
 * Scaling Function of horizontal for video input of display path and record path.
 * @param path: TW2834_PATH_X display path; TW2834_PATH_Y record path
 * @param ch: channel number
 * @param ratio_x: scaleing ratio
 * @return value: null.
 */
static void tw2834_setvin_scale_ratiox(unsigned char path,unsigned char ch,unsigned short ratio_x)
{
    if(CHKBIT_SET(path, TW2834_PATH_X))
    {
        tw2834_write_byte(PAGE0, (0x40 * ch) + 0x1c, (ratio_x & 0xff00) >> 8);
        tw2834_write_byte(PAGE0, (0x40 * ch) + 0x1d, (ratio_x & 0xff));

    }
    if(CHKBIT_SET(path, TW2834_PATH_Y))
    {
        tw2834_write_byte(PAGE0, (0x40 * ch) + 0x1e, (ratio_x & 0xff00) >> 8);
        tw2834_write_byte(PAGE0, (0x40 * ch) + 0x1f, (ratio_x & 0xff));
    }
}

/*
 * Scaling Function of vertical for video input of display path and record path.
 * @param path: TW2834_PATH_X display path; TW2834_PATH_Y record path
 * @param ch: channel number
 * @param ratio_y: scaleing ratio
 * @return value: null.
 */
static void tw2834_setvin_scale_ratioy(unsigned char path,unsigned char ch,unsigned short ratio_y)
{
    if(CHKBIT_SET(path, TW2834_PATH_X))
    {
        tw2834_write_byte(PAGE0, (0x40 * ch) + 0x18, (ratio_y & 0xff00) >> 8);
        tw2834_write_byte(PAGE0, (0x40 * ch) + 0x19, (ratio_y & 0xff));

    }
    if(CHKBIT_SET(path, TW2834_PATH_Y))
    {
        tw2834_write_byte(PAGE0, (0x40 * ch) + 0x1a, (ratio_y & 0xff00) >> 8);
        tw2834_write_byte(PAGE0, (0x40 * ch) + 0x1b, (ratio_y & 0xff));
    }
}

/*
 * Scaling Function of vertical and horizontal for video input of display path and record path.
 * @param path: TW2834_PATH_X display path; TW2834_PATH_Y record path
 * @param ch: channel number
 * @param ratio_y: scaleing ratio of vertical
 * @param ratio_x: scaleing ratio of horizontal
 * @return value: null.
 */
static void tw2834_setvin_scale_ratio(unsigned char path,unsigned char ch,
                unsigned short ratio_x,unsigned short ratio_y)
{
    if (ch > 3)
    {
        printk("\tTW2834_ERROR: Channel number input error\n");
        return;
    }

    tw2834_setvin_scale_ratiox(path, ch, ratio_x);
    tw2834_setvin_scale_ratioy(path, ch, ratio_y);

    if ((0xffff == ratio_x) && (0xffff == ratio_y))
    {
        if (VIDEO_NORM_PAL == norm_mode)
        {
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x14, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x15, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x16, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x17, 0x00);
            if(CHKBIT_SET(path, TW2834_PATH_X))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x20, 0x0f);
            }
            if(CHKBIT_SET(path, TW2834_PATH_Y))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x21, 0x0f);
            }
        }
        else
        {
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x14, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x15, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x16, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x17, 0x00);
            if(CHKBIT_SET(path, TW2834_PATH_X))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x20, 0x07);
            }
            if(CHKBIT_SET(path, TW2834_PATH_Y))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x21, 0x07);
            }
        }
    }
    if ((0x7fff == ratio_x) && (0xffff == ratio_y))
    {
        if (VIDEO_NORM_PAL == norm_mode)
        {
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x14, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x15, 0x05);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x16, 0x10);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x17, 0x10);
            if(CHKBIT_SET(path, TW2834_PATH_X))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x20, 0x0f);
            }
            if(CHKBIT_SET(path, TW2834_PATH_Y))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x21, 0x0f);
            }
        }
        else
        {
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x14, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x15, 0x05);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x16, 0x10);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x17, 0x10);
            if(CHKBIT_SET(path, TW2834_PATH_X))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x20, 0x07);
            }
            if(CHKBIT_SET(path, TW2834_PATH_Y))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x21, 0x07);
            }
        }
    }
    if ((0xffff == ratio_x) && (0x7fff == ratio_y))
    {
        if (VIDEO_NORM_PAL == norm_mode)
        {
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x14, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x15, 0xa0);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x16, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x17, 0x00);
            if(CHKBIT_SET(path, TW2834_PATH_X))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x20, 0x07);
            }
            if(CHKBIT_SET(path, TW2834_PATH_Y))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x21, 0x07);
            }
        }
        else
        {
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x14, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x15, 0xa0);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x16, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x17, 0x00);
            if(CHKBIT_SET(path, TW2834_PATH_X))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x20, 0x07);
            }
            if(CHKBIT_SET(path, TW2834_PATH_Y))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x21, 0x07);
            }
        }
    }
    if ((0x7fff == ratio_x) && (0x7fff == ratio_y))
    {
        if (VIDEO_NORM_PAL == norm_mode)
        {
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x14, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x15, 0xa5);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x16, 0x00);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x17, 0x00);
            if(CHKBIT_SET(path, TW2834_PATH_X))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x20, 0x07);
            }
            if(CHKBIT_SET(path, TW2834_PATH_Y))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x21, 0x07);
            }
        }
        else
        {
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x14, 0x50);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x15, 0xa0);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x16, 0xc0);
            tw2834_write_byte(PAGE0, (0x40 * ch) + 0x17, 0xc0);
            if(CHKBIT_SET(path, TW2834_PATH_X))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x20, 0x07);
            }
            if(CHKBIT_SET(path, TW2834_PATH_Y))
            {
                 tw2834_write_byte(PAGE0, (0x40 * ch) + 0x21, 0x07);
            }
        }
    }
}

/*************************record path control**********************************/
/*
 * Set the mode of the record path.
 * @param frame: frame mode or not (0,normal mod; 1,frame mod)
 * @param dis_mode: DVR mod or not (0,normal mod; 1,DVR mod)
 * @return value: null.
 */
static void tw2834_set_record_mod(unsigned char frame_op, unsigned char dis_mode)
{
    unsigned char byte_tmp;

    byte_tmp = tw2834_read_byte(PAGE1, REG_RECORD_MOD);

    CLEAR_BIT(byte_tmp, 0x40);
    SET_BIT(byte_tmp, ((frame_op & 0x01) << 6));
    CLEAR_BIT(byte_tmp, 0x10);
    SET_BIT(byte_tmp, ((dis_mode & 0x01) << 4));

    tw2834_write_byte(PAGE1, REG_RECORD_MOD, byte_tmp);
}

/*
 * Set the position of the channel for record path.
 * @param ch: channel number
 * @param pos: the position of the channel (can be 0 1 2 3)
 * @return value: null.
 */
static void tw2834_set_record_pic_pos(unsigned char ch, unsigned char pos)
{
    unsigned char byte_tmp;

    if(ch > 3 || pos > 3)
    {
        printk("\tTW2834_ERROR: Channel number or position input error\n");
        return;
    }

    byte_tmp = tw2834_read_byte(PAGE1, REG_PIC_POS);

    CLEAR_BIT(byte_tmp, (3 << (ch << 1)));
    SET_BIT(byte_tmp, (pos << (ch << 1)));

    tw2834_write_byte(PAGE1, REG_PIC_POS, byte_tmp);
}

/*
 * Set the pic size of each channel for the record path.
 * @param ch: channel number
 * @param pos: the size of the channel (can be 0 1 2 3)
 * @return value: null.
 */
static void tw2834_set_record_pic_size(unsigned char ch, unsigned char size)
{
    unsigned char byte_tmp;

    if(ch > 3 || size > 3)
    {
        printk("\tTW2834_ERROR: Channel number or size input error\n");
        return;
    }

    byte_tmp = tw2834_read_byte(PAGE1, REG_PIC_SIZE);

    CLEAR_BIT(byte_tmp, (3 << (ch << 1)));
    SET_BIT(byte_tmp, (size << (ch << 1)));

    tw2834_write_byte(PAGE1, REG_PIC_SIZE, byte_tmp);
}

/*
 * Set the operation mode of each channel for the record path.
 * @param op_mod: operation mode (can be FUNC_MODE_LIVE/STROBE/SWITCH )
 * @return value: null.
 */
static void tw2834_set_op_mode(unsigned char op_mod)
{
    unsigned char byte_tmp;
    unsigned char byte_op_mod;

    byte_op_mod = op_mod << 4;

    /*set switch mod for record path channel 0*/
    byte_tmp = tw2834_read_byte(PAGE1, 0x60);
    CLEAR_BIT(byte_tmp, 0x30);
    SET_BIT(byte_tmp, byte_op_mod);
    tw2834_write_byte(PAGE1, 0x60, byte_tmp);

    /*set switch mod for record path channel 1*/
    byte_tmp = tw2834_read_byte(PAGE1, 0x63);
    CLEAR_BIT(byte_tmp, 0x30);
    SET_BIT(byte_tmp, byte_op_mod);
    tw2834_write_byte(PAGE1, 0x63, byte_tmp);

    /*set switch mod for record path channel 2*/
    byte_tmp = tw2834_read_byte(PAGE1, 0x66);
    CLEAR_BIT(byte_tmp, 0x30);
    SET_BIT(byte_tmp, byte_op_mod);
    tw2834_write_byte(PAGE1, 0x66, byte_tmp);

    /*set switch mod for record path channel 3*/
    byte_tmp = tw2834_read_byte(PAGE1, 0x69);
    CLEAR_BIT(byte_tmp, 0x30);
    SET_BIT(byte_tmp, byte_op_mod);
    tw2834_write_byte(PAGE1, 0x69, byte_tmp);
}

/******************************************************************************/
/*
 * Set the record path to frame quad mod.
 * @return value: null.
 */
static void set_record_frame_quad(void)
{
    /*set vin scaling*/
    tw2834_setvin_scale_ratio(TW2834_PATH_Y, 0, 0x7fff, 0xffff);
    tw2834_setvin_scale_ratio(TW2834_PATH_Y, 1, 0x7fff, 0xffff);
    tw2834_setvin_scale_ratio(TW2834_PATH_Y, 2, 0x7fff, 0xffff);
    tw2834_setvin_scale_ratio(TW2834_PATH_Y, 3, 0x7fff, 0xffff);

    /*set live mod for record path */
    tw2834_set_op_mode(FUNC_MODE_LIVE);

    /*set record mod frame*/
    tw2834_set_record_mod(1, 0);

    /*set pic_size for each channel*/
    tw2834_set_record_pic_size(0, 0);
    tw2834_set_record_pic_size(1, 0);
    tw2834_set_record_pic_size(2, 0);
    tw2834_set_record_pic_size(3, 0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合中文字幕亚洲| 大桥未久av一区二区三区中文| 午夜a成v人精品| 国产精品性做久久久久久| 91黄色免费网站| 久久婷婷成人综合色| 性做久久久久久免费观看| 成人免费高清视频在线观看| 日韩一区二区三区精品视频| 亚洲男女毛片无遮挡| 国产高清不卡二三区| 91精品在线观看入口| 亚洲女人****多毛耸耸8| 国产精选一区二区三区| 91精品国产综合久久久久久| 亚洲欧美精品午睡沙发| 国产精品亚洲综合一区在线观看| 欧美日本韩国一区| 亚洲一区二区三区激情| bt欧美亚洲午夜电影天堂| 久久影院午夜片一区| 青青草国产成人99久久| 欧美无人高清视频在线观看| 亚洲色图另类专区| www.亚洲色图.com| 国产视频视频一区| 国产精品一区二区男女羞羞无遮挡| 欧美精品日韩一区| 亚洲一区二区三区四区在线观看 | 樱桃国产成人精品视频| 国产成人一区二区精品非洲| 精品国产人成亚洲区| 日本亚洲视频在线| 日韩欧美自拍偷拍| 欧美aaaaa成人免费观看视频| 欧美日韩精品免费观看视频| 亚洲国产一二三| 欧洲中文字幕精品| 亚洲国产一区二区在线播放| 欧美亚洲国产bt| 日韩激情av在线| 日韩美女天天操| 国产一区二区调教| 亚洲精品国产无天堂网2021| 91亚洲精品久久久蜜桃| 亚洲精品高清在线| 欧美日韩免费观看一区三区| 日韩高清在线电影| 精品国精品自拍自在线| 国产传媒一区在线| 亚洲欧洲日产国码二区| 在线一区二区三区四区五区| 亚洲午夜激情网站| 精品欧美一区二区三区精品久久| 激情深爱一区二区| 国产精品久99| 欧美日韩国产高清一区二区三区| 日韩电影一区二区三区| 亚洲精品在线免费观看视频| 成人黄色免费短视频| 亚洲一区二区免费视频| 日韩欧美黄色影院| zzijzzij亚洲日本少妇熟睡| 亚洲一卡二卡三卡四卡| 5858s免费视频成人| 国产一区二区不卡| 夜夜嗨av一区二区三区网页| 日韩欧美国产高清| 黄色小说综合网站| 亚洲免费观看高清在线观看| 欧美日韩高清在线| 粉嫩绯色av一区二区在线观看| 亚洲四区在线观看| 日韩欧美卡一卡二| 色综合天天综合网天天看片| 麻豆成人av在线| 亚洲欧美视频在线观看视频| 日韩一区二区免费在线观看| 成人a免费在线看| 日本欧美一区二区在线观看| 国产精品成人免费| 欧美xxxxx裸体时装秀| 色欧美乱欧美15图片| 韩国女主播成人在线观看| 一区二区三区在线播放| 久久亚洲影视婷婷| 欧美日韩一区二区在线视频| 风流少妇一区二区| 麻豆久久一区二区| 亚洲成人一区在线| 亚洲欧美在线视频| 精品福利av导航| 欧美群妇大交群中文字幕| av在线播放成人| 精品亚洲成a人| 日韩福利电影在线| 一区二区三区四区在线| 国产精品卡一卡二| 日本一区二区综合亚洲| 日韩一级大片在线观看| 欧美日韩在线免费视频| 99久久777色| 成熟亚洲日本毛茸茸凸凹| 精品一区二区三区免费观看| 亚洲电影激情视频网站| 亚洲免费电影在线| 国产精品日日摸夜夜摸av| 国产亚洲视频系列| 久久久久久一二三区| 日韩精品一区二区三区三区免费| 欧美日本在线观看| 欧美日韩一级视频| 精品视频在线视频| 欧美日韩国产a| 欧美精品一二三四| 欧美日韩高清一区二区不卡 | 久久精品国产久精国产| 午夜电影久久久| 亚洲不卡在线观看| 日韩成人午夜电影| 麻豆国产一区二区| 免费观看一级欧美片| 麻豆久久久久久| 国内精品免费**视频| 国产精品99久久久久久似苏梦涵| 韩日欧美一区二区三区| 国产伦精品一区二区三区在线观看| 久久99精品久久久久久国产越南| 久久www免费人成看片高清| 精品一区二区三区免费观看| 久久精品国产一区二区| 国产一区二区免费视频| 成人午夜视频福利| 色综合天天综合网国产成人综合天| 99re这里只有精品6| 在线中文字幕一区二区| 欧美一区二区日韩一区二区| 日韩免费视频一区| 国产欧美一区二区精品性色 | 欧美精品123区| 26uuu精品一区二区| 久久久激情视频| 综合欧美亚洲日本| 无吗不卡中文字幕| 国产成人亚洲精品青草天美| 99久久久久免费精品国产| 欧美性三三影院| 精品国产乱码久久久久久免费 | 3751色影院一区二区三区| 精品国产免费久久| 成人欧美一区二区三区白人| 亚洲一区二区三区在线| 狠狠色丁香婷婷综合久久片| 99热精品一区二区| 日韩一区二区视频在线观看| 亚洲国产激情av| 视频一区视频二区中文| 国产高清精品在线| 欧美日本在线看| 亚洲色图制服丝袜| 美女久久久精品| 不卡av电影在线播放| 欧美美女一区二区| 国产精品久久久久久户外露出| 水野朝阳av一区二区三区| 成人毛片老司机大片| 91精品国产乱| 亚洲精品久久久蜜桃| 国产成人精品免费| 91精品久久久久久久99蜜桃| 国产精品午夜在线| 麻豆91在线观看| 欧美性xxxxxxxx| 国产精品二三区| 九一久久久久久| 4438x亚洲最大成人网| 综合网在线视频| 国产剧情av麻豆香蕉精品| 欧美福利视频导航| 一区二区三区中文在线| 成人伦理片在线| 久久久99精品免费观看不卡| 日韩av电影免费观看高清完整版在线观看| 成人动漫一区二区三区| 久久影音资源网| 看片网站欧美日韩| 51久久夜色精品国产麻豆| 亚洲一区二区在线播放相泽| av中文一区二区三区| 国产欧美日韩综合精品一区二区| 日本欧美一区二区三区乱码| 欧美日韩亚洲另类| 一区av在线播放| 日本精品一级二级| 国产精品久久久久久久久快鸭 | 精品久久久网站| 免费的成人av| 91麻豆精品国产91久久久使用方法| 亚洲综合久久久久| 欧美视频三区在线播放|